Modbus协议在应用中一般用来与PLC或者其他硬件设备通讯,Modbus集成到IoTBrowser使用串口插件模式开发,不同的是采用命令函数,具体可以参考前面几篇文章。目前示例实现了Modbus-Rtu和Modbus-Tcp两种,通过js可以与Modbus进行通讯控制。
一、开发插件
-
- 添加引用
- 添加NModbus4,在NuGet搜索NModbus4
- 添加Core,路径:\IoTBrowser\src\app_x64\Core.dll
- 添加Infrastructure,路径:\IoTBrowser\src\app_x64\Infrastructure.dll
- 添加Newtonsoft,路径:\IoTBrowser\src\app_x64\Newtonsoft.Json.dll
- 开发ModbusRtu和ModbusTcp插件
- ModbusRtu
- 添加引用
public class ModbusRtuCom : ComBase
{
public override string Type => "modbusRtuCom";
public override string Name => "ModbusRtuCom";
private object _locker = new object();
public override bool Init(int port, int baudRate = 9600, string extendData = null)
{
this.Port = port;
var portName = "COM" + port;
base.PortName = portName;
ModbusRtuService.Init(portName, baudRate);
Console.WriteLine("初始化ModbusRtuCom驱动程序成功!");
return true;
}
public override event PushData OnPushData;
public override bool Open()
{
var b = false;
try
{
ModbusRtuService.Open();
b = true;
IsOpen = true;
}
catch (Exception ex)
{
string msg = string.Format("ModbusRtuCom串口打开失败:{0} ", ex.Message);
Console.WriteLine(msg);
}
return b;
}
public override bool Close()
{
ModbusRtuService.Close();
IsOpen = false;
OnPushData = null;
return true;
}
public override string Command(string name, string data)
{
var outData = string.Empty;
var dataObj = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(data);
switch (name)
{
case "ReadCoils":
//01
var readData = ModbusRtuService.ReadCoils(byte.Parse(dataObj.slaveAddress.ToString()), ushort.Parse(dataObj.startAddress.ToString()), ushort.Parse(dataObj.numberOfPo