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. selenium中三大窗口切换

    我们在做UI自动化时,不得不会遇到一些窗口跳转与弹框,在这种的时候如果不进行切换的话,继续执行脚本必然会报错,所以我们就需要用到切换窗口的方法. selenium中主要是三种窗口 Windows窗口 ...

  2. java.sql.SQLException: Access denied for user 'root'@'10.1.0.2' (using password: YES)

    java.sql.SQLException: Access denied for user 'root'@'10.1.0.2' (using password: YES) at com.mysql.c ...

  3. Vue中美元$符号的意思与vue2.0中的$router 和 $route的区别

    vue的实例属性和方法 除了数据属性,Vue 实例还暴露了一些有用的实例属性与方法.它们都有前缀 $,以便与用户定义的属性区分开来.例如: var data = { a: 1 } var vm = n ...

  4. xampp1.8.3 配置 php5.x 访问 SQL Server 2008

    1.安装xampp 2.下载php sqlsrv扩展 Microsoft Drivers 3.2 for PHP for SQL Server 官方下载地址: http://www.microsoft ...

  5. LeetCode 1216. Valid Palindrome III

    原题链接在这里:https://leetcode.com/problems/valid-palindrome-iii/ 题目: Given a string s and an integer k, f ...

  6. flask框架搭建项目的具体步骤

    flask是一个使用python编写的轻量级Web应用框架.与django不同,Django创建工程时,会直接构架好工程目录.而flask工程几乎是自己创建结构. 1.导入相关模块以及需要使用的模块: ...

  7. 设置 npm 源为淘宝镜像

    淘宝 npm 网址 https://npm.taobao.org/ 修改 npm config set registry http://registry.npm.taobao.org/ 还原 npm ...

  8. 记忆的轮廓 期望 四边形不等式dp|题解

    记忆的轮廓 题目描述 通往贤者之塔的路上,有许多的危机.我们可以把这个地形看做是一颗树,根节点编号为1,目标节点编号为n,其中1-n的简单路径上,编号依次递增,在[1,n]中,一共有n个节点.我们把编 ...

  9. Android 10 终于来了!增加了不少新特性

    前言 Android 10 正式发布了,根据官网的介绍,聚焦于隐私可控.手机自定义与使用效率,此版本主要带来了十大新特性:   image 智能回复 使用机器学习来预测你在回复信息时可能会说些什么,这 ...

  10. CentOS7 CPU 降频问题

    CentOS7 系统默认的 CPUPOWER 策略是 powersave 节能模式,Google 了非常多的资料,一直没有找到解决办法,现在分享一下. 执行: tuned-adm profile th ...