周奇才,路 凱,熊肖磊,趙 炯
(同濟大學 機械與能源工程學院,上海 201804)
傳統橋式起重機作為物料搬運的主要方式,應用范圍廣泛,使用體量大,可靠性高,效率高,在機械加工、工業生產、冶金、物流運輸中都發揮著巨大的作用[1]。但大多數橋式起重機,僅實現了較低級的智能化控制,并未真正實現路徑規劃、智能尋跡等高級智能化控制。因此,搭建起重機自動化控制軟硬件平臺,實現起重機智能化是必然趨勢。
在橋式起重機智能化平臺中工控機與PLC的數據交換是重要的一環,類似于普通工業級兩級計算機控制系統中上位機與下位機間的通信問題。對于上、下位機之間的通信問題,學者提出了很多解決方法[2-5]。而Python作為一種面向對象、直譯式計算機程序設計語言,其語法簡捷而清晰,具有豐富和強大的類庫[6]。本文采用基于Windows下的Python語言進行工控機編程設計,實現了工控機與橋式起重機機載PLC通信以及數據交互的功能。
橋式起重機智能化平臺的設計架構為兩級計算機控制系統。處于上位的計算機即將來的遠程控制中心,它可根據實時數據,利用在線最優目標函數進行被控對象的最優目標值計算,輸出到下一級系統,還可以對故障進行診斷與預測[7];下位機為直接數字控制系統(Direct Digital Control,簡稱 DDC)。
本文重點介紹下位DDC系統。為實現橋式起重機的智能化,DDC系統除原有PLC中采集到的各傳感器數據信息外,為實現吊鉤防搖、防搖策略閉環控制的吊鉤擺角檢測、起重機智能路徑規劃等高級控制功能,還需要加入計算機視覺等輸入信息。因此需加入以微型計算機為載體,可插接各種控制板實現復雜控制功能[8]的工控機,與機載PLC共同完成下位機功能。下層DDC結構框圖如圖1所示。通過工控機與PLC組合實現DDC的功能,智能化平臺系統整體架構如圖2所示。

圖1 橋式起重機計算機監控系統DDC結構框圖

圖2 橋式起重機智能化平臺系統整體架構
工控機作為數據路由是智能化平臺改造的核心,該數據交換要求實時性好、可靠性高,筆者就工控機Windows下編程實現數據交換功能進行介紹。
由于工控機集合了數據交互、路徑規劃、防搖控制等功能結構,因此其接口設計包括:負責與遠程監控中心通信的遠程通信接口;進行數據交互的與PLC連接的PLC通信接口;涉及到路徑規劃時需要通過雙目攝像頭對環境視頻信息進行采集的視頻接口等。工控機硬件接口設計如圖3所示。
工業控制系統有多種數據交互的方式,對于一般的常用于工業生產領域的可編程控制器,其工業控制要求使用Modbus通信協議,此為最常用的工業控制系統接口。而對于以計算機控制系統為核心的DCS控制系統中,一般采用TCP/IP等可靠傳輸通信方式[9]。

圖3 工控機硬件接口
考慮到控制系統的融合,本系統采用TCP/IP、Modbus和串口通信方式的對外接口。TCP/IP作為可靠通信方式,其通信速度、連接可靠性、通信數據包可自定義以適用于本系統;而用于與PLC通信的Modbus則需要根據其通信標準,嚴格按照其數據格式、長度等進行使用。考慮到視頻信號及其他分散式控制器等,設計也滿足RS485數據傳輸的串口通信方式。
基于現場工控機功能設計框架,本設計在Windows環境下編程,以滿足方便可視化窗口編程、及時顯示代碼問題、調用更多的庫函數等需求。
為使整個軟件的通信過程更加合理,軟件層級結構如圖4所示,借鑒TCP/IP層級結構,將工控機軟件按照功能邏輯劃分為通信層、協議層、業務層。

圖4 軟件層級結構
通信層負責建立端口,并對網絡/串口/USB等外部設備進行讀寫,其不僅要保證讀寫數據的完整性,而且還要對讀寫時間進行控制;協議層負責將上層需要發送的數據按照協議格式組裝成數據幀,向下傳遞給通信層,或接收來自通信層的數據,根據應用協議進行解析,向上傳遞給業務層;業務層負責處理來自遠程設備或手持設備的請求,根據請求向PLC發送指令進行控制。本系統充分利用軟件的分層設計來降低數據交互的復雜度,并且使整個系統的軟件和硬件耦合度降低。
Modbus協議是一種工業通信和分布式控制系統協議,屬于主從網絡,是一種基于應用層的報文傳輸協議,協議采用命令/應答模式實現一個主機對一個或多個從機的通信[10]。TCP協議是基于傳輸層的協議,為面向連接的端到端可靠傳輸協議,還可提供設備間的全雙工連接,保證傳輸的實時性。
Modbus/TCP通信模型是將Modbus協議作為應用層嵌入底層TCP/IP中,如圖5所示,采用Client/Server模式進行報文傳輸。在客戶端,負責把來自用戶的信息(如用戶要求執行的操作和被控制的對象等)封裝成Modbus幀;在服務器端,負責解釋來自客戶端的Modbus幀,執行相應的請求[11]。最終實現上位工控機對PLC寄存器、I/O輸入口信號讀取的監控功能。
PLC提供了大量的數據寄存器,并將寄存器分成各種功能塊,其中包含了中間繼電器區、開關量輸出繼電器區、模擬量輸出寄存器區、開關量輸入繼電器區、計數器等功能寄存器區、模擬量輸入寄存器區、數據寄存器區等。

圖5 Modbus/TCP模型
基于通信協議設計架構,在Windows操作環境下編程時,選擇已有的pyModbusTCP庫函數。pyModbusTCP庫允許通過雙向通信的方式使用指定的MODBUS地址從PLC中讀取數據,并通過以太網將數據寫入PLC。pyModbusTCP使用TCP/IP連接上的異步通信,減少了代碼量,并具有良好的調試和連接管理功能。
可讀PLC指定地址寄存器線圈字節,以此讀取每一位數據值進行后續分析。下面代碼利用面向對象的編程思想,設置 Modbus Tcp Client類,及對應的連接方法如connect,實際函數內部采用winsocket編程,Socket編程是為了簡化TCP/UDP通信而產生的技術,是一個通信連接在本端的句柄(該句柄由本地操作系統分配和管理),建立Socket連接后通信雙方通過本地的Socket句柄和對端通信[12]。
下列為利用Socket函數進行初始化地址設置及連接相應端口,并設置連接超時,確定連接在設置時間內是否成功連接,并返回連接結果的代碼段:
#Client connection
import socket
from socket import*
ADDR=(HOST=‘192.168.1.100’,PORT=52)
try:
tcpCliSocket=socket(AF_INET,SOCK_STREAM)
tcpCliSocket.settimeout(10)
tcpCliSocket.connect(ADDR)
tcpCliSocket.settimeout(None)
print(“Connect Successful”)
except:
print(“Connect Failure!”)
同時利用庫函數,可實現讀寫寄存器的功能,以此簡化編程操作,滿足適應任何平臺的交互。下列為設置連接后讀取相應位置寄存器內數據功能的代碼段:
from pymodbus.client.sync import ModbusTcpClient
#modbus connection
client=ModbusTcpClient(‘192.168.1.100’)
connnection=client.connect()
#read register
request=client.read_holding_registers(***,3)
result=request.registers
PLC端寄存器通過遠程手持設備(如遙控設備)進行測試值的遠程輸入,測試電腦運行程序讀取PLC相應寄存器內的數據值。具體測試流程如圖6所示。

圖6 測試程序流程
遙控設備輸入信號值將對應起重機相應動作位,因此我們通過現場遙控設備發送的通信信號采集PLC對應寄存器信號后,可經過分析得到大車小車、主鉤的運動方向及運動速度(由控制信息可分析出運行的檔位,對照起重機國家標準,可得到對應裝置運行速度),對應信息如表1所示。

表1 起重機各機構主要參數(速度) m/min
例如手持設備控制信息為大車向前移動一檔,PLC將通過控制變頻器繼而控制電機轉速,實現橋式起重機的大車向前運動動作,并且電機將以起重機標準規定的一檔速度運動。
我們利用工控機上Python程序進行通信動作狀態的監測,將手持設備傳輸的通信動作指令進行解碼,從而在驗證通信過程的同時獲取設備狀態信息。在確定工控機、PLC的網絡連接及通信正常后,運行工控機程序進行測試。
(1)查看工控機程序是否成功連接到PLC,程序運行界面如圖7所示。

圖7 工控機成功與PLC連接
(2)查看通信狀態輸出及起重機動作狀態。圖8為工控機程序讀到的起重機初始動作狀態,此時控制大車、小車、主起升的開關量都為0,起重機的大車、小車、主起升等機構均應處于靜止狀態。

圖8 初始狀態
(3)改變手持設備的通信控制狀態,觀察此時起重機接收狀態及起重機運動狀態是否有變化。圖9為遙控器狀態改變。圖9表示此時接收到的通信動作指令為:大車右行一檔、主起升上升一檔。此時大車應該以一檔的速度向右行駛,主起升以一檔的速度上升。

圖9 遙控器狀態改變
多次改變控制動作指令狀態,通信后讀取到起重機按照正確的方向、速度運行,通信狀態穩定可靠。
為測試工控機數據交互的實時性和可靠性,我們通過網關向工控機信息路由發送分別包含2 000個傳輸數據包的4組數據,重復發送實驗5次,其大小分別為128B、256B、512B和1kB,檢測發送成功后統計每組重復數據傳輸過程中的傳輸時延及丟包率,結果如表2所示。

表2 通信測試結果
表2中的結果驗證了工控機信息路由的數據包捕獲轉發過程能正常進行,且丟包率低,滿足通信交互的實時性和可靠性要求。
本文創新地利用Python語言及開源庫在Windows編程環境下實現了橋式起重機自動化過程中的中層控制工控機的編程,實現了工控機與起重機機載PLC的數據交換過程。
Windows環境下編寫的工控機程序具有一定的普適性,還能避免傳統Linux環境下編程指令復雜、界面操作困難等弊端。有效地減少了系統環境限制,同時使用Windows下現有api函數庫與類,簡化了編程難度與代碼復雜程度,具有一定的推廣價值。