Modbus从站(Slave)
定义
命名空间:TouchSocketPro.Modbus
程序集:TouchSocketPro.Modbus.dll
一、说明
Modbus是主从通讯的。所以我们开发了Modbus服务器组件,方便大家使用。
二、特点
- 简单易用。
- 内存池支持
- 高性能
- 易扩展。
- 支持全数据类型的读写。
三、产品应用场景
- 所有Modbus使用场景:可跨平台使用。
四、可配置项
无单独配置项。
五、支持插件
插件方法 | 功能 |
---|---|
IModbusSlaveExecutingPlugin | 当有主站请求读写该从站时触发。如果想要拒绝请求,可以通过e.IsPermitOperation = false执行。并且e.ErrorCode可以携带返回错误码。 |
IModbusSlaveExecutedPlugin | 当有主站完成请求读写该从站时触发 |
六、创建
目前TouchSokcet.Modbus从站支持Tcp
、Udp
、Rtu
、RtuOverTcp
、RtuOverUdp
等协议。下面会一一介绍创建过程。
6.1 创建ModbusTcpSlave
static ModbusTcpSlave CreateModbusTcpSlave()
{
var service = new ModbusTcpSlave();
service.Setup(new TouchSocketConfig()
//监听端口
.SetListenIPHosts(7808)
.ConfigurePlugins(a =>
{
a.AddModbusSlavePoint()//添加一个从站站点
.SetSlaveId(1)//设置站点号
.UseIgnoreSlaveId()//忽略站号验证
.SetModbusDataLocater(new ModbusDataLocater(10,10,10,10));//设置数据区
})
);
service.Start();
Console.WriteLine("服务已启动");
return service;
}
6.2 创建ModbusUdpSlave
static ModbusUdpSlave CreateModbusUdpSlave()
{
var service = new ModbusUdpSlave();
service.Setup(new TouchSocketConfig()
//监听端口
.SetBindIPHost(7809)
.ConfigurePlugins(a =>
{
a.AddModbusSlavePoint()//添加一个从站站点
.SetSlaveId(1)//设置站点号
.UseIgnoreSlaveId()//忽略站号验证
.SetModbusDataLocater(new ModbusDataLocater(10, 10, 10, 10));//设置数据区
})
);
service.Start();
Console.WriteLine("服务已启动");
return service;
}
6.3 创建ModbusRtuSlave
static ModbusRtuSlave CreateModbusRtuSlave()
{
var service = new ModbusRtuSlave();
service.Setup(new TouchSocketConfig()
//设置串口
.SetSerialPortOption(new SerialPortOption()
{
BaudRate = 9600,
DataBits = 8,
Parity = System.IO.Ports.Parity.Even,
PortName = "COM1",
StopBits = System.IO.Ports.StopBits.One
})
.ConfigurePlugins(a =>
{
a.AddModbusSlavePoint()//添加一个从站站点
.SetSlaveId(1)//设置站点号
//.UseIgnoreSlaveId()//如果不调用,默认会进行站号验证
.SetModbusDataLocater(new ModbusDataLocater(10, 10, 10, 10));//设置数据区
})
);
service.Connect();
Console.WriteLine("已连接COM端口");
return service;
}
6.4 创建ModbusRtuOverTcpSlave
static ModbusRtuOverTcpSlave CreateModbusRtuOverTcpSlave()
{
var service = new ModbusRtuOverTcpSlave();
service.Setup(new TouchSocketConfig()
//监听端口
.SetListenIPHosts(7810)
.ConfigurePlugins(a =>
{
a.AddModbusSlavePoint()//添加一个从站站点
.SetSlaveId(1)//设置站点号
.UseIgnoreSlaveId()//忽略站号验证
.SetModbusDataLocater(new ModbusDataLocater(10, 10, 10, 10));//设置数据区
})
);
service.Start();
Console.WriteLine("服务已启动");
return service;
}
6.5 创建ModbusRtuOverUdpSlave
static ModbusRtuOverUdpSlave CreateModbusRtuOverUdpSlave()
{
var service = new ModbusRtuOverUdpSlave();
service.Setup(new TouchSocketConfig()
//监听端口
.SetBindIPHost(7811)
.ConfigurePlugins(a =>
{
a.AddModbusSlavePoint()//添加一个从站站点
.SetSlaveId(1)//设置站点号
.UseIgnoreSlaveId()//忽略站号验证
.SetModbusDataLocater(new ModbusDataLocater(10, 10, 10, 10));//设置数据区
})
);
service.Start();
Console.WriteLine("服务已启动");
return service;
}
七、添加多个站点
Modbus
是一主多从的架构。在实际使用时,一个ModbusSlave
部署至一个机器(这里不考虑虚拟机),即视为一个从机。但事实上,按照Modbus
协议,一个ModbusSlave
可以有多个站点。以ModbusTcpSlave
为例,他可以通过IP地址