使用 modbus TCP 工業通訊協定
材料準備
- Ameba x 1
範例說明
Modbus是一種通信協定,可以實作在各種不同的介面上,像是Serial、Ethernet、Wifi。這個範例裡我們會使用Ameba透過wifi TCP實作Modbus TCP。
Modbus的角色有Master與Slave。Master發起命令,而Slave回應訊息。這裡Ameba扮演Slave的角色,而Master會嘗試讀取Ameba上面的資料。
Modbus的角色有Master與Slave。Master發起命令,而Slave回應訊息。這裡Ameba扮演Slave的角色,而Master會嘗試讀取Ameba上面的資料。
- 下載Modbus tool
Modbus相關的程式很多,這裡我們使用modpoll這個command line工具,它目前是免費的,相關的文件可以在這個網站上找到: http://www.modbusdriver.com/modpoll.html下載之後解壓縮,會看到裡面有不同OS的版本,舉例來說,Windows的版本會在 win32\modpoll.exe
- 下載Ameba Modbus library
請到這個地方下載Ameba Modbus library: https://github.com/ambiot/amb1_arduino/raw/master/Arduino_libraries/ModbusTCP-1.0.0.zip安裝library的方式請參考Arduino官方網站的教學文章將zip檔的library加入Ameba: https://www.arduino.cc/en/Guide/Libraries#toc4
這個library預設內存32個16-bit大小的空間。在Modbus的架構裡,Master會認為這個空間是Ameba的register。實作上我們只要將這個空間擺置我們想要的資料即可。
- 測試範例
請打開範例 “File” -> “Examples” -> “AmebaModbus” -> “simepletest”
這個範例需要連上Wifi AP,請修改要連上的wifi ssid/password,上傳至Ameba之後按下Reset按鈕。
接著我們要使用modpoll這個工具,如果你的OS是windows,請執行底下的命令: modpoll -m tcp -t 4:int -r 40003 192.168.1.196最後一個參數是Ameba的IP,請填上對應的值。各個參數的說明如下:
執行結果如下,它會每秒讀取Ameba在位址40003的register的值。而範例裡我們會將40003填入Ameba的系統時間,所以modpoll會每秒讀到Ameba的系統時間。
程式碼說明
程式碼裡宣告了ModbusTCP的物件:
ModbusTCP m;
在Setup()裡面設定了各個模擬的register的值:
m.setFloat(S1_FloatConstant, PI); m.setU32(S1_CurrentMillis, millis()); m.setU16(S1_FeetPerMile, 5280);
然後將Ameba連上AP,連線所需的參數與Wifi begin()一樣:
m.begin(ssid, pass);
在loop()裡面,檢查是否有Master連線進來並處理Master的命令:
m.run();
處理命令完之後更新register的值:
m.setU32(S1_CurrentMillis, millis());
Copyrights ©瑞晟微电子(苏州)有限公司 2021. All rights reserved. Terms of Use