.net winform 使用NModbus4建立 modbus tcp通讯

1、使用nuget引入NModbus4。

2、编写TCP访问modbus的方法

public void StartTcpClient(string ipstr,string portstr,ushort adress, ushort readLenth)
        {
            try
            {
                IPAddress myIP =IPAddress.Parse(ipstr);
                int port = int.Parse(portstr);
                IsListen = true;

                
                TcpClient myclient = new TcpClient(ipstr, port);
                ModbusMaster myMaster = ModbusIpMaster.CreateIp(myclient);
                myMaster.Transport.ReadTimeout = 2000;
                myMaster.Transport.Retries = 3;
                myMaster.Transport.WaitToRetryMilliseconds = 250;
                ushort[] value = myMaster.ReadHoldingRegisters(1, adress, readLenth);

            }
            catch (Exception ex)
            {
                Log4netHelper.MyErrorMsgLog("StartTcpClient 方法出错:" + ex.Message);
            }
        }

3、更多参数设置

连接参数设置:

master.Transport.ReadTimeout = 1000;//读取连接(串口)数据超时为

master.Transport.WriteTimeout = 1000;//写入连接(串口)数据超时

master.Transport.Retries = 3;//重试次数

master.Transport.WaitToRetryMilliSeconds = 250;//重试间隔

可读写线圈调用函数:

//读线圈,参数:从站地址 (8位 ) 、起始地址 (16位 ) 、数量 (16位 ) ;返回布尔型数 组
bool[] ReadCoils(byte slaveAddress, ushort startAddress, ushort numberOfPoints);

//读输入离散量,参数:从站地址 (8位 ) 、起始地址 (16位 ) 、数量 (16位 ) ;返回布 尔型数组
bool[] ReadInputs(byte slaveAddress, ushort startAddress, ushort numberOfPoints);

//读保持寄存器,参数:从站地址 (8位 ) 、起始地址 (16位 ) 、数量 (16位 ) ;返回 16位整型数组
ushort[] ReadHoldingRegisters(byte slaveAddress, ushort startAddress, ushort numberOfPoints);

//读输入寄存器,参数:从站地址 (8位 ) 、起始地址 (16位 ) 、数量 (16位 ) ;返回 16位整型数组
ushort[] ReadInputRegisters(byte slaveAddress, ushort startAddress, ushort numberOfPoints);

//写单个线圈,参数:从站地址 (8位 ) ,线圈地址 (16位 ) ,线圈值 (布尔型 ) 
void WriteSingleCoil(byte slaveAddress, ushort coilAddress, bool value);

//写单个寄存器,参数:从站地址 (8位 ) ,寄存器地址 (16位 ) ,寄存器值 (16位 )
 void WriteSingleRegister(byte slaveAddress, ushort registerAddress, ushort value);

//写多个寄存器,参数:从站地址 (8位 ) ,起始地址 (16位 ) ,寄存器值 (16位整型 数组 )
void WriteMultipleRegisters(byte slaveAddress, ushort startAddress, ushort[] data);

//写多个线圈,参数:从站地址 (8位 ) ,起始地址 (16位 ) ,线圈值 (布尔型数组 ) 
void WriteMultipleCoils(byte slaveAddress, ushort startAddress, bool[] data);

//读写多个寄存器,参数:从站地址 (8位 ) ,读起始地址 (16位 ) ,数量 (16位 ) ,写 起始地址 (16位 ) ,写入值 (16位整型数组 ) ;返回 16位整型数组
ushort[] ReadWriteMultipleRegisters(byte slaveAddress, ushort startReadAddress, ushort numberOfPointsToRead, ushort startWriteAddress, ushort[] writeData);
 

 

相关推荐

  1. MAC通过终端,使用python3建立本地Web服务

    2024-01-30 08:30:03       30 阅读
  2. 使用websocket建立长链接实现用户点对点即时通讯

    2024-01-30 08:30:03       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-30 08:30:03       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-30 08:30:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-30 08:30:03       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-30 08:30:03       20 阅读

热门阅读

  1. 后端商品分类显示接口实现

    2024-01-30 08:30:03       26 阅读
  2. arch liunx安装android studio

    2024-01-30 08:30:03       34 阅读
  3. uniapp日志写入

    2024-01-30 08:30:03       38 阅读
  4. WebSocket详解

    2024-01-30 08:30:03       29 阅读
  5. 实时搜索建议

    2024-01-30 08:30:03       36 阅读
  6. log4j 日志级别及优先级排序

    2024-01-30 08:30:03       45 阅读