Arduino與S7-200 PLC 進行Modbus通信測試


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 = &regBank;
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.....)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM