1 引言
稱重AD模塊已被廣泛使用在數(shù)字稱重傳感器制造、模擬秤的數(shù)字化改造、衡器儀表制造等領(lǐng)域, 除了基本的AD模數(shù)轉(zhuǎn)換功能外, 還具有去皮、清零、濾波、零點(diǎn)跟蹤等功能, 以及通信接口的設(shè)置。本文主要結(jié)合本公司設(shè)計(jì)生產(chǎn)的稱重AD模塊, 說明了對應(yīng)的上位機(jī)軟件編制相關(guān)內(nèi)容。
2 稱重AD模塊介紹
山東西泰克儀器有限公司研發(fā)的A/D模塊, 結(jié)構(gòu)上包括高精度24位AD模數(shù)轉(zhuǎn)換芯片、高性能微控制器、直流電源接口、模擬稱重傳感器接口、RS485半雙工通信接口等, 能對各類稱重傳感器輸出的m V信號進(jìn)行信號放大、A/D轉(zhuǎn)換及數(shù)字濾波處理, 除了無顯示外, 能夠完成稱重儀表的所有功能, 并與計(jì)算機(jī)、PLC或稱重儀表組成數(shù)字稱重系統(tǒng)[1]。以典型的AD-S321模塊為例, 其硬件連線圖如圖1所示。
可見, 電源方面采用直流9V供電。傳感器部分, 稱重AD模塊可與單只模擬稱重傳感器直接相連, 也可以將多只稱重傳感器在接線盒內(nèi)并聯(lián)后再與AD模塊連接, 連接時(shí)AD模塊通過橋源正EX+和橋源負(fù)EX-給模擬稱重傳感器提供電源, 模擬稱重傳感器的電橋輸出為信號正SI+和信號SI-, 輸出到稱重AD模塊。以上是常見四線加屏蔽線傳感器的連接方式, 如果是六線制傳感器, 還需將反饋SEN+ (或FB+) 和SEN- (或FB-) 分別連接橋源EX+和EX-。AD芯片完成模數(shù)轉(zhuǎn)換功能, 微控制器完成控制、協(xié)議解析、稱重算法實(shí)現(xiàn)、參數(shù)保存等功能。
通信方面, AD-S321采用RS485半雙工通信方式, 使用數(shù)據(jù)線A、B與主機(jī)進(jìn)行通信 (山東西泰克儀器有限公司還有其他模塊采用RS232或RS422等通信方式, 適合其他場合應(yīng)用的需要) 。從圖中可見, 當(dāng)使用RS485通信時(shí), 模塊與設(shè)備一般有三種連線方案:
(1) 連接PLC:模塊與客戶PLC通過RS485相連, PLC讀取模塊數(shù)據(jù)并可通過觸摸屏等進(jìn)行數(shù)據(jù)顯示和狀態(tài)指示。
(2) 連接PC機(jī):由于上位機(jī)通常沒有RS485接口, 所以需要先經(jīng)過RS485轉(zhuǎn)USB轉(zhuǎn)換器或RS485轉(zhuǎn)RS232轉(zhuǎn)換器, 然后在上位機(jī)上通過USB虛擬的串口或?qū)嶋H串口進(jìn)行通信, 上位機(jī)上需編制相應(yīng)軟件完成通信、顯示和控制等功能。
(3) 連接單片機(jī):可供有單片機(jī)開發(fā)能力的客戶進(jìn)行進(jìn)一步開發(fā)或嵌入其系統(tǒng)。
前兩種方案為較常見的應(yīng)用方案, 后文將闡述方案2中上位機(jī)軟件編制的有關(guān)內(nèi)容。以上是單只AD-S321模塊的硬件連線圖, 多只模塊總線連線圖, 如圖2所示。
圖2 稱重AD模塊總線方式連線圖 下載原圖
可見, 多只稱重AD模塊屬于廣播信道總線類型, 每個(gè)模塊地址唯一。多個(gè)稱重AD模塊的A (RS485+) 、B (RS485-) 是分別連在一起的。注意, 如果RS485信號傳輸線過長或同時(shí)并聯(lián)了多只AD-S模塊, 可能會(huì)因驅(qū)動(dòng)能力不足導(dǎo)致找不到模塊。此時(shí)可嘗試在模塊端的A與+5V直流電源間接一個(gè)1kΩ左右的上拉電阻R1, 在B與地之間接一個(gè)1kΩ左右的下拉電阻R2, 以提高帶載能力。如果是多只模塊并聯(lián), 只需在距離上位機(jī)最遠(yuǎn) (傳輸線最長) 的那只模塊上接上、下拉電阻。若仍不行, 可在RS485傳輸線的另一端也接上下拉電阻R3、R4。
3 上位機(jī)軟件的編制
稱重模塊對應(yīng)的上位機(jī)軟件需要完成的主要功能如下。
3.1 串口通信
串口通信在目前工控領(lǐng)域占有重要地位, 它通信簡單, 在通信數(shù)據(jù)量不大的稱重行業(yè)有著廣泛的應(yīng)用。我們的模塊采用異步串行收發(fā)UART, 需要在軟件中設(shè)置的項(xiàng)目有:提供當(dāng)前可用串口列表供用戶選擇, 波特率選擇 (一般9600bps~115200bps) , 校驗(yàn)位選擇 (默認(rèn)偶校驗(yàn)) , 數(shù)據(jù)位選擇 (默認(rèn)8位) , 停止位選擇 (默認(rèn)1位) 。
3.2 自動(dòng)地址掃描程序
稱重AD模塊地址范圍0~31 (Modbus時(shí)地址范圍1~31) , 一般我們并不知道正在使用的模塊地址是多少, 因此需要通過自動(dòng)地址掃描程序來確定當(dāng)前模塊的地址。由于采用廣播信道總線狀拓?fù)? 一個(gè)結(jié)點(diǎn) (主機(jī)或模塊) 發(fā)送信息時(shí), 該信息將通過總線傳到每一個(gè)結(jié)點(diǎn)上。其他結(jié)點(diǎn) (模塊) 在接收到信息時(shí)先要分析該信息的目標(biāo)地址與本結(jié)點(diǎn)地址是否相同, 若相同則接收該信息, 若不相同, 則忽略[2]。
地址掃描流程圖, 如圖3所示。注意, 在連到總線之前, 應(yīng)確保所有連在同一總線上的模塊有不同的地址, 否則將引起地址沖突。開始掃描后, 主機(jī)先發(fā)送選擇某地址的指令, 然后發(fā)送詢問當(dāng)前地址的指令, 之后如果能夠收到模塊應(yīng)答, 則記錄該模塊地址, 沒有應(yīng)答說明總線上沒有該地址的模塊。最后, 在沒有達(dá)到地址上限31的情況下, 地址值加1, 類似地進(jìn)行下一個(gè)地址模塊的查詢。
圖3 稱重AD模塊地址掃描流程圖 下載原圖
3.3 通過指令按鈕方式進(jìn)行參數(shù)讀寫
上位機(jī)軟件中將常用的讀寫指令以按鈕方式提供給用戶, 方便用戶操作。這些通過點(diǎn)擊按鈕直接操作的指令主要包括:去皮、皮重值、毛凈重切換、零載標(biāo)定、加載標(biāo)定、標(biāo)定分度數(shù)寫入、清零、最大量程、分度值、開機(jī)置零范圍、手動(dòng)清零范圍、零點(diǎn)跟蹤范圍、零點(diǎn)跟蹤速率等。下圖顯示的僅是與“重量數(shù)據(jù)”顯示有關(guān)的界面, 內(nèi)容包括重量數(shù)據(jù)格式 (008) , 當(dāng)前毛凈重狀態(tài) (凈重) , 點(diǎn)擊radiobutton按鈕切換毛重凈重狀態(tài), 可見此刻的凈重20988g與皮重526g, 目前重量數(shù)據(jù)偵測校驗(yàn)已經(jīng)開啟, 數(shù)據(jù)校驗(yàn)正常 (綠色指示燈為正常, 如果異常為紅色指示燈, 如果未開啟數(shù)據(jù)校驗(yàn)為黑色指示燈) , 另外還可進(jìn)行清零和去皮等重量操作 (去皮時(shí)保存皮重值) , 小數(shù)點(diǎn)位數(shù)和顯示分度值這里是軟件控制的。其他讀寫參數(shù)的按鈕則采用列表方式, 顯得整齊美觀。重量相關(guān)的顯示和設(shè)置界面, 如圖4所示。
圖4 重量相關(guān)的顯示和設(shè)置界面 下載原圖
3.4 手動(dòng)指令輸入
盡管常用指令可以通過相應(yīng)按鈕直接操作, 但界面空間有限, 一些不常用的命令不可能都在軟件中顯示。這時(shí)我們可以采取手動(dòng)輸入任意命令的方式進(jìn)行相關(guān)操作, 當(dāng)然也可以完全替代相應(yīng)按鈕功能。
自由口的手動(dòng)指令輸入界面較簡單, 這里以Modbus RTU為例, 相關(guān)界面如圖5所示。
可見, 界面主要包括讀或?qū)懠拇嫫髦噶钸x擇, 參數(shù)類型選擇, 參數(shù)值輸入或讀取, 手動(dòng)指令發(fā)送, 接收數(shù)據(jù)顯示, 定時(shí)發(fā)送指令設(shè)置等。其中, 模塊地址可以自動(dòng)掃描出來。當(dāng)采用手動(dòng)發(fā)送指令方式時(shí), 可直接在“HEX指令”窗口內(nèi)輸入待發(fā)送HEX指令, 不需輸入CRC16校驗(yàn), 軟件會(huì)自動(dòng)產(chǎn)生CRC校驗(yàn)附在指令后面, 然后點(diǎn)擊“發(fā)送”即可通過串口自動(dòng)發(fā)送出去, 同時(shí)發(fā)送區(qū)會(huì)顯示包含CRC的完整發(fā)送十六進(jìn)制數(shù)據(jù), 接收區(qū)會(huì)顯示接收到的數(shù)據(jù)。如這里HEX指令發(fā)送1F 03 0024 00 01, 實(shí)際發(fā)送數(shù)據(jù)為1F 03 00 24 00 01C7 BF (發(fā)送區(qū)第一行, 為詢問濾波強(qiáng)度指令) , 接收為1F 03 02 00 06 90 44 (接收區(qū)第一行, 表明當(dāng)前濾波系數(shù)為6) 。另外, 這里也可以方便地直接點(diǎn)擊下拉框來選擇要發(fā)送的指令, 如發(fā)送和接收區(qū)的第三行即是讀取收斂常數(shù)的指令, 發(fā)送區(qū)會(huì)將指令自動(dòng)地“翻譯”成對應(yīng)的HEX發(fā)送數(shù)據(jù)并顯示, 接收到模塊返回值為100 (0×64) 。
4 軟件通信協(xié)議
山東西泰克儀器有限公司的稱重AD模塊從通信協(xié)議角度來講分三類, 第一類支持公司自由口通信協(xié)議, 第二類支持標(biāo)準(zhǔn)的Modbus RTU協(xié)議, 第三類同時(shí)支持自由口和Modbus RTU協(xié)議, 二者可用命令相互切換。
圖5 Modbus RTU協(xié)議的顯示界面 下載原圖
無論自定義的自由口協(xié)議還是通用的Modubs RTU協(xié)議, 都屬于軟件層, 與硬件網(wǎng)絡(luò)RS485、RS422等無關(guān), 與串口幀結(jié)構(gòu)也無關(guān)。不管采用何協(xié)議, 我們都可選擇相同的通訊接口形式, 如RS485, 也可選擇相同的幀結(jié)構(gòu), 如1個(gè)起始位0, 8位數(shù)據(jù)位, 1位奇偶校驗(yàn), 1個(gè)停止位1。
山東西泰克儀器有限公司自由口協(xié)議和Modbus RTU協(xié)議的不同點(diǎn)是:前者所需輸入的是ASCII字符 (對應(yīng)的二進(jìn)制數(shù)據(jù)) , 即文本方式的命令, 發(fā)送命令以分號表示結(jié)束, 返回參數(shù)一般也是ASCII字符形式, 只是某些格式的稱重?cái)?shù)據(jù)有時(shí)會(huì)采用十六進(jìn)制形式, 結(jié)束符為回車換行CRLF (0x0D和0x0A) 。
而Modbus RTU通信格式時(shí), 所有數(shù)據(jù)都是以十六進(jìn)制數(shù)據(jù)進(jìn)行發(fā)送和接收的, 大都直接對寄存器進(jìn)行操作。Modbus協(xié)議建立了主設(shè)備查詢的格式:設(shè)備 (或廣播) 地址、功能代碼、所有要發(fā)送的數(shù)據(jù)、錯(cuò)誤檢測字段[3]。典型的RTU信息幀如下:
其中設(shè)備地址為模塊地址, 常用的功能碼有讀保持寄存器 (0×03) 、預(yù)置單個(gè)寄存器 (0×06) 、預(yù)置多個(gè)寄存器 (0×10) 等, 數(shù)據(jù)包括寄存器地址、個(gè)數(shù)、數(shù)值等。CRC校驗(yàn)采用CRC16, 軟件可自動(dòng)生成并附加。
5 結(jié)論
本文舉例采用的軟件與山東西泰克儀器有限公司稱重AD模塊配合使用, 既支持自由口協(xié)議, 又支持Modbus RTU協(xié)議, 同時(shí)適應(yīng)普通模塊和高速模塊, 界面友好。經(jīng)長期運(yùn)行, 穩(wěn)定可靠, 后續(xù)版本中, 還將增加實(shí)時(shí)曲線顯示、數(shù)據(jù)統(tǒng)計(jì)、多通道顯示、數(shù)據(jù)保存、導(dǎo)入導(dǎo)出等功能, 使該軟件更加完善。