ModBus通讯协议

方法名

作用

所需参数

返回值

对应功能码

ReadCoils

读取DO的状态

从站地址(8位)

byte slaveAddress

起始地址(16位)

ushort startAddress

读取数量(16位)

ushort numberOfPoints

bool[]

01

ReadInputs

读取DI的状态

从站地址(8位)

byte slaveAddress

起始地址(16位)

ushort startAddress

读取数量(16位)

ushort numberOfPoints

bool[]

02

ReadHoldingRegisters

读取AO的值

从站地址(8位)

byte slaveAddress

起始地址(16位)

ushort startAddress

读取数量(16位)

ushort numberOfPoints

ushort[]

03

ReadInputRegisters

读取AI的值

从站地址(8 位)

byte slaveAddress

起始地址(16位)

ushort startAddress

读取数量(16位)

ushort numberOfPoints

ushort[]

04

WriteSingleCoil

写入值到DO

从站地址(8位)

byte slaveAddress

线圈地址(16位)

ushort coilAddress

写入值(布尔型)

bool value

无返回值

05

WriteSingleRegister

写入值到AO

从站地址(8位)

byte slaveAddress

寄存器地址(16位)

ushort registerAddress

写入值(16位)

ushort value

无返回值

06

WriteMultipleCoils

写多线圈寄存器

从站地址(8位)

byte slaveAddress

起始地址(16位)

ushort startAddress

写入值(布尔型数组)

bool[] data

无返回值

15

WriteMultipleRegisters

写多个保持寄存器

从站地址(8位)

byte slaveAddress

起始地址(16位)

ushort startAddress,

寄存器值(16位整型数组)

ushort[] data

无返回值

16

ReadWriteMultipleRegisters

读写多个保持寄存器

从站地址(8位)

byte slaveAddress

读起始地址(16位)

ushort startReadAddress

读取数量(16位)

ushort numberOfPointsToRead,

写入起始地址(16位)

ushort startWriteAddress,

写入值(16位整型数组)

ushort[] writeData

ushort[]

23

Modbus Slave

这个是安装包ModbusSlaveSetup64Bit     注册码:4414147662

modbus通讯协议NET库

    这样的开源库很多,我这边用的库是github的开源实现类库:NModBus4,github地址:https://github.com/NModbus4/NModbus4

我用Modbus Slave模拟一个从机

设置数据

NModbus4的读取从机代码示例

             IPAddress address = new IPAddress(new byte[] { , , ,  });
using (TcpClient client = new TcpClient(address.ToString(), ))
{
client.SendTimeout = ;
//client.op
ModbusIpMaster master = ModbusIpMaster.CreateIp(client);
//master.op
// read five input values
ushort startAddress = ;
ushort numInputs = ;
bool[] inputs = master.ReadCoils(, startAddress, numInputs); for (int i = ; i < numInputs; i++)
{
Console.WriteLine($"Input {(startAddress + i)}={(inputs[i] ? 1 : 0)}");
} }

这边值得注意的是主机Read的方法第一个参数是slaveId  如果不加就startAddress And numInputs   NModbus就会默认 slaveId是0  一直异常( d(╯﹏╰)b 痛苦经历~~)

 

以上数据是 刚才设置的DO 状态

在演示一个读取AI的值

代码没差多少就是方法ReadInputRegisters不一样  . 以下是示例代码

 IPAddress address = new IPAddress(new byte[] { , , ,  });
using (TcpClient client = new TcpClient(address.ToString(), ))
{
client.SendTimeout = ;
//client.op
ModbusIpMaster master = ModbusIpMaster.CreateIp(client);
//master.op
// read five input values
ushort startAddress = ;
ushort numInputs = ;
ushort[] inputs = master.ReadInputRegisters(, startAddress, numInputs); for (int i = ; i < numInputs; i++)
{
Console.WriteLine($"Register {(startAddress + i)}={(inputs[i])}");
} }

C# Modbus 数据读取 使用NModBus4库的更多相关文章

  1. 使用Modbus批量读取寄存器地址

    使用modbus单点读取地址是轮询可能会导致效率很低,频繁发送读取报文会导致plc响应时间拉长,批量读取可大大减少数据通信的过程,每次读取完成后,在内存中异步处理返回来的数据数组. modbus 功能 ...

  2. 【原】Learning Spark (Python版) 学习笔记(二)----键值对、数据读取与保存、共享特性

    本来应该上周更新的,结果碰上五一,懒癌发作,就推迟了 = =.以后还是要按时完成任务.废话不多说,第四章-第六章主要讲了三个内容:键值对.数据读取与保存与Spark的两个共享特性(累加器和广播变量). ...

  3. Spark学习之数据读取与保存总结(一)

    一.动机 我们已经学了很多在 Spark 中对已分发的数据执行的操作.到目前为止,所展示的示例都是从本地集合或者普通文件中进行数据读取和保存的.但有时候,数据量可能大到无法放在一台机器中,这时就需要探 ...

  4. 【转载】PyTorch系列 (二):pytorch数据读取

    原文:https://likewind.top/2019/02/01/Pytorch-dataprocess/ Pytorch系列: PyTorch系列(一) - PyTorch使用总览 PyTorc ...

  5. TensorFlow走过的坑之---数据读取和tf中batch的使用方法

    首先介绍数据读取问题,现在TensorFlow官方推荐的数据读取方法是使用tf.data.Dataset,具体的细节不在这里赘述,看官方文档更清楚,这里主要记录一下官方文档没有提到的坑,以示" ...

  6. flume-ng-sql-source实现oracle增量数据读取

    一.下载编译flume-ng-sql-source 下载地址:https://github.com/keedio/flume-ng-sql-source.git ,安装说明文档编译和拷贝jar包 嫌麻 ...

  7. [Pytorch]PyTorch Dataloader自定义数据读取

    整理一下看到的自定义数据读取的方法,较好的有一下三篇文章, 其实自定义的方法就是把现有数据集的train和test分别用 含有图像路径与label的list返回就好了,所以需要根据数据集随机应变. 所 ...

  8. [转帖]时序数据库技术体系 – InfluxDB TSM存储引擎之数据读取

    时序数据库技术体系 – InfluxDB TSM存储引擎之数据读取 http://hbasefly.com/2018/05/02/timeseries-database-7/  2018年5月2日   ...

  9. Pandas_数据读取与存储数据(全面但不精炼)

    Pandas 读取和存储数据 目录 读取 csv数据 读取 txt数据 存储 csv 和 txt 文件 读取和存储 json数据 读取和存储 excel数据 一道练习题 参考 Numpy基础(全) P ...

随机推荐

  1. 简单mvc---模拟Springmvc

    1.注解篇 Auwowrited package org.aaron.mvc.annaotation; import java.lang.annotation.Documented; import j ...

  2. 为什么内核访问用户数据之前,要做access_ok?

    本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者: 宋宝华 来源: 微信公众号linux阅码场(id: linuxdev) 原理 先看一段小视频,如果内核访问用户 ...

  3. python库包大全(转)

    python 库资源大全 转自: Python 资源大全中文版 环境管理 管理 Python 版本和环境的工具 p:非常简单的交互式 python 版本管理工具.官网 pyenv:简单的 Python ...

  4. 201871010109-胡欢欢《面向对象程序设计(java)》第四周学习总结会

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  5. rn相关文档

    RN相关文档: rn文档:https://reactnative.cn/ mbox文档:https://cn.mobx.js.org/ es6文档:http://es6.ruanyifeng.com/ ...

  6. LA2955 Vivian难题——梅森素数

    题意 输入 $k$(1 \leq k \leq 100)个正整数 $p_1, p_2, ..., p_k$(1 < p_i < 2{31}),找出 $k$ 个非负整数 $e_i$ 使得 $ ...

  7. VScode插件:Todo Tree

    Todo Tree 用于记录很多需要做但是暂时没办法立即做的事情,如修改样式,日期格式处理等 用法: // TODO: 流程图用canvas重构 然后,你在代码中写的TODO,会被识别出来,点击即可查 ...

  8. java读取HDFS压缩文件乱码

    java通过调用HDFS系统的FileSystem等API 直接读取HDFS的压缩文件会产生乱码 解决方法: 1.调用解码的API,解码后通过IO流处理. public static void mai ...

  9. vue响应数据的原理

    vue最大的特点就是数据驱动视图. vue的数据改变,页面一定发生改变?不一定. 当操作引用类型的数据,动态添加属性时,页面不会发生改变. vue响应式数据原理(也叫数据绑定原理.双向数据绑定原理): ...

  10. 关于window PC机的预定义宏win32

    MSDN 里说,VC 有 3 个预处理常量,分别是 _WIN32,_WIN64,WIN32.这三个常量如何使用呢?看起来简单,其实是很困惑的. 在 Win32 配置下,WIN32 在“项目属性-C/C ...