C#上位机基本通信过程
2023-12-21 19:02:15
TcpClient tcpClient = new TcpClient();
tcpClient.Connect("127.0.0.1", 502);
Modbus.Device.ModbusIpMaster master = Modbus.Device.ModbusIpMaster.CreateIp(tcpClient);
//public ushort[] ReadHoldingRegisters(byte slaveAddress, ushort startAddress, ushort numberOfPoints)
ushort[] values = master.ReadHoldingRegisters(1, 0, 1);//读的湿度
textBox1.Text = values[0].ToString();
如果想要多线程去读记得要加上
Control.CheckForIllegalCrossThreadCalls = false;
原因是:在多线程应用程序中,如果你尝试在非创建控件的线程上访问控件,
就会触发跨线程调用异常。这是因为 Windows 窗体控件是单线程模型的,不能跨线程直接访问。
/*是用来禁用控件跨线程调用的检查。在多线程应用程序中,如果你尝试在非创建控件的线程上访问控件,
就会触发跨线程调用异常。这是因为 Windows 窗体控件是单线程模型的,不能跨线程直接访问。*/
Control.CheckForIllegalCrossThreadCalls = false;
//如果做监控 持续拿寄存器的值
TcpClient tcpClient = new TcpClient();
tcpClient.Connect("127.0.0.1", 502);
Modbus.Device.ModbusIpMaster master = Modbus.Device.ModbusIpMaster.CreateIp(tcpClient);
//public ushort[] ReadHoldingRegisters(byte slaveAddress, ushort startAddress, ushort numberOfPoints)
//启用多线程去处理这个不然其他操作无法进行
Task.Run(async () =>
{
while (true)
{
await Task.Delay(500);//500毫秒执行一次
try
{
ushort[] values = master.ReadHoldingRegisters(1, 0, 1);//读的湿度
textBox1.Text = values[0].ToString();
}
catch (Exception)
{
throw;
}
}
});
写入操作是
//获取到输入的值
ushort value=ushort.Parse(textBox2.Text);
// 将值写入到 Modbus 设备的寄存器中(第一个参数是起始寄存器,第二个是个数,第三个是值)
master.WriteSingleRegister(1, 1, value);
文章来源:https://blog.csdn.net/Chen_sir2580/article/details/135130588
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!