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