張江辰,徐世許,孫學(xué)凱,朱君高
(青島大學(xué) 自動(dòng)化學(xué)院,青島 266071)
在工業(yè)生產(chǎn)和國(guó)民經(jīng)濟(jì)生活中,車輛稱重業(yè)務(wù)在各個(gè)行業(yè)具有廣泛應(yīng)用,始終占據(jù)著重要的地位。國(guó)民經(jīng)濟(jì)的迅速發(fā)展也使得各類企業(yè)對(duì)車輛稱重業(yè)務(wù)的需求量越來越大,這對(duì)一些企業(yè)的車輛稱重系統(tǒng)和車輛稱重業(yè)務(wù)部門造成了極大的壓力,同時(shí)也為車輛自動(dòng)化稱重管理系統(tǒng)的發(fā)展帶來了新的挑戰(zhàn)與歷史機(jī)遇。某再生能源公司車輛稱重流程復(fù)雜且效率低下,在稱重時(shí)需要現(xiàn)場(chǎng)工作人員將車輛稱重信息錄入Excel表格,耗費(fèi)大量時(shí)間成本,并且會(huì)發(fā)生現(xiàn)場(chǎng)工作人員與車主串通對(duì)稱重?cái)?shù)據(jù)徇私舞弊,給企業(yè)帶來經(jīng)濟(jì)上的損失[1]。針對(duì)以上存在的問題,設(shè)計(jì)了一套適用于企業(yè)的、能夠?qū)崿F(xiàn)車輛自動(dòng)化稱重、具有稱重管理的車輛自動(dòng)化稱重管理系統(tǒng)。該系統(tǒng)應(yīng)用后在防止稱重環(huán)節(jié)人員作弊的同時(shí)可大大提高用戶的稱重效率,并提高企業(yè)的管理水平。
自動(dòng)化稱重管理系統(tǒng)硬件由上位機(jī)、歐姆龍CP1H系列PLC、梅特勒-托利多IND780型稱重儀表、梅特勒-托利多VTS257120-3418型數(shù)字式電子汽車衡、語(yǔ)音播報(bào)控制器、信號(hào)指示燈、出入口擋桿、紅外對(duì)射裝置、地感線圈、監(jiān)控?cái)z像頭組成。車輛稱重前,需要通過RFID讀卡器識(shí)別車輛稱重權(quán)限,權(quán)限通過后,PLC控制擋桿打開,兩側(cè)紅燈亮起,現(xiàn)場(chǎng)語(yǔ)音播報(bào)“車輛識(shí)別成功”,車輛開始駛?cè)肫嚭?;車輛完全駛?cè)肫嚭夂?,紅外對(duì)射裝置檢測(cè)車輛是否完全上秤;完全上秤后,兩側(cè)檔桿落下,開始讀取車輛重量數(shù)據(jù);數(shù)據(jù)讀取后系統(tǒng)自動(dòng)進(jìn)行車輛相關(guān)信息以及稱重?cái)?shù)據(jù)的保存,完成數(shù)據(jù)保存后出口側(cè)檔桿抬起,語(yǔ)音播報(bào)“重量讀取完畢,請(qǐng)下稱”;當(dāng)出口側(cè)地感線圈檢測(cè)到信號(hào)變化后,表示汽車已經(jīng)完全離開汽車衡,出口側(cè)檔桿落下,稱重完成。IND780稱重儀表獲取到車輛重量后,通過工業(yè)以太網(wǎng)傳送到上位機(jī)中。系統(tǒng)硬件結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)硬件結(jié)構(gòu)圖
在車輛自動(dòng)化稱重過程中,上位機(jī)需要對(duì)PLC發(fā)送命令指示門禁擋桿和語(yǔ)音播報(bào)器發(fā)出動(dòng)作,當(dāng)上位機(jī)讀取到穩(wěn)定的車輛重量數(shù)據(jù)后也需要指示PLC完成對(duì)硬件的一系列操作?;贔ins TCP協(xié)議的以太網(wǎng)通信,可以實(shí)現(xiàn)上位機(jī)與歐姆龍PLC的通信[2]。具體實(shí)現(xiàn)過程與編程如下:
1)引入命名空間。用C#語(yǔ)言實(shí)現(xiàn)Fins TCP通信需要開啟Socket服務(wù),將PLC作為服務(wù)器端,將上位機(jī)作為客戶端來進(jìn)行通信。開啟Socket服務(wù)必須引入System.Net.Sockets和using System.Net命名空間。引入這兩項(xiàng)命名空間的代碼為:
2)構(gòu)建Fins TCP協(xié)議中PLC的IP地址、端口號(hào)、本機(jī)節(jié)點(diǎn)等參數(shù)[3]。其中設(shè)定的string類型變量RemoteIP代表PLC的IP地址,int類型變量RemotePort代表端口號(hào),byte類型變量 fra表示本機(jī)節(jié)點(diǎn)。相關(guān)代碼如下:
3)建立握手連接。所謂建立握手連接就是上位機(jī)向PLC發(fā)送握手連接命令,PLC接收到命令后向上位機(jī)返回命令,如果返回命令中無錯(cuò)誤返回值代表握手連接成功。上位機(jī)向PLC發(fā)送握手的命令編碼如下所示:
4)寫位數(shù)據(jù)。對(duì)PLC寫數(shù)據(jù)就是將構(gòu)建好的具有寫位數(shù)據(jù)命令Fins TCP協(xié)議幀發(fā)送給PLC。以下程序?yàn)闃?gòu)建寫位數(shù)據(jù)字段的程序,其中變量memory和sendBit分別表示內(nèi)存地址和位號(hào)。
5)返回值判斷。在Fins TCP通信過程中,上位機(jī)對(duì)PLC發(fā)送Fins TCP協(xié)議指令碼,然后PLC返回響應(yīng)碼,響應(yīng)碼包含響應(yīng)返回值,通過讀取返回值可以判斷指令是否執(zhí)行成功。
IND780稱重儀表?yè)碛蠩therNet/IP接口,使用Socket服務(wù)可與上位機(jī)建立通信[5]。通信建立后,開啟稱重?cái)?shù)據(jù)監(jiān)聽線程,可實(shí)現(xiàn)上位機(jī)對(duì)稱重儀表中數(shù)據(jù)的實(shí)時(shí)讀取。以下為建立通信和監(jiān)聽線程的主要程序。上位機(jī)讀取稱重?cái)?shù)據(jù)的軟件流程圖如圖2所示。
圖2 稱重?cái)?shù)據(jù)讀取軟件流程圖
1)建立通信。
2)建立監(jiān)聽線程。
2.2.2 稱重儀表數(shù)據(jù)輸出格式
稱重儀表的數(shù)據(jù)輸出格式為標(biāo)準(zhǔn)連續(xù)輸出模式,數(shù)據(jù)以十六進(jìn)制的ASCII碼傳輸,一條完整的數(shù)據(jù)共有18個(gè)字符。采用連續(xù)輸出模式一般禁用校驗(yàn)和,因此除去數(shù)據(jù)標(biāo)志E位,此時(shí)總位數(shù)為17。表1為IND780稱重儀表的標(biāo)準(zhǔn)連續(xù)輸出格式數(shù)據(jù)。
表1 儀表標(biāo)準(zhǔn)連續(xù)輸出格式
2.2.3 重量數(shù)據(jù)處理
上位機(jī)為了將從稱重儀表中讀取到的數(shù)據(jù)便于處理,首先需要將接收的數(shù)據(jù)從十六進(jìn)制ASCII碼轉(zhuǎn)換為標(biāo)準(zhǔn)ASCII碼,并將其作為String類型數(shù)據(jù)進(jìn)行處理。以下為通過String類型數(shù)據(jù)字符串中截取重量數(shù)據(jù)的處理過程:
1)首先使用String類的LastIndexOf(FindStr)方法,設(shè)定數(shù)據(jù)流中的字母“D”的十六進(jìn)制數(shù)作為需要查找的字符參數(shù)Findstr,此時(shí)將返回字母“D”的在字符串中的下標(biāo)。
2)依次向前查找字符串表示重量的起始下標(biāo),使用SubString(a,b)方法,將參數(shù)a設(shè)定為重量數(shù)據(jù)的起始下標(biāo),b作為向后查找的位數(shù),由此可以截取到稱重?cái)?shù)據(jù)。
3)最后上位機(jī)在連續(xù)獲取5次數(shù)據(jù)并且之間不超過設(shè)定誤差后,將此次稱重?cái)?shù)據(jù)記錄,這樣就完成了一次穩(wěn)定重量數(shù)據(jù)的讀取。
2.3.1 RS485通信建立
使用串口通信的方式實(shí)現(xiàn)上位機(jī)與RFID讀卡器的RS485通信,在C#語(yǔ)言環(huán)境下實(shí)現(xiàn)RS485通信串口通信一般需要調(diào)用SerialPort類來實(shí)現(xiàn),在系統(tǒng)硬件設(shè)置選項(xiàng)中,使用SerialPort類可以根據(jù)RFID讀卡器的各項(xiàng)通信參數(shù)來設(shè)置“串口號(hào)”,“波特率”,“數(shù)據(jù)位”,“停止位”,“校驗(yàn)位”,設(shè)置正確后使用硬件連接測(cè)試,連接成功后表示建立起通信。
2.3.2 RFID卡號(hào)讀取
建立起RS485通信后,根據(jù)RFID讀卡器廠家提供的SDK,只需調(diào)用SDK中設(shè)計(jì)好的類和方法,上位機(jī)便可以對(duì)讀卡器進(jìn)行相應(yīng)操作,廠家提供的SDK中的類和方法如表2所示。如上位機(jī)讀取識(shí)別卡信息時(shí)需要循環(huán)接收串口信息,系統(tǒng)在開機(jī)運(yùn)行時(shí)會(huì)自動(dòng)調(diào)用Card類的start()方法,保持開啟狀態(tài)[4],當(dāng)讀卡器讀取到數(shù)據(jù)時(shí),可以調(diào)用SDK中的讀取函數(shù)即read()方法對(duì)卡號(hào)信息進(jìn)行讀取。
表2 RFID數(shù)據(jù)讀取類及方法表
卡號(hào)信息用字符串類型數(shù)據(jù)保存。在上位機(jī)成功提取到卡號(hào)信息后對(duì)該卡號(hào)進(jìn)行數(shù)據(jù)庫(kù)中比對(duì),進(jìn)行比對(duì)的數(shù)據(jù)來源為卡信息表。如果卡信息表中存在該卡號(hào),則表示比對(duì)成功允許車輛稱重,否則不允許稱重。在車輛稱重過程中不允許對(duì)卡號(hào)的讀取操作。對(duì)卡號(hào)讀取并進(jìn)行判斷的軟件流程圖如圖3所示。
圖3 卡號(hào)讀取判斷軟件流程圖
車輛稱重管理系統(tǒng)在Windows7系統(tǒng)下的Visual Studio 2017平臺(tái)開發(fā),用C#語(yǔ)言編程實(shí)現(xiàn),具體實(shí)現(xiàn)的功能如下:
1)新增車輛信息錄入功能。在車輛入廠前,將需要寫入信息的RFID識(shí)別卡發(fā)放給運(yùn)輸司機(jī)。進(jìn)行制卡時(shí),點(diǎn)擊卡信息維護(hù)界面上的增加按鈕,將卡放到讀卡器上,系統(tǒng)會(huì)自動(dòng)讀取卡號(hào)[5]。然后輸入各類信息如車牌號(hào)、貨物名稱、發(fā)貨單位等,最后保存便完成制卡。新增車輛信息錄入界面如圖4所示。
圖4 新增車輛信息錄入界面
2)系統(tǒng)狀態(tài)監(jiān)視功能。為實(shí)時(shí)顯示車輛的稱重過程狀態(tài)、展示系統(tǒng)讀取到的各類信息,因此系統(tǒng)的主界面需要監(jiān)控并顯示各類數(shù)據(jù)與狀態(tài)[6]。實(shí)時(shí)狀態(tài)監(jiān)視界面主要由車輛狀態(tài)監(jiān)視、重量數(shù)據(jù)顯示、車輛信息顯示、臨時(shí)表歷史記錄顯示、稱重歷史曲線等組成。稱重顯示主界面如圖5所示。
圖5 車輛稱重顯示主界面
3)稱重?cái)?shù)據(jù)查詢功能。數(shù)據(jù)查詢可以根據(jù)時(shí)間段和多個(gè)查詢條件如車牌號(hào)、卡號(hào)、貨物名稱、重量范圍等得到所有的稱重?cái)?shù)據(jù)記錄[7],在數(shù)據(jù)查詢中時(shí)間條件是必須輸入條件,其他條件可以自由組合。選擇好查詢條件后,點(diǎn)擊確認(rèn)查詢,可以查詢到數(shù)據(jù)庫(kù)中記錄的具體信息。數(shù)據(jù)查詢界面如圖6所示。
圖6 稱重?cái)?shù)據(jù)查詢界面
本文根據(jù)企業(yè)具體稱重需求,結(jié)合歐姆龍PLC與Visual Studio 2017環(huán)境下開發(fā)的上位機(jī)軟件,設(shè)計(jì)了車輛自動(dòng)化稱重管理系統(tǒng)。系統(tǒng)具有車輛權(quán)限檢測(cè)、動(dòng)態(tài)檢重、數(shù)據(jù)讀取、數(shù)據(jù)存儲(chǔ)等功能,能夠?qū)④囕v信息自動(dòng)錄入數(shù)據(jù)庫(kù)中,方便用戶查詢、追溯。目前該系統(tǒng)已經(jīng)在企業(yè)中投入使用,減少了人工成本,提高了檢重效率,運(yùn)行效果穩(wěn)定可靠,為企業(yè)提升了經(jīng)濟(jì)效益。