C# Modbus 通讯

前言

Modbus通讯是最常用的硬件通讯协调,我PLC接触的不多。Modbus保证了简单又高效的数据传输。

Modbus协议简单介绍

Modbus简单介绍

Modbus Poll和Modbus Slave 软件下载:必须下载

NModbus

一般带N开头的都是.NET平台移植版本。比如NLog,Log4Net。

NModbus Github仓库地址

NModbus使用

一般这种GitHub小项目都是没有详细的github项目介绍,都是以Demo的形式给你的。对于编程能力不强,英语能力不强的同学来说有点困难。

NModbus 官方文档,只是单纯列了一些函数

NModbus Demo

NModbus Simple

简单使用

注意:一定要先把Modbus Poll和Modbus Slave软件用明白。再去调试C# 程序。

这里以Modbus TCP 为例

  static void Main(string[] args)
  {
      Task.Run(ReadModbusTcp) ;
      Console.WriteLine("运行完毕");
      Console.ReadKey();
  }

//简单的Task任务
     public async static Task ReadModbusTcp()
   {
       using (TcpClient client = new TcpClient("127.0.0.1", 502))
       {
           Console.WriteLine("启动Tcp连接");
           var factory = new ModbusFactory();
           IModbusMaster master = factory.CreateMaster(client);
           master.Transport.ReadTimeout = 2000;
           master.Transport.Retries = 10;

           // 从地址0开始,读取10个数据。
           ushort startAddress = 0;
           ushort numInputs = 10;
           while (true)
           {
               var inputs = master.ReadInputRegisters(1, startAddress, numInputs);

               for (int i = 0; i < numInputs; i++)
               {
                   Console.WriteLine($"Input {( startAddress + i )}={( inputs[i] )}");
               }
               await Task.Delay(1000);
           }
           
       }

   }
/// /// 读保持寄存器03 /// /// 数据读取延迟 /// 设备从站地址 /// 数据起始地址 /// 寄存器数量 /// 返回的寄存器数值 /// 返回异常描述 /// 是否读取成功 public bool ReadHoldReg(int timeout, byte slaveAddress, ushort startAddress, ushort regCountIn, out ushort[] holdRegs, out ModbusException ex) /// /// 读输入寄存器04 /// /// 数据读取延迟 /// 设备从站地址 /// 数据地址 /// 寄存器数量 /// 返回的寄存器数值 /// 返回异常描述 /// 是否读取成功 public bool ReadInputReg(int timeout, byte slaveAddress, ushort startAddress, ushort regCountIn, out ushort[] InputRegs, out ModbusException ex) /// /// 写单寄存器(06功能码) /// /// 数据读取延迟 /// 设备从站地址 /// 寄存器地址 /// 寄存器值 /// 返回异常描述 /// 是否写入成功 public bool WriteSingleReg(int timeout, byte slaveAddress, ushort regAdr, ushort regValue, out ModbusException ex) /// /// 写单个线圈(05功能码) /// /// 数据读取延迟 /// 设备从站地址 /// 寄存器地址 /// 寄存器值 /// 返回异常描述 /// 是否写入成功 public bool WriteSingleCoil(int timeout, byte slaveAddress, ushort regAdr, ushort ONorOFF, out ModbusException ex) /// /// 写多寄存器(10功能码) /// /// 数据读取延迟 /// 设备从站地址 /// 寄存器起始地址 /// 寄存器值 /// 返回异常描述 /// 是否写入成功 public bool WriteMutilReg(int timeout, byte slaveAddress, ushort regAdr, ushort[] regValue, out ModbusException ex) ....................
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值