C# Modbus 数据读取 使用NModBus4库
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库的更多相关文章
- 使用Modbus批量读取寄存器地址
		使用modbus单点读取地址是轮询可能会导致效率很低,频繁发送读取报文会导致plc响应时间拉长,批量读取可大大减少数据通信的过程,每次读取完成后,在内存中异步处理返回来的数据数组. modbus 功能 ... 
- 【原】Learning Spark (Python版) 学习笔记(二)----键值对、数据读取与保存、共享特性
		本来应该上周更新的,结果碰上五一,懒癌发作,就推迟了 = =.以后还是要按时完成任务.废话不多说,第四章-第六章主要讲了三个内容:键值对.数据读取与保存与Spark的两个共享特性(累加器和广播变量). ... 
- Spark学习之数据读取与保存总结(一)
		一.动机 我们已经学了很多在 Spark 中对已分发的数据执行的操作.到目前为止,所展示的示例都是从本地集合或者普通文件中进行数据读取和保存的.但有时候,数据量可能大到无法放在一台机器中,这时就需要探 ... 
- 【转载】PyTorch系列 (二):pytorch数据读取
		原文:https://likewind.top/2019/02/01/Pytorch-dataprocess/ Pytorch系列: PyTorch系列(一) - PyTorch使用总览 PyTorc ... 
- TensorFlow走过的坑之---数据读取和tf中batch的使用方法
		首先介绍数据读取问题,现在TensorFlow官方推荐的数据读取方法是使用tf.data.Dataset,具体的细节不在这里赘述,看官方文档更清楚,这里主要记录一下官方文档没有提到的坑,以示" ... 
- flume-ng-sql-source实现oracle增量数据读取
		一.下载编译flume-ng-sql-source 下载地址:https://github.com/keedio/flume-ng-sql-source.git ,安装说明文档编译和拷贝jar包 嫌麻 ... 
- [Pytorch]PyTorch Dataloader自定义数据读取
		整理一下看到的自定义数据读取的方法,较好的有一下三篇文章, 其实自定义的方法就是把现有数据集的train和test分别用 含有图像路径与label的list返回就好了,所以需要根据数据集随机应变. 所 ... 
- [转帖]时序数据库技术体系 – InfluxDB TSM存储引擎之数据读取
		时序数据库技术体系 – InfluxDB TSM存储引擎之数据读取 http://hbasefly.com/2018/05/02/timeseries-database-7/ 2018年5月2日 ... 
- Pandas_数据读取与存储数据(全面但不精炼)
		Pandas 读取和存储数据 目录 读取 csv数据 读取 txt数据 存储 csv 和 txt 文件 读取和存储 json数据 读取和存储 excel数据 一道练习题 参考 Numpy基础(全) P ... 
随机推荐
- SpringBoot 整合websocket
			1.MyWebSocket package org.hxm.webSocket; import java.io.IOException; import java.util.concurrent.Cop ... 
- 堆叠降噪自编码器SDAE
			https://blog.csdn.net/satlihui/article/details/81006906 https://blog.csdn.net/github_39611196/articl ... 
- PHP实例:获取操作系统、IP、地理位置、浏览器、等信息
			获取访客操作系统以及浏览器语言 <?php function GetBrowser(){ if(!empty($_SERVER['HTTP_USER_AGENT'])){ $br = $_SER ... 
- python基础语法16   面向对象3 组合,封装,访问限制机制,内置装饰器property
			组合: 夺命三问: 1.什么是组合? 组合指的是一个对象中,包含另一个或多个对象. 2.为什么要用组合? 减少代码的冗余. 3.如何使用组合? 耦合度: 耦: 莲藕 ---> 藕断丝连 - 耦合 ... 
- VIJOS-P1446 最短路上的统计
			JDOJ 1523: VIJOS-P1446 最短路上的统计 JDOJ传送门 Description 一个无向图上,没有自环,所有边的权值均为1,对于一个点对(a,b),我们要把所有a与b之间所有最短 ... 
- A9G开发
			巨坑 不支持联通 发短信 上电,准备好后使用 结束标志 取消换行 以16进制发 0x1a 实际测试 中间可以有很多行内容 短信内容结束换行 最后必须以 16进制 发送 0x1a 带和不带换行都可 ... 
- Python 的AES加密与解密
			AES加密方式有五种:ECB, CBC, CTR, CFB, OFB 从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现 python 在 Windows下使用AE ... 
- (转)Qt中文手册 之 QApplication
			QApplication管理GUI程序的控制流和主要设置. QApplication包含由窗口系统和其他来源处理过和发送过的主事件循环.它也处理应用程序的初始化和收尾工作,并提供对话管理.QAppli ... 
- 【题解】CF161B Discounts
			目录 题目 思路 \(Code\) 题目 CF161B Discounts 思路 贪心.很显然对于一个板凳(价格为c)所能使我们最多少花费\(\frac{c}{2}\)的金钱. 原因如下: 如果你将一 ... 
- 以V8中js源码为例了解GitHub查看代码功能
			GitHub作为开源仓库,许多开源项目仓库这里,当然不乏十分优秀的,比如Node.V8,我一直比较好奇js源码,像java的话,因为环境是JDK,我们结合IDE很容易就能跳转到其源码内部去查看实现,但 ... 
