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 = ®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.....)