用户工具

站点工具


ocrobot:microcontroller:s-100:tutorial01

使用S-100作为485 MODBUS RTU Slave设备使用

首先我们要把下面的从机代码通过IDE烧录进入S-100(注意需将本文底部库文件正确解压缩至arduino编译环境libraries目录下)。

#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,使能脚(本设备自动使能请勿修改),超时时间【根据实际情况取值0-3000】单位毫秒)
	*/
	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/tutorial01.txt · 最后更改: 2023/06/07 04:23 由 127.0.0.1