C#上位机基本通信过程


csharp 复制代码
 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 窗体控件是单线程模型的,不能跨线程直接访问。

csharp 复制代码
 /*是用来禁用控件跨线程调用的检查。在多线程应用程序中,如果你尝试在非创建控件的线程上访问控件,
 就会触发跨线程调用异常。这是因为 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;
         }

     }

 });

写入操作是

csharp 复制代码
  //获取到输入的值
  ushort value=ushort.Parse(textBox2.Text);
  // 将值写入到 Modbus 设备的寄存器中(第一个参数是起始寄存器,第二个是个数,第三个是值)
  master.WriteSingleRegister(1, 1, value);
相关推荐
码界奇点16 分钟前
Python Flask文件处理与异常处理实战指南
开发语言·python·自然语言处理·flask·python3.11
贩卖纯净水.26 分钟前
浏览器兼容-polyfill-本地服务-优化
开发语言·前端·javascript
k要开心32 分钟前
C++概念以及基础框架语法
开发语言·c++
开发者工具分享1 小时前
如何应对敏捷转型中的团队阻力
开发语言
gregmankiw1 小时前
C#调用Rust动态链接库DLL的案例
开发语言·rust·c#
roman_日积跬步-终至千里2 小时前
【Go语言基础【20】】Go的包与工程
开发语言·后端·golang
秦少游在淮海2 小时前
C++ - string 的使用 #auto #范围for #访问及遍历操作 #容量操作 #修改操作 #其他操作 #非成员函数
开发语言·c++·stl·string·范围for·auto·string 的使用
const5442 小时前
cpp自学 day2(—>运算符)
开发语言·c++
心扬2 小时前
python生成器
开发语言·python
阿蒙Amon2 小时前
06. C#入门系列【自定义类型】:从青铜到王者的进阶之路
开发语言·c#