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实现

一般来说上位机作为客户端和主站进行连接

  1. 包含头文件
using System.Net;
using System.Net.Sockets;
  1. 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));
  1. 读保持寄存器寄存器和线圈
//拼接报文
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协议应用相关推荐

  1. C#上位机与台达PLC通信,modbus TCP协议

    C#上位机与台达PLC通信,modbus TCP协议. 1.真实使用项目,该程序框架完整,适合在此基础上开发项目. 2.使用VS2019开发. 3.项目还涉及到halcon视觉检测功能. YID:76 ...

  2. 如何使用python读取modbus/TCP协议数据

    文章目录 前言 一.modbus_tk是什么? 二.modbus_tk的使用步骤 三.使用modscan测试 四.32位无符号短整型数据转为64位float数据 五.总结 前言 在做项目的时候,需要使 ...

  3. 力控 串口服务器 虚拟串口,M4系列串口服务器与力控组态软件MODBUS TCP 协议通信--有人物联网.pdf...

    M4系列串口服务器与力控组态软件MODBUS TCP 协议通信--有人物联网.pdf M4 系列串口服务器与力控组态软件MODBUS TCP 协议通信 M4系列串口服务器与力控组态软件MODBUS T ...

  4. Mcgs跟转接小板(用电脑模拟)收发数据(通过Modbus Tcp协议)

    1.Mcgs跟转接小板(用电脑模拟)收发数据(通过Modbus Tcp协议),转化为后台需要的数据格式 2.调试工具:Modbus Poll  , 3. 所有端口配置为同一个,配置好本地和远程ip地址 ...

  5. C# Modbus TCP协议客户端设计工程源码带注释,开源 dll文件,支持访问多个服务器,多线程实现,西门子C# Simens PPI Master

    西门子C# Simens PPI Master C# Modbus TCP协议客户端设计工程源码带注释,开源 dll文件,支持访问多个服务器,多线程实现 renfengli2010

  6. Modbus tcp协议学习总结

    Modbus=报文头(MBAP)+帧结构(PDU) 注意:据说RTU和TCP的差距就是效验码,具体我也没有操作,所以这里介绍的只有TCP相关内容.看这个章节的时候最好下载Modbus Slave(服务 ...

  7. Modbus和Modbus/TCP协议

    Modbus和Modbus/TCP协议 文章目录 Modbus和Modbus/TCP协议 一. 概述 二. 协议规范 (1) Modbus应用协议 (2)通用Modbus帧结构--协议数据单元(PDU ...

  8. Modbus TCP协议解析

    在之前的文章中,我们介绍了Modbus RTU协议的内容和实现方法.最近在进行网络通讯的时候又用到了Modbus TCP协议,因此这里把自己对Modbus TCP的了解总结一下. 文章目录 一.Mod ...

  9. DI计数器Modbus TCP协议2路PWM输出WiFi模块

    产品特点: ● 3路开关量输入,2路开关量输出 ● DI每一路都可用作计数器或者频率测量 ● DO每一路都可独立输出PWM信号 ● 支持Modbus TCP 通讯协议 ● 内置网页功能,可以通过网页查 ...

最新文章

  1. gp338信令_对讲机的问题1gp338在按ptt键讲话时,如何加入mdc12 爱问知识人
  2. 1151 LCA in a Binary Tree (含求LCA的通法)
  3. Oracle中group by用法
  4. 中秋节公司发了这个(结尾分享红包)
  5. 推荐asp.net调试工具:miniASPNETServer
  6. PostgreSQL12系统视图pg_stats
  7. Java中的enum详细解析------全面掌握Java的enum类
  8. Spring源码之ApplicationContext(六)注册BeanPostProcessor
  9. word域高级应用 if 域 域邮件合并的值的更改 日期的更改
  10. Chrome最新版本如何通过JS设置支持自动播放音频
  11. 最大约数(秋季每日一题 34)
  12. 计算机二级是自学呢还是报班学,计算机二级可以自学好过吗
  13. Web之一只jio碰到门了
  14. 【实践与问题解决28】最全超分辨率(SR)数据集介绍以及多方法下载链接
  15. Proftpd安装与配置
  16. Skype for Business Web 应用
  17. 迅雷导出ed2k到eMule链接无效处理
  18. 微信计算机内存是32位吗?,windows7旗舰版32位和64位的区别是什么
  19. 字王·百字工程·2016中秋纪念
  20. liunx下通过Canal将MySQL数据同步到Elasticsearch

热门文章

  1. ElastIcSearch分词器
  2. android 关闭软键盘,点击软键盘之外关闭软键盘,editText关闭键盘
  3. Android 底部虚拟按键颜色修改
  4. 【情报百科】如何根据车牌追踪汽车信息
  5. Presion,Recall 通俗解释
  6. java中的两同两小一大原则
  7. Kyligence Zen 简直就是一站式指标平台的天花板
  8. 【FICO】同client下不同公司代码之间复制会计科目
  9. TurboMosaic for Mac用六边形瓷砖制作照片马赛克的步骤
  10. npm install没有生成node_modules文件夹