ModBus (使用工業用觸控人機介面,HMI,泓格VPD-143)

首先說一下 泓格的VPD-143(工業用觸控人機介面,HMI)
如字面上的名稱,可觸控操控,也可於內部撰寫程式,進行控制
(不過程式介面是 HMIWorks,可由階梯程式或C撰寫,階梯程式讓人眼花撩亂,還是習慣用C之類的程式來撰寫)
我覺得這個工業HMI硬體功能很強大,有機會的話可以做很多系統

VPD-143功能:

  • 處理器(CPU) 32-bit RISC CPU
  • 記憶體擴充 16 MB SDRAM / 8 MB Flash
  • 乙太網路
  • 觸控面板
  • RS-232 (3-pin) / RS-485 ( 含 Self-Tuner) 擇一
  • 支援 Modbus TCP/RTU 通訊協定
  • 支援 I/O 擴充卡 (XV-board)
  • 視擴充卡的功能而定,可支援8~16 AIO,8~16 DIO

這次最主要的目的是使用Modbus RTU的功能,抓取多台RS485系統的訊號,再轉存為Excel資料。
因為Modbus功能是非雙向主動溝通系統,必須經由master對slave進行呼叫,才能讀取或寫入資料至slave的暫存器。
這是缺點就看使用場合了,但優點為Modbus允許多個 (大約240個) 裝置連線在同一個網路上進行通訊(串接時要小心訊號衰減的問題)。
如果需要可以雙向皆可主動傳訊息(比如當slave出現錯誤時,可以主動丟出錯誤訊息出來),可能要使用CAN BUS之類的通訊系統。
還好不是第一次使用通訊系統,想當年第一次接觸到通訊界面的時候是用Micro chip的RS-232的通訊界面,
摸索了很久才大概看得懂DataSheet是在寫什麼東西。
後來陸續接觸了I2C、CAN BUS、TCP等通訊界面因為之前有經驗了,所以很快就透過Google大神找到了API與範例程式
透過範例程式的閱讀,很快就了解了中間的問題。
唯一卡關比較久的問題反而是第一次去現場實測的時候卡關,
原本有利用TRY Catch抓取錯誤訊息,但是去現場之前手邊沒有硬體,
只能用水晶球抓取可預期的錯誤(Erroe ID),原以為已經分類出所以問題了,
現場一執行程式,程式馬上給我崩潰,顯示錯誤並且關掉程式,天啊!!!!
現場的其他人開始懷疑我的程式是否可運作!?
蝦米!!只好趕快現場DEBUG,花了一個多小時重新RUN過程式的流程,抓出錯誤訊,
Argument numberOfPoints must be between 1 and 125 inclusive
原來是一次抓取太多資料,Modbus無法傳送這麼多資料,原來是API的資料沒有全部看完,
透過分段讀取資料,總算把問題搞定!!安全下莊。