ocrobot:microcontroller:s-100:tutorial01
差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
ocrobot:microcontroller:s-100:tutorial01 [2018/01/31 13:31] – 程磊 | ocrobot:microcontroller:s-100:tutorial01 [2023/06/07 04:23] (当前版本) – 外部编辑 127.0.0.1 | ||
---|---|---|---|
行 1: | 行 1: | ||
+ | ====== 使用S-100作为485 MODBUS RTU Slave设备使用 ====== | ||
+ | |||
+ | 首先我们要把下面的从机代码通过IDE烧录进入S-100(注意需将本文底部库文件正确解压缩至arduino编译环境libraries目录下)。 | ||
+ | |||
+ | <code cpp> | ||
+ | #include " | ||
+ | // | ||
+ | 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]; | ||
+ | void setup() | ||
+ | { | ||
+ | /* 配置(波特率, | ||
+ | */ | ||
+ | modbus_configure(115200, | ||
+ | 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, | ||
+ | pinMode(18, | ||
+ | pinMode(17, | ||
+ | pinMode(16, | ||
+ | pinMode(15, | ||
+ | pinMode(14, | ||
+ | pinMode(13, | ||
+ | pinMode(12, | ||
+ | } | ||
+ | void loop() | ||
+ | { | ||
+ | holdingRegs[TOTAL_ERRORS] = modbus_update(holdingRegs); | ||
+ | / | ||
+ | byte In12 = digitalRead(12); | ||
+ | byte In13 = digitalRead(13); | ||
+ | byte In14 = digitalRead(14); | ||
+ | byte In15 = digitalRead(15); | ||
+ | byte In16 = digitalRead(16); | ||
+ | byte In17 = digitalRead(17); | ||
+ | byte In18 = digitalRead(18); | ||
+ | byte In19 = digitalRead(19); | ||
+ | / | ||
+ | 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, | ||
+ | digitalWrite(3, | ||
+ | digitalWrite(4, | ||
+ | digitalWrite(5, | ||
+ | digitalWrite(6, | ||
+ | digitalWrite(7, | ||
+ | digitalWrite(8, | ||
+ | digitalWrite(9, | ||
+ | delay(1); | ||
+ | }</ | ||
+ | |||
+ | {{: | ||
+ | |||
+ | 上位机部分我们使用Modbus Poll这个软件来展示一下,怎样通过PC来控制S-100。大家也可以使用其他标准的符合MODBUS RTU协议的软件来进行控制。 | ||
+ | |||
+ | 我们打开软件,在Connection菜单中选择Connect,跳出来配置界面。 | ||
+ | |||
+ | 根据你的实际情况,配置端口。比如现在我们工作在COM30端口,Mode记得选择为RTU。 | ||
+ | |||
+ | {{: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | 在Setup菜单栏,我们打开Read/ | ||
+ | |||
+ | 这里我们要注意的是,Slave ID,我们要设置为1,地址起始位是0,总共16个地址。 | ||
+ | |||
+ | {{: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | 配置好以后。。。我们就会看到软件中出来下图的界面。 | ||
+ | |||
+ | {{: | ||
+ | |||
+ | 按照下位机源码,我们把每个地址的接口标注出来,这样后期好用一些。 | ||
+ | |||
+ | {{: | ||
+ | |||
+ | 这时当我们在D12-D19接入高电平时,软件中该地址的状态就会变为1. | ||
+ | |||
+ | 我们点击右键,在D2-D9中把值改为1,S-100对应的继电器就会开启。 | ||
+ | |||
+ | {{http:// | ||
+ | |||
+ | <WRAP left round download 100%> | ||
+ | {{: | ||
+ | \\ {{ : | ||
+ | \\ {{ : | ||
+ | \\ {{ : | ||
+ | </ | ||
ocrobot/microcontroller/s-100/tutorial01.txt · 最后更改: 2023/06/07 04:23 由 127.0.0.1