Modbus是一種串行通信協議,Modbus已經成為工業領域通信協議的業界標准,並且現在是工業電子設備之間常用的連接方式。例如PLC、變頻器、流量計、溫濕度、上位機組態軟件、各種傳感器儀表等。
智慧工廠是現代工廠信息化發展的新階段。是在數字化工廠的基礎上,利用物聯網的技術和設備監控技術加強信息管理和服務;清楚掌握產銷流程、提高生產過程的可控性、減少生產線上人工的干預、即時正確地采集生產線數據,以及合理的生產計划編排與生產進度。智能網關未來將會被大量使用在生產企業的各個設備之間,通過智慧網關將設備的實時數據上傳至雲端,利用大數據管理系統幫助企業完成數字化轉型。
接線圖:
Modbus RTU 主從/地址設置:
Arduino UNO: 從站 地址為 1
S7-200 224XP: 主站
Arduino程序:
arduino庫文件下載地址: https://gitee.com/hejinlv/modbus-slave-lib.git
1 #include <modbus.h> 2 #include <modbusDevice.h> 3 #include <modbusRegBank.h> 4 #include <modbusSlave.h> 5 6 #include <SimpleTimer.h> 7 8 volatile int item; 9 SimpleTimer timer; 10 11 modbusDevice regBank; 12 modbusSlave slave; //modbus從站 13 14 #define RS485TxEnablePin 2 //RS485使能引腳 15 #define RS485Baud 9600 //波特率9600 16 #define RS485Format SERIAL_8E1 //8位 偶校驗 17 18 #define LED1 13 19 #define LED2 12 20 21 void setup() 22 { 23 24 //初始化串口 25 slave.setBaud(&Serial, RS485Baud, RS485Format, RS485TxEnablePin); 26 //分配Modbus設備ID。 27 regBank.setId(1); 28 29 /*。 30 Modbus寄存器遵循以下格式。 31 00001-09999數字輸出,主設備可以讀寫這些寄存器。 32 10001-19999數字輸入,主設備只能從這些寄存器讀取值。 33 30001-39999模擬輸入,主設備只能從這些寄存器讀取值。 34 40001-49999模擬輸出,主設備可以讀取和寫入這些寄存器。 35 36 模擬值是存儲范圍為0-32767的16位無符號字。 37 數字值以字節存儲,零值為OFF,任何非零值為ON。 38 39 */ 40 //將模擬輸入寄存器添加到寄存器組 41 regBank.add(30001); 42 regBank.add(30002); 43 44 //將模擬輸出寄存器添加到寄存器組 45 regBank.add(40001); 46 regBank.add(40002); 47 48 slave._device = ®Bank; 49 //設置引腳模式 50 pinMode(LED1, OUTPUT); 51 pinMode(LED2, OUTPUT); 52 //設置定時器 每秒執行一次 53 timer.setInterval(1000L, Simple_timer_1); 54 } 55 56 void loop() 57 { 58 //讀取40001寄存的值 59 digitalWrite(LED1, regBank.get(40001)); 60 digitalWrite(LED2, regBank.get(40002)); 61 62 //向30001寄存器寫入數據 63 regBank.set(30001, (word) (99 - item)); //from 99 - 0 64 regBank.set(30002, (word) item); //from 0 - 99 65 66 //Modbus從站程序運行 67 slave.run(); 68 69 //簡單定時器運行 70 timer.run(); 71 } 72 73 //定時器執行函數 74 void Simple_timer_1() { 75 item = item + 1; 76 if (item == 99) { 77 item = 0; 78 } 79 80 }
S7-200 PLC 程序:(主站輪詢讀寫)
測試結果如下:
數據通訊正常
(未完......持續更新)
(下一步將測試 SIMATIC S7-1200 -- Arduino、ESP32、STM32.....)