NModbus类库使用
通过串口进行通信 :
1、将 NMobus 类库导入工程中,添加引用、命名空间。工程属性必须配置 为 .NET 4.0。
2、创建 SerialPort 类的一个实例,配置参数,打开串口,如:
public SerialPort port = new SerialPort(“ COM1” )//创建串口
port.BaudRate = 9600;//配置
port.DataBits = 8;
port.Parity = Parity.None;
port.StopBits = StopBits.One;
port.Open();//打开串口
3、调用相应方法创建 Modbus 主站,如:
IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port); //创建 Rtu 传输模式、通过串口 port 通信的主站 master IModbusSerialMaster master = ModbusSerialMaster.CreateAscii(port); //ASCII传输模式
4、配置参数,如:
master.Transport.ReadTimeout = 1000;//读取串口数据超时为 1000ms master.Transport.WriteTimeout = 1000;//写入串口数据超时
master.Transport.Retries = 3;//重试次数
master.Transport.WaitToRetryMilliSeconds = 250;//重试间隔
5、调用相应方法执行功能,如:
try
{
master.WriteMultipleRegisters(slaveId, startAddress, registers); }
有以下几种功能:
//读线圈,参数:从站地址 (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);
6、使用 catch 语句捕捉异常:
如果执行没有出错,则不抛出异常,如果是执行读操作则能得到相应的 返回值。
响应超时会抛出 TimeoutException 类型的异常 ;
接收到从站的异常响应时会抛出 SlaveException 类型的异常, 这一类异常 包含 SlaveExceptionCode 属性,即异常码,通过判断异常码能得知出错的原因。
NModbus Sample Code
Simple Modbus serial RTU master write holding registers example.
using (SerialPort port = new SerialPort("COM1"))
{
// configure serial port
port.BaudRate = 9600;
port.DataBits = 8;
port.Parity = Parity.None;
port.StopBits = StopBits.One;
port.Open();
// create modbus master
IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port);
byte slaveID = 1;
ushort startAddress = 100;
ushort[] registers = new ushort[] { 1, 2, 3 };
// write three registers
master.WriteMultipleRegisters(slaveID, startAddress, registers);
}
Simple Modbus serial ASCII master read holding registers example.
using (SerialPort port = new SerialPort("COM1"))
{
// configure serial port
port.BaudRate = 9600;
port.DataBits = 8;
port.Parity = Parity.None;
port.StopBits = StopBits.One;
port.Open();
// create modbus master
IModbusSerialMaster master = ModbusSerialMaster.CreateAscii(port);
byte slaveID = 1;
ushort startAddress = 1;
ushort numRegisters = 5;
// read five registers
ushort[] registers = master.ReadHoldingRegisters(slaveID, startAddress, numRegisters);
for (int i = 0; i < numRegisters; i++)
Console.WriteLine("Register {0}={1}", startAddress + i, registers[i]);
}
// output:
// Register 1=0
// Register 2=0
// Register 3=0
// Register 4=0
// Register 5=0
Simple Modbus serial USB RTU master write multiple coils example.
using (FtdUsbPort port = new FtdUsbPort(0))
{
// configure usb port
port.BaudRate = 9600;
port.DataBits = 8;
port.Parity = FtdParity.None;
port.StopBits = FtdStopBits.One;
port.Open();
// create modbus master
IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port);
byte slaveID = 1;
ushort startAddress = 1;
// write three coils
master.WriteMultipleCoils(slaveID, startAddress, new bool[] { true, false, true });
}
Donate
NModbus is developed and
maintained on a voluntary basis
and provided free of charge.
Upcoming Features
WPF NModbus Master
Master Console Wrapper
FTDI USB Slave
Home
Samples
Downloads
Discussion
Issues
NModbus
http://web.archive.org/web/20090601225835/http://www...
第1页
最新文章
- hibernate 的三种状态 如何转化的。
- shell 外部传入jmeter脚本线程数,rampUp时间,持续运行时间
- vs2008中使用Newtonsoft.Json
- 出现 HTTP Error 503. The service is unavailable 错误
- 斐讯K2 V22.X.X.X 新版固件 刷机教程 (开telnet,安装SSH,adbyby,刷breed,华硕Padavan)
- 用C++实现的元胞自动机
- java加减的二进制实现
- 数据结构与算法(c++)——反转链表
- awk练习题-v参数
- OpenStack--glance组件镜像服务
- javascript小实例,编写一个方法,实现从n-m个数中随机选出一个整数
- eclipse中添加server后,启动server,访问项目时,端口是怎么选择的。
- C#轻量级配置文件组件EasyJsonConfig
- IIS Express ArgumentOutOfRangeException
- _CSS Hack
- python常用模块之-random模块
- 13.2SolrCloud集群使用手册之CoreAdmin API
- python logging 日志模块的配置和使用
- 【转】Twitter Storm如何保证消息不丢失
- three.js:Failed to execute &#39;texImage2D&#39; on &#39;WebGLRenderingContext解决方案
热门文章
- 【splunk】用正则表达式提取字段
- python接口自动化测试十:字典、字符串、json之间的简单处理
- VS Code 折腾记 - (6) 基本配置/快捷键定义/代码片段的录入(snippet)
- python3 + selenium 之警告和弹窗
- easyUI拖动:draggable()方法运用
- python 全栈开发,Day95(RESTful API介绍,基于Django实现RESTful API,DRF 序列化)
- Python 检测系统时间,k8s版本,redis集群,etcd,mysql,ceph,kafka
- Docker+Jenkins持续集成环境(1)使用Docker搭建Jenkins+Docker持续集成环境
- 多线程中使用CheckForIllegalCrossThreadCalls = false访问窗口
- Unix/Linux中/usr目录的由来