ocrobot:microcontroller:s-100:tutorial06
使用S-100作为485 MODBUS RTU Slave设备使用
首先我们要把下面的从机代码通过IDE烧录进入S-100。
#include "SimpleModbusSlave.h" //分配寄存器地址 enum { // 地址从0开始 IN12, //0 IN13, //1 IN14, //.. IN15, IN16, IN17, IN18, IN19, OUT2, OUT3, OUT4, OUT5, OUT6, OUT7, OUT8, OUT9, TOTAL_ERRORS, TOTAL_REGS_SIZE }; unsigned int holdingRegs[TOTAL_REGS_SIZE]; // 3和16功能码的寄存器数组 void setup() { /* 配置(波特率,ID,使能脚,寄存器大小) */ modbus_configure(115200, 1, 1, TOTAL_REGS_SIZE, 0); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(19, INPUT); pinMode(18, INPUT); pinMode(17, INPUT); pinMode(16, INPUT); pinMode(15, INPUT); pinMode(14, INPUT); pinMode(13, INPUT); pinMode(12, INPUT); } void loop() { holdingRegs[TOTAL_ERRORS] = modbus_update(holdingRegs); /*读取输入IO口*/ byte In12 = digitalRead(12); // read button states byte In13 = digitalRead(13); // read button states byte In14 = digitalRead(14); // read button states byte In15 = digitalRead(15); // read button states byte In16 = digitalRead(16); // read button states byte In17 = digitalRead(17); // read button states byte In18 = digitalRead(18); // read button states byte In19 = digitalRead(19); // read button states /*将数据写入寄存器*/ holdingRegs[IN12] = In12; holdingRegs[IN13] = In13; holdingRegs[IN14] = In14; holdingRegs[IN15] = In15; holdingRegs[IN16] = In16; holdingRegs[IN17] = In17; holdingRegs[IN18] = In18; holdingRegs[IN19] = In19; // 读取输出寄存器状态 byte Out2 = holdingRegs[OUT2]; byte Out3 = holdingRegs[OUT3]; byte Out4 = holdingRegs[OUT4]; byte Out5 = holdingRegs[OUT5]; byte Out6 = holdingRegs[OUT6]; byte Out7 = holdingRegs[OUT7]; byte Out8 = holdingRegs[OUT8]; byte Out9 = holdingRegs[OUT9]; //将输出寄存器的配置输出到端口 digitalWrite(2, Out2); digitalWrite(3, Out3); digitalWrite(4, Out4); digitalWrite(5, Out5); digitalWrite(6, Out6); digitalWrite(7, Out7); digitalWrite(8, Out8); digitalWrite(9, Out9); delay(1); }
上位机部分我们使用Modbus Poll这个软件来展示一下,怎样通过PC来控制S-100。大家也可以使用其他标准的符合MODBUS RTU协议的软件来进行控制。
我们打开软件,在Connection菜单中选择Connect,跳出来配置界面。
根据你的实际情况,配置端口。比如现在我们工作在COM30端口,Mode记得选择为RTU。
在Setup菜单栏,我们打开Read/Write Definition配置。
这里我们要注意的是,Slave ID,我们要设置为1,地址起始位是0,总共16个地址。
配置好以后。。。我们就会看到软件中出来下图的界面。
按照下位机源码,我们把每个地址的接口标注出来,这样后期好用一些。
这时当我们在D12-D19接入高电平时,软件中该地址的状态就会变为1.
我们点击右键,在D2-D9中把值改为1,S-100对应的继电器就会开启。
ocrobot/microcontroller/s-100/tutorial06.txt · 最后更改: 2023/06/07 04:23 由 127.0.0.1