首页 > 其他分享 >modubs的TCP数据协议

modubs的TCP数据协议

时间:2023-09-13 18:01:18浏览次数:34  
标签:协议 00 字节 buffer TCP modubs new byte SendCommand

参考:C#实现MODBUS TCP 通信 第二章 (程序内实现) - 『编程语言区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

只要了解这个modubs的数据格式

常用的命令

功能码(16进制)    功能说明
0x01                          读取输出线圈              1
0x02                          读取输入线圈              2
0x03                          读取保持寄存器           3
0x04                          读取输入寄存器           4
0x05                          写入单个线圈              5
0x06                          写入单个寄存器            6
0x0F                          写入多个线圈               16
0x10                          写入多个寄存器            10

modubs数据协议格式

1. ModbusRtu的报文格式如下(PDU):
第一部分:从站地址,占1个字节
第二部分:功能码,占1个字节
第三部分:数据部分,占N个字节
第四部分:校验部分,CRC校验,占2个字节

2. ModbusAscii的报文格式如下:
第一部分:开始字符(:)
第二部分:从站地址,占2个字节
第三部分:功能码,占2个字节
第四部分:数据部分,占N个字节
第五部分:校验部分,LRC校验,占2个字节
第六部分:结束字符(CR LF)

3. ModbusTcp的报文格式如下:
第一部分:事务处理标识符,占2个字节
第二部分:协议标识符,占2个字节
第三部分:长度,占2个字节
第四部分:单元标识符,占1个字节
第五部分:功能码,占1个字节
第六部分:数据部分,占N个字节

修改modbus数据的格式(tcp)

请求内容:00 0B 00 00 00 06 06 01 00 02 00 08
事务处理标识(2字节):00 0B
协议标识符(2字节):00 00
长度(2字节):00 06
单元标识符(1字节):01
功能码(1字节):06
数据地址(2字节):00 02 
数据内容(2字节):00 08
响应内容:00 0B 00 00 00 06 06 01 00 02 00 08
事务处理标识(2字节):00 0B
协议标识符(2字节):00 00
长度(2字节):00 06
单元标识符(1字节):01
功能码(1字节):06
数据地址(2字节):00 02
数据内容(2字节):00 08

 代码实现

 //拼接
 List<byte> SendCommand = new List<byte>();
 //事物处理标识符
 SendCommand.AddRange(new byte[] { 0x00, 0x0B });
 //协议标识符
 SendCommand.AddRange(new byte[] { 0x00, 0x00 });
 //长度
 SendCommand.AddRange(new byte[] { 0x00, 0x06 });
 //单元标识符
 SendCommand.Add(0x01);
 ////功能码
 //SendCommand.Add(0x03);
 //功能码
 SendCommand.Add(0x06);


 ////起始地址
 //SendCommand.Add((byte)(start / 256));
 //SendCommand.Add((byte)(start % 256));
 ////结束地址-长度
 //SendCommand.Add((byte)(length / 256));
 //SendCommand.Add((byte)(length % 256));

 ////起始地址
 //SendCommand.AddRange(new byte[] { 0x00, 0x00 });
 ////结束地址-长度
 //SendCommand.AddRange(new byte[] { 0x00, 0x0A });

 //起始地址
 SendCommand.AddRange(new byte[] { 0x00, 0x01 });
 //具体数据
 SendCommand.AddRange(new byte[] { 0x00, 0x12 });


 var sendData = Encoding.Default.GetString(SendCommand.ToArray());
 Task.Factory.StartNew(new Action(() =>
 {
     Thread.Sleep(1000);
     _client.SendData(sendData);
 }));

返回的结果处理

 private void HandelByte(byte[] buffer)
 {
     int count = buffer.Count();
     if (buffer[7] == 0x03)//读取多个
     {
         int length = buffer[8] / 2;
         if (count == 9 + 2 * length)
         {
             ShowData(buffer, length);
         }
     }
     else if (buffer[7] == 0x06)//写入单个寄存器
     {
         //解析
         ushort[] data = new ushort[1];
         data[0] = BitConverter.ToUInt16(new byte[] { buffer[11], buffer[10] }, 0);
         Console.WriteLine(data);
     }
 }

 /// <summary>
 /// 
 /// </summary>
 /// <param name="buffer"></param>
 /// <param name="length"></param>
 /// <param name="j"></param>
 private void ShowData(byte[] buffer, int length)
 {
     //解析
     ushort[] data = new ushort[length];
     for (int i = 0; i < data.Length; i++)
     {
         data[i] = BitConverter.ToUInt16(new byte[] { buffer[9 + 2 * i + 1], buffer[9 + 2 * i] }, 0);
     }
     Console.WriteLine(data);
 }

效果图(这样就修改好了一个地址数据)

 

标签:协议,00,字节,buffer,TCP,modubs,new,byte,SendCommand
From: https://www.cnblogs.com/shuaimeng/p/17700360.html

相关文章

  • 一篇文章让你弄懂分布式一致性协议Paxos
    一、Paxos协议简介Paxos算法由LeslieLamport在1990年提出,它是少数在工程实践中被证实的强一致性、高可用、去中心的分布式协议。Paxos协议用于在多个副本之间在有限时间内对某个决议达成共识。Paxos协议运行在允许消息重复、丢失、延迟或乱序,但没有拜占庭式错误的网络环境中,它利......
  • Java网路编程____TCP协议客户端服务器信息交互例子
    packagecom.frame.base.TCP;importjava.io.InputStream;importjava.net.ServerSocket;importjava.net.Socket;publicclassTCPSocketServer{ publicstaticvoidmain(String[]args)throwsException{ /** *启动服务端Soecket注册外放信息交互的端口 */......
  • Java网路编程____UDP协议Socket客户端服务器聊天室列子
    1.UPD服务端定义数据Socket和注册外放的端口一直做true循环读取数据包Packet里的数据datagramPacket.getData()转换为String字符串读取 packagecom.frame.base.UDP;importjava.net.DatagramPacket;importjava.net.DatagramSocket;/***@authorAdministrator*UDP_So......
  • java spring,springmvc,spring boot,spring data,RESTful api设计风格,HTTP协议的四种传
    一.基本技术1.Springmvc=手动接电线(配置xml),提供了一种友好的方式来开发Web应用程序。通过使用诸如DispatcherServlet,ModelAndView和ViewResolver,可以轻松开发Web应用程序。2.SpringBoot=标准插座(第3方开源类库想接入,就按照标准做一个starter的适配),实现了免xml配置和提......
  • 聊聊数据库事务内嵌TCP连接
    最近再看项目代码,发现很多的service里面,喜欢在事务内部再去调用HTTP请求,简单分析下此种方式的利弊与解决策略。概述在数据库内部嵌套TCP连接(一般是HTTP调用或是RPC远程调用)。@Transactional(rollbackFor=Exception.class)publicBooleaninviteUser(..){//service......
  • 教你2种方法,将iOS设备通过MQTT协议连接到华为云物联网平台
    本文分享自华为云社区《如何将iOS设备通过MQTT协议连接到华为云物联网平台:Flutter和Swift两种方法》,作者:张俭。前言当今时代,物联网技术正逐步改变我们的生活和工作方式。华为云IoTDA服务,为开发者提供了一个开放、稳定、可靠的基础设施,以便实现设备与云端的无缝连接和双向通......
  • ARP协议:地址解析协议
    ARP协议最早在1982年提出,并在RFC826中进行规范。其全称为AddressResolutionProtocol,即地址解析协议。在以太网中,一台主机要向另一台主机发送数据,必须知道目标主机的MAC地址。但在IP通信中,只知道目标主机的IP地址是不够的,还需要通过ARP协议将IP地址解析为对应的MAC地址。每台安装......
  • 探究TCP/IP协议栈
    TCP/IP协议栈,这是一个似乎既熟悉又陌生的名词。在我们的日常生活中,无论我们是在使用智能手机浏览网页,还是在电脑上发送电子邮件,甚至是在进行视频聊天,我们都在无形中与TCP/IP协议栈打交道。那么,TCP/IP协议栈究竟是什么呢?今天,就让我们一起来揭开它的神秘面纱。一、什么是TCP/IP协议栈......
  • 什么是IP协议?
    简介:IP(InternetProtocol)协议,又称网际协议,是TCP/IP协议的核心。它负责Internet上网络之间的通信,并规定了将数据报从一个网络传输到另一个网络所应遵循的规则。具体来说,IP协议不但定义了数据传输时的基本单元和格式,还定义了数据报的递交方法和路由选择。此外,在TCP/IP网络中,主机之......
  • 24UDP协议/操作系统发展
    作业#作业内容:实现上传和下载电影写了一个,另外一个反过来就可以(代码参考day24代码)#思考1.上传的电影如何判断是否重复小白思想:校验电影名称是否存在正确思想:校验电影的md5值(核心是内容不是名称)2.上传的电影如何判断是否有毒提前对电影内容加......