C# modbus TCP协议应用
C# modbus TCP协议应用
协议简介
Modbus由MODICON公司(现施耐德公司)于1979年开发,是一种工业现场总线协议标准。主要分为了RTU,ASCII,TCP三种协议类型。本文我们只探讨C#
modbusTCP的应用。 modbusTcp协议采用master/slave模型。在modbus总线中是以"一主多从"关系存在的。通讯方式是主站发出请求(广播或者单播),从站收到请求后应答。
报文分析
请求 :19 15 00 00 00 06 01 03 05 4A 00 01
应答:19 15 00 00 00 05 01 03 02 11 22请求:19 15 为报文标识符,一般每次通信加1来表示区别不同报文00 00 表示modbusTCP协议00 06 表示后面的数据长度01 从站号03 功能码。05 4A 读取数据的起始地址00 01 读几位地址(读连续的地址)应答:19 15 为报文标识符00 00 表示modbusTCP协议00 05 表示后面的数据长度01 从站号03 功能码02 表示读到的数据长度11 22 表示读到的数据
不同于RTU协议,不需要进行CRC校验
功能码 | 含义 |
---|---|
01 | 读线圈 |
05 | 写单个线圈 |
0F | 写多个线圈 |
02 | 读离散量输入 |
04 | 读输入寄存器 |
03 | 读保持寄存器 |
06 | 写单个保持寄存器 |
10 | 写多个保持寄存器 |
modbusTCP master实现
一般来说上位机作为客户端和主站进行连接
- 包含头文件
using System.Net;
using System.Net.Sockets;
- tcp连接
string ip = "192.168.20.79";
int port = 502;
// 创建socket
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 建立连接
socket.Connect(new IPEndPoint(IPAddress.Parse(ip), port));
- 读保持寄存器寄存器和线圈
//拼接报文
public byte[] getReadCommand(ushort address, byte station, byte funtion, ushort length) //寄存器地址 站号 功能码 寄存器长度{byte[] buffer = new byte[12];buffer[0] = 0x19;buffer[1] = 0x12; //client发出的验证信息buffer[2] = 0x00;buffer[3] = 0x00; //表示tcp/ip的协议的modbus的协议buffer[4] = 0x00;buffer[5] = 0x06; //表示的是该字节以后的字节长度buffer[6] = station; //站号buffer[7] = funtion; //功能码buffer[8] = BitConverter.GetBytes(address)[1];buffer[9] = BitConverter.GetBytes(address)[0]; //寄存器地址buffer[10] = BitConverter.GetBytes(length)[1];buffer[11] = BitConverter.GetBytes(length)[0]; //寄存器的长度return buffer;}
//发送报文
socket.Send(buffer);
//接收数据
byte[] write_done_recvBuffer = new byte[11];
socket.Receive(write_done_recvBuffer, 0, write_done_recvBuffer.Length, SocketFlags.None);
5.写线圈和保持寄存器
public byte[] writeCommand(ushort address, byte station, byte funtion, byte[] values) //寄存器地址 站号 功能码 寄存器长度{byte[] buffer = new byte[10+ values.Length];buffer[0] = 0x19;buffer[1] = 0xB2; //client发出的验证信息buffer[2] = 0x00;buffer[3] = 0x00; //表示tcp/ip的协议的modbus的协议buffer[4] = BitConverter.GetBytes(4 + values.Length)[1];buffer[5] = BitConverter.GetBytes(4 + values.Length)[0]; //表示的是该字节以后的字节长度buffer[6] = station; //站号buffer[7] = funtion; //功能码buffer[8] = BitConverter.GetBytes(address)[1];buffer[9] = BitConverter.GetBytes(address)[0]; //寄存器地址values.CopyTo(buffer, 10);return buffer;}
//接收数据
byte[] write_done_recvBuffer = new byte[20];//
socket.Receive(write_done_recvBuffer, 0, write_done_recvBuffer.Length, SocketFlags.None);
C# modbus TCP协议应用相关推荐
- C#上位机与台达PLC通信,modbus TCP协议
C#上位机与台达PLC通信,modbus TCP协议. 1.真实使用项目,该程序框架完整,适合在此基础上开发项目. 2.使用VS2019开发. 3.项目还涉及到halcon视觉检测功能. YID:76 ...
- 如何使用python读取modbus/TCP协议数据
文章目录 前言 一.modbus_tk是什么? 二.modbus_tk的使用步骤 三.使用modscan测试 四.32位无符号短整型数据转为64位float数据 五.总结 前言 在做项目的时候,需要使 ...
- 力控 串口服务器 虚拟串口,M4系列串口服务器与力控组态软件MODBUS TCP 协议通信--有人物联网.pdf...
M4系列串口服务器与力控组态软件MODBUS TCP 协议通信--有人物联网.pdf M4 系列串口服务器与力控组态软件MODBUS TCP 协议通信 M4系列串口服务器与力控组态软件MODBUS T ...
- Mcgs跟转接小板(用电脑模拟)收发数据(通过Modbus Tcp协议)
1.Mcgs跟转接小板(用电脑模拟)收发数据(通过Modbus Tcp协议),转化为后台需要的数据格式 2.调试工具:Modbus Poll , 3. 所有端口配置为同一个,配置好本地和远程ip地址 ...
- C# Modbus TCP协议客户端设计工程源码带注释,开源 dll文件,支持访问多个服务器,多线程实现,西门子C# Simens PPI Master
西门子C# Simens PPI Master C# Modbus TCP协议客户端设计工程源码带注释,开源 dll文件,支持访问多个服务器,多线程实现 renfengli2010
- Modbus tcp协议学习总结
Modbus=报文头(MBAP)+帧结构(PDU) 注意:据说RTU和TCP的差距就是效验码,具体我也没有操作,所以这里介绍的只有TCP相关内容.看这个章节的时候最好下载Modbus Slave(服务 ...
- Modbus和Modbus/TCP协议
Modbus和Modbus/TCP协议 文章目录 Modbus和Modbus/TCP协议 一. 概述 二. 协议规范 (1) Modbus应用协议 (2)通用Modbus帧结构--协议数据单元(PDU ...
- Modbus TCP协议解析
在之前的文章中,我们介绍了Modbus RTU协议的内容和实现方法.最近在进行网络通讯的时候又用到了Modbus TCP协议,因此这里把自己对Modbus TCP的了解总结一下. 文章目录 一.Mod ...
- DI计数器Modbus TCP协议2路PWM输出WiFi模块
产品特点: ● 3路开关量输入,2路开关量输出 ● DI每一路都可用作计数器或者频率测量 ● DO每一路都可独立输出PWM信号 ● 支持Modbus TCP 通讯协议 ● 内置网页功能,可以通过网页查 ...
最新文章
- gp338信令_对讲机的问题1gp338在按ptt键讲话时,如何加入mdc12 爱问知识人
- 1151 LCA in a Binary Tree (含求LCA的通法)
- Oracle中group by用法
- 中秋节公司发了这个(结尾分享红包)
- 推荐asp.net调试工具:miniASPNETServer
- PostgreSQL12系统视图pg_stats
- Java中的enum详细解析------全面掌握Java的enum类
- Spring源码之ApplicationContext(六)注册BeanPostProcessor
- word域高级应用 if 域 域邮件合并的值的更改 日期的更改
- Chrome最新版本如何通过JS设置支持自动播放音频
- 最大约数(秋季每日一题 34)
- 计算机二级是自学呢还是报班学,计算机二级可以自学好过吗
- Web之一只jio碰到门了
- 【实践与问题解决28】最全超分辨率(SR)数据集介绍以及多方法下载链接
- Proftpd安装与配置
- Skype for Business Web 应用
- 迅雷导出ed2k到eMule链接无效处理
- 微信计算机内存是32位吗?,windows7旗舰版32位和64位的区别是什么
- 字王·百字工程·2016中秋纪念
- liunx下通过Canal将MySQL数据同步到Elasticsearch