通信数据报文解析1
modbus tcp通信报文解析
modbus tcp通信报文解析English answer:Modbus TCP is a widely used industrial protocol for communication between devices. It is based on the Modbus protocol, which was originally developed for serial communication, but has been adapted for use over TCP networks.Modbus TCP messages are encapsulated in TCP packets, and consist of a header and a payload. The header contains information about the message length, the transaction identifier, the protocol identifier, and the unit identifier. The payload contains the actual Modbus function code and data.The Modbus function code is a one-byte value that specifies the type of operation to be performed. There are many different function codes available, each with its own specific purpose. The most common function codes are:Read Coils (01): Reads the status of a range of coils.Read Discrete Inputs (02): Reads the status of a range of discrete inputs.Read Holding Registers (03): Reads the value of a range of holding registers.Read Input Registers (04): Reads the value of a range of input registers.Write Single Coil (05): Writes the status of a single coil.Write Single Register (06): Writes the value of a single holding register.Write Multiple Coils (15): Writes the status of a range of coils.Write Multiple Registers (16): Writes the value of arange of holding registers.The data in the payload varies depending on thefunction code. For example, the Read Coils function code requires the starting address and the number of coils to be read. The Write Single Register function code requires the address of the register to be written and the value to be written.Modbus TCP messages are typically sent and received using a client-server model. The client device initiates a connection to the server device and sends a Modbus TCP message. The server device processes the message and sends a response back to the client device.Modbus TCP is a versatile protocol that can be used for a wide variety of industrial applications. It is a reliable and efficient protocol that is easy to implement and use.中文回答:Modbus TCP是一种广泛用于设备间通信的工业协议。
101规约报文解析
101规约报文解析-CAL-FENGHAI.-(YICAI)-Company One1101规约(2002版)报文解析速查1、初始化主站发: 10 49 4F 98 16目的:给地址为4F的子站发请求链路状态命令。
子站回答:10 0B 4F 5A 16目的:子站向主站响应链路状态。
主站发: 10 40 4F 8F 16目的:给地址为4F的子站发复位通信单元命令。
子站回答:10 20 4F 6F 16目的: ACD位置1,表明子站向主站请求1级数据上送。
主站发: 10 7A 4F C9 16目的:向地址为4F的子站发召唤1级数据命令。
子站回答:68 09 09 68 28 4F 46 01 04 4F 00 00 00 11 16 (ASDU70,CON=28,COT=4)目的:子站以ASDU70(初始化结束)响应主站的召唤。
并ACD位置1,表明子站继续向主站请求1级数据上送。
后面跟随时间同步和总查询。
2、对时主站发:68 0F 0F 68 73 00 67 01 06 00 00 00 CD 85 36 0D 1E 0C 04 A4 16目的:给地址为0的子站发对时命令。
对时时间为:04年12月31日 13时54分34秒253毫秒长度长度(重复)控制域子站地址数据类型(ASDU方式)可变结构限定词传送原因毫秒(低)毫秒(高)分小时日月年子站发:68 0F 0F 68 80 00 67 01 07 00 00 00 F7 01 36 0D 1E 0C 04 58 16 目的:以ASDU67响应主站对时命令。
3、 总召唤 主站发:68 09 09 68 53 4F 64 01 06 4F 00 00 14 70 16 目的:向地址为4F 的子站发总召唤命令。
子站回答:10 20 4F 6F 16 目的:ACD 位置1,表明子站向主站请求1级数据上送。
主站发:10 5A 4F A9 16目的:向地址为4F 的子站发召唤1级数据的命令。
376-1报文解析
Q / GDW376.1—2009电力用户用电信息采集系统通信协议报文解析示例1.集中器登录主站注册帧报文//该帧为集中器发送给主站的登录注册帧登录: 68 32 00 32 00 68 C9 03 44 04 00 00 02 71 00 00 01 00 88 16解析:68 //帧起始符32 00 //数据长度2字节,数据类型排列顺序为低位在前高位在后,正序数值为0x0032,转换为二进制为0b0000000000110010,//最低d1~d0两位为协议类型,为0b10代表为376.1协议使用标志;//d15~d2为长度,为报文的用户数据区长度,对应的二进制值为0b1100,转换为十进制为12,即原始报文的红色部分32 00 //内容解释同上,使用2个长度表示长度确认比对68 //帧起始符C9 //控制域CD7 D6 D5 D4 D3~D0上行方向传输方向位DIR 启动标志位PRM 要求访问位ACD 保留功能码1 1 0 0 1001//d7:传输方向位DIR,d7位的数值为1,代表此帧报文是由终端发出的上行报文//d6:启动标志位PRM,d6位的数值为1,代表此帧报文来自启动站//d5:要求访问位,d5位的数值为0,ACD=1表示终端有重要事件等待访问,则附加信息域中带有事件计数器EC(EC见本部分4.3.4.6.3);ACD=0表示终端无事件数据等待访问。
//d4:保留//d3~d0:功能码,对应值为9,当启动标志位PRM=1时,代表该帧报文的帧类型为请求/响应帧,服务功能为链路测试,及使用于AFN=02的应用层功能码功能码帧类型服务功能0 —备用1 发送∕确认复位命令2~3 —备用4 发送∕无回答用户数据5~8 —备用9 请求∕响应帧链路测试10 请求∕响应帧请求1级数据11 请求∕响应帧请求2级数据12~15 —备用03 44 04 00 00 //地址域:地址域分为三部分,03 44|04 00|00//地址域数据格式字节数对应数值行政区划码A1 BCD 2 03 44终端地址A2 BIN 2 04 00主站地址和组地址标志A3 BIN 1 00//第一部分为行政区划码A1, 行政区划码按GB 2260—91的规定执行,数据格式为两字节BCD码-03 44,字节顺序为低位在前高位在后,实际数值应为4403//第二部分为终端地址A2,终端地址A2选址范围为1~65535。
wireshark代码解析1
Wireshark学习笔记1.简介2.Wireshark功能模块下图给出了wireshark功能模块:a)GTK1/2处理用户的输入输出显示,源码在gtk目录.b)Core核心模块,通过函数调用将其他模块连接在一起,源码在根目录c)Epanwireshark Packetage Analyzing,包分析引擎,源码在epan目录●Protocol-Tree:保存数据包的协议信息,wireshark的协议结构采用树形结构,解析协议报文时只需要从根节点通过函数句柄依次调用各层解析函数即可。
●Dissectors:在epan/dissector目录下,各种协议解码器,支持700+种协议解析,对于每种协议,解码器都能识别出协议字段(field),并显示出字段值(field value)由于网络协议种类很多,为了使协议和协议间层次关系明显,对数据流里的各个层次的协议能够逐层处理,wireshark系统采用了协议树的方式。
●Plugins:一些协议解码器以插件形式实现,源码在plugins目录●Display-Filters:显示过滤引擎,源码在epan/dfilter目录d)Capture捕包引擎,利用libpcap/WinPcap从底层抓取网络数据包,libpcap/WinPcap提供了通用的抓包接口,能从不同类型的网络接口(包括以太网,令牌环网,ATM网等)获取数据包。
e)Wiretap从文件中读取数据包,支持多种文件格式,源码在wiretap目录f)Win-/libpcapWireshark抓包时依赖的库文件wireshark功能模块3.wireshark流程分析1)初始化Wireshark的初始化包括一些全局变量的初始化、协议分析引擎的初始化和Gtk相关初始化,显示Ethereal主窗口,等待用户进一步操作。
重点就是Epan模块的初始化。
Epan初始化:⏹tvbuff初始化:全局变量tvbuff_mem_chunk指向用memchunk分配的固定大小的空闲内存块,每个内存块是tvbuff_t结构,从空闲内存块中取出后,用来保存原始数据包。
IEC101规约报文解析举例
IEC-101规约报文举例1. 子站上电第一次建立连接后,上送初始化结束帧2. 主站复位命令3. 完整的时钟同步过程3.1. 延时采集和延时发送3.2. 时钟同步4. 总召唤4.1. 站总召唤4.2. 分组召唤5. 遥控5.1. 主站下发单点遥控合选择并且执行的全过程5.2. 主站下发单点遥控分选择并且撤销的全过程6. 子站突发上送数据6.1. YXBW、SOE主站:10 5b 01 5c 16子站:10 29 01 2a 16主站:10 7a 01 7b 16子站:68 09 09 68 28 01 01 81 03 01 03 00 01 b3 16【突发单点遥信】主站:10 5a 01 5b 16子站:68 09 09 68 28 01 01 81 03 01 03 00 00 b2 16【突发单点遥信】主站:10 7a 01 7b 16子站:68 1a 1a 68 08 01 1e 02 03 01 03 00 01 fc 43 39 16 81 03 07 03 00 00 f1 4a 39 16 81 03 0762 16【突发单点时标单点CP56Time2a时标事件】主站:10 5b 01 5c 16子站:10 09 01 0a 16主站:10 5a 01 5b 16子站:68 09 09 68 28 01 01 81 03 01 08 00 00 b7 16【突发单点遥信】主站:10 7a 01 7b 16子站:68 0c 0c 68 08 01 02 01 03 01 08 00 01 97 32 04 e6 16【突发带时标CP24单点遥信事件】主站:10 5b 01 5c 16子站:10 09 01 0a 166.2. 变化遥测主站:10 7b 01 7c 16子站:10 29 01 2a 16主站:10 5a 01 5b 16子站:68 0b 0b 68 28 01 09 81 03 01 08 40 00 01 00 00 16【突发规一化遥测】主站:10 7a 01 7b 16子站:68 0b 0b 68 08 01 09 81 03 01 08 40 00 00 00 00 df 16【突发规一化遥测】主站:10 5b 01 5c 16子站:10 09 01 0a 16。
[指南]iec104报文解析
[指南]iec104报文解析1.变化遥测报文举例:68 04 07 00 00 00子站响应帧报文68 04 0B 00 00 002.链路测试帧报文:68 04 43 00 00 00响应帧报文68 04 83 00 00 003.主站接收数据确认帧报文:68 04 01 00 5A 024(总召唤上送遥测报文举例:68 40 18 00 04 00 09 91 14 00 01 0B 70 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F4 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 说明:0x09 ASDU 类型:遥测数据。
0x91 可变机构限定词:第七位定义该帧应用数据的数目,低位在前高位在后。
最高位为1,表示应用数据是信息体地址连续的一串数据,报文中只提供一个起始信息体地址,即第一个遥测的信息体地址,后面的遥测在此地址的基础上递增。
如上报文上送的是起始信息体地址为0x4070的17个遥测。
0x0014 传送原因:定义数据上送的原因,低位在前高位在后。
20为召唤上送,一般为响应总召唤。
0x004070 起始信息体地址:该帧第一个遥测信息体地址,其后信息体地址在此地址后依次递增。
0x0b01 公共地址:主站个子站设定的地址,低位在前高位在后。
由主站方确定,子站严格按此地址设定。
00 00 00 遥测实际上送数据:以下每3个字节一个遥测数据,信息体地址在起始地址上依次递增。
5(变化遥测报文举例:68 3A 00 00 00 00 09 08 03 00 01 0B 01 40 00 45 00 00 02 40 00 CD FF 00 03 40 00 32 00 00 04 40 00 0C 04 00 05 40 00 2C 00 00 06 40 00 0C 04 00 07 40 00 50 00 00 0F 40 00 88 13 00说明:0x09 ASDU类型:遥测数据。
61850典型报文解析说明
61850典型报文解析说明1 平台现利用ethereal报文抓捕工具抓取部分典型报文解析说明。
1.1报告类61850报告服务,是一项非常重要的ACSI服务,它通过SCSM映射为MMS协议中的InformationReport服务,我们在调试过程中通过捕包工具得到的61850报告报文,都是经过ASN.1编码后的InformationReport数据。
1.1.1InformationReport相关数据结构下表是InformationReport的数据结构:InformationReport的数据结构定义其中:RptID:作为不同报告间的唯一标识符,在报文中是始终存在的。
OptFlds:决定了报文拼装中可选成员出现与否,该属性值对于报文解析非常重要,在61850-7-2中BRCB.OptFlds和URCB.OptFlds定义不同,在标准-8-1中通过引入保留位,保证了OptFlds定义的一致性,整合后的OptFlds各位含义如下:OptFlds数据定义ResonCode(DataChange)、数据更新(DataUpdata)、品质变化(QualityChange)、完整性周期(IntegerPd)和总召唤(GI)。
ResonCode也是Bitstring类型,× × × × × × × ×待扩展GIIntgPdDdupQchgDchg保留触发选项的存储形式1.1.2 InformationReport报文解析建好数据库,连接好装置后,启动SCADA服务器,并用ethereal抓报文,根据报告格式进行解析。
图1为ethereal解析出来的报文。
解释如下:1、报告的RptID为BR04_brcbRelayDin03,其中03为报告实例号2、报告的选项域,报告中包含哪些选项,按位标识,0为不存在,1为存在。
3、顺序编号SeqNum,由OptFlds决定其是否存在4、溢出标志BufOvfl,由OptFlds决定其是否存在5、入口标识EntryID,由OptFlds决定其是否存在6、InclusionBitstring(该报告中出现的数据集成员),由报文可知该数据集共有137个成员,其中只有第29个数据集成员上送报告7、数据集成员Value,数据集成员值为一个结构8、value的stval(状态值)9、value的q(品质)10、value的t(时标)11、报告的触发原因类型为:数据变化(按位为保留、数据变化、品质变化、数据更新、完整性、总召唤,0为无1为有)图1 InformationReport1.2定值类定值服务可以分为SGCB控制块相关服务和定值相关服务。
CANOE基本操作_报文分析
CANoe基础功能及操作介绍黎先辉20200610目录1.概要 (3)2.工程建立 (3)2.1.CANoe功能概述 (3)3.工程配置 (4)3.1.硬件连接 (4)3.2.通道配置 (5)3.2.1.通道数量配置 (5)3.2.2.通道匹配 (6)3.3.加载DBC文件 (7)4.报文监测及分析 (8)4.1.数据来源设置 (8)4.2.CAN Statistics窗口 (9)4.3.Trace窗口 (9)4.4.Graphics窗口 (10)4.4.1.添加信号 (11)4.4.2.常用工具 (11)4.4.3.信号配置 (12)4.5.Logging窗口 (14)4.5.1.分包存储配置 (14)4.5.2.长报文回放 (15)1.概要CANoe是Vector公司的针对汽车电子行业开发的专用工具,主要用于总线开发及测试、ECU开发及测试、报文分析及诊断等方面,贯穿从需求分析到系统实现的完整开发过程。
CANoe丰富的功能和配置选项被OEM和供应商的网络设计工程师、开发工程师和测试工程师所广泛使用。
2.工程建立首次打开软件需要建立一个CANoe工程,File→New→Default,弹出图2.1模板选择窗口,工程模版库中有很多模板,可根据自己的需求选择最相近的一个模板,也可以把自己习惯使用的模块保存为自定义模板,下图中的CanOffLine_Li模板就是我新建的,还可以在右下角添加描述,后续新建工程时可以直接选用。
CANoe的工程文件包含两个文件,建议单独建立文件夹,针对需要多次打开使用的工程,建议另存工程,可以避免重复配置或数据回放。
图2.1CANoe工程模板选择窗口2.1.CANoe功能概述CANoe功能很比较多,汽车电子常用到的功能基本都有,包括CAN报文分析、虚拟节点、测试、诊断等功能,详见图2.2。
(1)CAN报文分析包括离线报文分析和在线报文分析;(2)虚拟节点可模拟部线节点周期性发送报文,可用于实车调试、台架调试或负载测试;(3)CANoe有较强大的测试功能,可以支持各类ECU测试;(4)支持UDS协议,通过导入.cdd文件,实现对ECU进行诊断或刷写。
电表报文解析
该通信规约适用于本地系统中多功能表的费率装置与手持单元(HHU)或其它数据终端设备进行点对点的或一主多从的数据交换方式,规定了它们之间的物理连接、通信链路及应用技术规范。
该协议在做“电力监控”、“水监控”等“工控领域”,具有广泛的应用。
协议具体内容可以从网上Google,下面主要介绍下协议的解析方法。
DL645协议需要先发送“前导字节”,用来唤醒从站,当然有些设备是不需要这样唤醒的。
在发送帧信息之前,先发送1-4个字节FEH,以唤醒接收方("FEH",H表示16进制,是一个字节), “前导字节” + “取数据报文”=“整体报文”。
首先我们先整体了解一个发送报文“68 12 34 56 78 90 12 68 01 02 43 C3 cs 16”在这之前呢,先看一下BCD码。
BCD码:二进制编码的十进制代码。
比如:0=00001=00012=00103=00114=01005=01016=01107=01118=10009=1001BCD码:ASCII表示(都是字符)BCD码都是由0~9,10个字符构成。
也就是说,BCD码一个字节是两位,一位是0~9,一个字节能够表示00~99。
BCD码1位是2进制的4位。
按16进制表示,没有ABCDEF。
帧格式(DL/T645-1997通讯规约标准文档中)帧是传送信息的基本单元。
帧格式如图所示。
4.2.1 帧起始符68H:标识一帧信息的开始,其值为68H=01101000B。
4.2.2地址域A0∽A5:地址域由6个字节构成,每字节2位BCD码。
地址长度为12位十进制数,可以为表号、资产号、用户号、设备号等。
具体使用可由用户自行决定。
当使用的地址码长度不足6字节时,用十六进制AAH补足6字节。
低地址位在先,高地址位在后。
当地址为999999999999H时,为广播地址。
4.2.3 控制码C:控制码的格式如下所示。
功能码后续帧标志从站异常标志传送方向D7=0:由主站发出的命令帧D7=1:由从站发出的应答帧D6=0:从站正确应答D6=1:从站对异常信息的应答D5=0:无后续数据帧D5=1:有后续数据帧D4∽D0:请求及应答功能码00000:保留00001:读数据00010:读后续数据00011:重读数据00100:写数据01000:广播校时01010:写设备地址01100:更改通信速率01111:修改密码10000:最大需量清零4.2.4 数据长度L:L为数据域的字节数。
485通信讲解(附案例)
帧头 帧头:一个字节 帧头是主机发布命令或从机回应主机响应的第一个字节,不论是主机还是从 机,都在收到该字节后开始记录有效数据。 为确保能准确识别报文头,要求两个通信帧之间保持2个字节传输时间以上的总 线空闲时间。
数据帧格式示意图
起始字节 (字节)
从机地址 (字节)
用户数据
异或校验 (字节)
76543210
速度
0
未到达设定频率
/速度
RS485通讯协议
响应字位定义
控制字 (位)
值
bit11
1
含义 变频器运行状态
功能描述
0
变频器停止状态
bit15
1
变频器接受出错
0
变频器接收正确 本位表示来自控制器的通讯帧经
校验出错,控制器应再次发送该
bit0
预留
帧。
bit7~8
预留
bit12~1 4,
预留
RS485通讯协议
1、以50Hz运行2#变频器。(此例需要将变频器频率设定成F0.03=6)
功能码号 功能码组号 命 令 /响 应 字 ( 码 )
RS485通讯协议
命令字(码)
命令字(码)
功能描述
0 无任务 1 请求读取功能码参数数据
2 请求更改功能码参数数据 14 请求更改功能码参数并存储至EEPROM
3~13,15 预留
响应字(码)
响应字(码)
内容描述
0 无响应
1 功能码参数操作正确(读取或更改)
先发高字节,再发低字节的原则
数据帧格式示意图
起始字节 (字节)
从机地址 (字节)
功能码操作 命 令 /响 应 (字节)
功能码号 (字节)
iec 60870-5-101报文的快速解析
IEC 60870-5-101规约常用报文的快速解析方法The rapidly analyzing method of IEC 60870-5-101protocol ’s common packets1 报文结构及主要用途2.1 固定帧长报文长度固定为5个字节,通常用于链路服务、请求用户数据,常用的有:1)请求链路状态(49、69/8b、0b),这里需要说明的是,括弧中的格式为(主站控制字/子站控制字),主站49、69表明为两种可能的选择,子站8b、0b 的高4位8、0是由于控制字最高位是保留位,不同厂家定义不同造成的。
本文中不做声明的数字均为略去H 的16进制表示,以下相同;2)链路复位(40/80、00) ;3)请求1级用户数据(5a、7a/88、a8、08、28)、请求2级用户数据(5b、7b/88、a8、08、28),其中5a、7a 及5b、7b 的5和7交替变换是用来表示通讯的正常进行,相同控制字最多重复3次即判定为通讯故障(此时子站重传上一次的报文)。
子站88、a8、08、28控制字的高4位a、2表示子站端有一级用户数据待传,要求主站下一帧开始召唤,8、0表示子站端没有一级用户数据,以下相同;4)某些情况下,“确认帧”可以用单字节“E5”代替。
需要说明的是:控制字最高位的保留位在实际应用中经常与第二位PRM(信息传递方向位)一起用于描述信息流通方向:常见的取值是01—主站下发,10或00—子站上送,很少见11。
Addr 为厂站地址,默认值为01H ,在点对点通讯中,不需改变。
校验和CS 的计算方法是:控制字开始到CS 前所有字节的二进制和,不计溢出部分,以下相同。
2.2 单字节E5表1:固定帧长 一般子站用它来上传确认链路和用户数据,如:主站请求2级数据时,子站表示无请求的数据且运行正常;在遥控、遥调选择和执行过程中让链路保持通畅,以不至于应答超时等。
1.3 可变帧长 可变帧长用来在主站和厂站间传输数据。
第1章 数据通信基础知识
1.4.3 数据通信的主要技术指标
误码率是二进制数据位传输时出错的概率。
Ne Pe N
出错位数
传输二进制总位数
在计算机网络中,一般要求误码率低于10-6, 一般通过差错控制方法进行检错和纠错来保证低 误码率。
1.4.3 数据通信的主要技术指标
传输延迟是信息在系统中传输过程中存在 着延迟。 传输延迟=发送和接收处理时间+电信号响应 时间+中间转发时间+信道传输延迟 响应时间越小,延迟就越小。
1.4.3 数据通信的主要技术指标
实际网络通信中的信道总要受到各种噪声 的干扰,香农(Shannon) 给出受随机噪声干 扰的信道容量计算公式: 信号功率
S C Wlog 2 (1 ) N
S/N 信噪比
噪声功率
1.4.3 数据通信的主要技术指标
实际使用的信道的信噪比都要足够大,故 常表示成10lg(S/N),单位是分贝(dB)。 例:信噪比为 30dB,带宽为3kHZ的信道,求 最大数据传输速率。 ∵ 10lg(S/N)=30 ∴ S/N=1030/10=1000 C=3000×log2(1+1000)=3000×9.9672 =29901.6≈30k bps
第1章 数据通信基础知识
第2章 网络数据通信
问题 原由 数据通信技术完成数据的编码、传输和处理,为计 算机网络的应用提供必要的技术支持和可靠的通信 环境。那么,它是如何实现这些功能的呢?这就是 本章所要讨论的问题。 本章重点讨论数据通信系统和常用通信信道类型、 数据调制与编码技术、数据传输技术、多路复用技 术、数据交换技术和差错控制等技术。 掌握: 数据通信的基本概念,数据传输与编码技术. 了解:数据传输技术的发展趋势。 熟悉: 多路复用技术、数据交换技术、差错控制技 术等。
报文的工作原理
报文的工作原理
报文是指在网络通信中传输的数据单元,它包括数据部分和报文首部。
报文的工作原理如下:
1. 发送方封装报文:发送方将要传输的数据封装成报文的格式。
报文首部包含发送方和接收方的地址信息以及其他控制信息,用于指示数据的类型、大小和目的地等。
2. 报文传输:发送方将封装好的报文通过网络传输给接收方。
这涉及到将报文切割成适当大小的数据块,并通过物理介质(如电缆、无线信道等)进行传输。
3. 接收方解析报文:接收方接收到报文后,根据报文首部的控制信息对报文进行解析。
这包括确定数据的类型、大小以及发送方和接收方的地址等。
4. 数据传输和处理:接收方根据报文首部的控制信息,将数据传输到相应的应用程序或者存储设备进行处理。
这可能涉及到数据的重新组装、解密、保存等操作。
通过以上步骤,报文可以在发送方和接收方之间进行可靠和准确的数据传输。
报文的工作原理不涉及标题,而是依赖报文首部中的控制信息来实现数据的传输和处理。
标准报文1的使用
标准报文1的使用标准报文1的使用:提升信息传递效率与准确性引言:在现代社会,信息的传递与交流变得愈发频繁与重要。
为了确保信息的准确性和一致性,在不同系统之间进行数据交换时,人们普遍采用了标准报文的形式。
本文将详细阐述标准报文1的使用,探讨它在信息传递中的重要性和优势。
第一部分:标准报文1的定义与特点标准报文1是一种规范化的数据交换格式,定义了信息传递的结构、字段和格式。
它可以用于不同系统之间的数据交换,确保数据的一致性和可读性。
与其他报文相比,标准报文1具有以下特点:1.结构化:标准报文1的字段和格式都经过严格的定义与约束,使其具有清晰的层次结构,方便解析和处理。
2.可扩展性:标准报文1的设计考虑到了未来可能的需求变化,可以通过增加新的字段或修改现有字段来满足系统的扩展需求。
3.可读性强:标准报文1采用了人类可读的文本格式,使人们能够直观地理解报文的含义,提高了信息传递的准确性。
第二部分:标准报文1的应用领域标准报文1广泛应用于各个行业和领域,例如电子商务、物流、金融等。
以电子商务为例,标准报文1的使用可带来以下优势:1.提高效率:标准报文1的结构清晰,使得数据的解析和处理更加高效。
商家和供应商之间通过标准报文1进行订单、支付和物流信息的交换,可以大大节省人力和时间成本。
2.提升准确性:标准报文1的字段和格式经过严格定义,可以减少数据输入错误的概率。
商家和供应商之间的订单信息交互更加准确,避免了因误解或错误导致的交易纠纷。
3.促进合作:标准报文1的使用使得不同系统之间的数据交换更加便捷和可靠。
商家和供应商可以更加方便地合作,共享订单和物流信息,提供更好的服务和体验。
第三部分:标准报文1的实践案例为了更好地理解标准报文1的应用,我们来看一个实际案例——物流信息的跟踪与查询。
在传统的物流行业中,供应链管理和物流信息的传递一直是难题。
但通过标准报文1的使用,物流信息的跟踪和查询变得更加便捷和准确。
物流公司、承运商和收货方可以通过标准报文1交换订单、运输和签收信息,实现物流信息的实时更新和共享。
在抓包tcp中连接数据发送部分的第一条tcp报文
在抓包tcp中连接数据发送部分的第一条tcp报文在TCP连接中,数据的发送是通过分组传输的方式进行的。
每个分组都是通过TCP报文的格式进行封装和传输的。
抓包是一种用于收集、分析和记录网络通信数据的技术手段,其中抓包TCP连接数据发送部分的第一条TCP报文包含了与数据传输相关的重要信息。
一条TCP报文通常包含了报文头和报文体两个部分。
报文头包含了用于控制和传输数据的各个字段,而报文体则是要传输的具体数据。
在TCP连接中,报文头包含了以下重要字段:1. 源端口号和目的端口号:源端口号是发送方的端口号,而目的端口号是接收方的端口号。
通过这两个字段,可以确认发送方和接收方的身份。
2. 序号和确认号:序号用于标识发送方发送的数据的顺序,而确认号用于确认接收方已经接收到的数据。
通过这两个字段,可以实现可靠的数据传输。
3. 数据偏移和标志位:数据偏移字段指示了报文头的长度,而标志位字段用于控制数据传输的各个方面,如是否需要进行确认、是否需要设置窗口大小等等。
4. 窗口大小:窗口大小用于控制发送方可以发送的数据量。
发送方根据窗口大小来调整数据的发送速率,以避免发送方发送过多的数据导致网络拥塞。
5. 校验和:校验和字段用于校验数据在传输过程中是否被修改或丢失。
接收方通过校验和来验证接收到的数据的完整性和正确性。
在抓包TCP连接数据发送部分的第一条TCP报文中,这些字段的值会根据具体的网络环境和数据传输需求而有所差异。
还需要注意报文体中的具体数据内容,这些数据内容是根据应用层协议进行封装和传输的。
抓包TCP连接数据发送部分的第一条TCP报文是网络通信中重要的一部分,通过分析该报文的各个字段和数据内容,可以了解到TCP 连接的建立过程、数据传输的控制机制和具体的数据内容,对于网络性能的优化和故障的排查都有重要的价值。
g120标准报文1定义
g120标准报文1定义
G120标准报文1是一种用于工业自动化领域的通信协议,它定义了设备之间传输信息的格式和内容。
该报文包括以下六个部分:
1. 报文头
报文头是G120标准报文的开头部分,它包含了发送该报文的设备的标识符、报文类型、版本号等信息。
这些信息用于设备识别和协议解析。
2. 遥测信息
遥测信息部分包含了从发送设备采集的数据,例如模拟量输入、数字量输入、脉冲计数值等。
这些数据反映了发送设备的状态或运行参数,可以用于监测和控制。
3. 状态信息
状态信息部分包含了发送设备的状态信息,例如运行状态、故障状态、报警状态等。
这些信息可以帮助接收设备了解发送设备的状态,以便进行相应的控制和调整。
4. 控制命令
控制命令部分包含了发送设备发送的控制指令,例如启动、停止、复位等。
这些指令可以用于控制发送设备的动作或行为。
5. 校时信息
校时信息部分包含了当前时间戳,用于同步发送设备和接收设备的时间。
这有助于保证数据传输的准确性和一致性。
6. 其他信息
其他信息部分包含了其他类型的附加信息,例如设备参数、日志信息等。
这些信息可以根据实际需要进行定义和扩展。
西门子S7报文解析
西门⼦S7报⽂解析1.报⽂的基本格式1.1 第1和第2个字节是:固定报⽂头03 00,这⾥我们就⽤到三种报⽂: a.初始化 b. 读 c.写,都是这种格式;1.2 第3和第4个字节是:整个报⽂的长度;其它部分就是各种报⽂的个性化处理了;下⾯分析⼤量报⽂的案例进⾏规律分析,为了便于对照,每种都⽤1200 和300 两种对照demo显⽰:2.初始化报⽂初始化报⽂分两个交互:2.1 交互⼀西门⼦1200:PC发出报⽂ ( [A18]=0x01 =CPUSlot)03 00 00 16 11 E0 00 00 00 01 00 C1 02 01 00 C2 02 01 01(cpuslot) C0 01 09PLC回复报⽂( B[10]=0x06 可能是西门⼦的⼩型号 B[22]=0x01=CPUSlot)03 00 00 16 11 D0 00 01 00 06 00 C0 01 09 C1 02 01 00 C2 02 01 01 (cpuslot)西门⼦300:PC发出报⽂ ( A[18]=0x02 =CPUSlot)03 00 00 16 11 E0 00 00 00 01 00 C1 02 01 00 C2 02 01 02(cpuslot) C0 01 09PLC回复报⽂ (B[10]=0x04 可能是西门⼦的⼩型号 B[22]=0x0=CPUSlot)03 00 00 16 11 D0 00 01 00 04 00 C0 01 09 C1 02 01 00 C2 02 01 02opc 对 1200 和 300 不⽤配置的不同点,就⼀个地⽅:前者 CPUSlot = 1 ,后者CPUSlot = 2;所以可以摸索规律是:a.pc发起第⼀个初始化报⽂的时候,第18个字节标识了CPUSlot ;b.plc回复报⽂和读取报⽂长度⼀样都是22个字节长度;c.plc回复报⽂的最后⼀个字节也是CPUSlot ,这个可以⽤来校验;d. plc回复的第10个字节⼀个是06,⼀个是04,这个好像是⼩型号的区别;细节摸索下来:1200该字节是06,314是04,315是03;咱写程序的时候,就不要考虑这个来校验了;2.2交互⼆PC发出报⽂03 00 00 19 02 F0 80 32 01 00 00 FF FF 00 08 00 00 F0 00 00 01 00 01 07 80PLC回复报⽂03 00 00 1B 02 F0 80 32 03 00 00 FF FF 00 08 00 00 00 00 F0 00 00 01 00 01 00 F0第⼆个初始化报⽂交互,通过1200 和314,315的对⽐,发现居然完全没有任何区别;所以我们可以把这个交互完全固话;到此,整个初始化处理就算结束了,正常在设计架构的时候,可以这么实现:在ClentSocket的onConnect(即正常连接上)的瞬间,pc给plc发起第⼀个初始请求,得到回复后(为了简单,就仅仅判断长度为22即可);⽴刻发起第⼆个固定的初始话请求,得到长度为24的报⽂后,就通过⼀个布尔变量通知整个系统可以正常读写;3.读操作读demo1:西门⼦1200: 读取DB10, count=17 ,offset=19PC发出报⽂(A[3]~A[4]=0x001F=31=读取报⽂总长度, A[12]~A[13]=0x001C=序列号,A[24]~A[25]=0x0011=17=读取请求count;A[26]~A[27]=0x000A=10=DB10, A[28]=0x84=读取的数据类型为DB块,A[29]~A[31]=0x000098=152=19*8=读取偏移量offset(bit为单位) ) 03 00 00 1F 02 F0 80 32 01 00 00 00 1C 00 0E 00 00 04 01 12 0A 10 02 00 11 00 0A 84 00 00 98PLC回复报⽂:(B[3]~B[4]=0x002A=42=回复报⽂总长度, B[12]~B[13]=0x001C=序列号,B[16]~B[17]=0x0015=21=读取请求count(17)+4B[24]~B[25]=0x0088=17*8=请求数据长度(bit为单位), B[26]~最后=数据值)03 00 00 2A 02 F0 80 32 03 00 00 00 1C 00 02 00 15 00 00 04 01 FF 04 00 88 13 14 15 16 17 00 00 00 00 00 00 00 00 00 00 00 00读demo2:西门⼦1200: 读取DB11, count=17 ,offset=19PC发出报⽂:(A[3]~A[4]=0x001F=31=读取报⽂总长度, A[12]~A[13]=0x008E=序列号,A[24]~A[25]=0x0011=17=读取请求count;A[26]~A[27]=0x000B=11=DB11, A[28]=0x84=读取的数据类型为DB块,A[29]~A[31]=0x000098=152=19*8=读取偏移量offset(bit为单位) ) 03 00 00 1F 02 F0 80 32 01 00 00 00 8E 00 0E 00 00 04 01 12 0A 10 02 00 11 00 0B 84 00 00 98PLC回复报⽂:(B[3]~B[4]=0x002A=42=回复报⽂总长度, B[12]~B[13]=0x001C=序列号,B[16]~B[17]=0x0015=21=读取请求count(17)+4B[24]~B[25]=0x0088=17*8=请求数据长度(bit为单位), B[26]~B[42]=数据值)03 00 00 2A 02 F0 80 32 03 00 00 00 8E 00 02 00 15 00 00 04 01 FF 04 00 88 13 14 15 16 17 18 00 00 00 00 00 00 00 00 21 22 23读demo3:西门⼦1200:读取DB11, count=16 ,offset=18PC发出报⽂:(A[3]~A[4]=0x001F=31=读取报⽂总长度, A[12]~A[13]=0x0013=序列号,A[24]~A[25]=0x0010=16=读取请求count;A[26]~A[27]=0x000B=11=DB11, A[28]=0x84=读取的数据类型为DB块,A[29]~A[31]=0x000090=146=18*8=读取偏移量offset(bit为单位) ) 03 00 00 1F 02 F0 80 32 01 00 00 00 13 00 0E 00 00 04 01 12 0A 10 02 00 10 00 0B 84 00 00 90PLC回复报⽂:(B[3]~B[4]=0x0029=41=回复报⽂总长度, B[12]~B[13]=0x0013=序列号,B[16]~B[17]=0x0014=20=读取请求count(16)+4B[24]~B[25]=0x0080=16*8=请求数据长度(bit为单位), B[26]~B[41]=数据值)03 00 00 29 02 F0 80 32 03 00 00 00 13 00 02 00 14 00 00 04 01 FF 04 00 80 00 13 14 15 16 17 18 00 00 00 00 00 00 00 00 21读demo4:西门⼦300 (314) 读取D50, count=20 ,offset=4000PC发出报⽂:(A[3]~A[4]=0x001F=31=读取报⽂总长度, A[12]~A[13]=0x0028=序列号,A[24]~A[25]=0x0014=20=读取请求count;A[26]~A[27]=0x0032=50=DB50, A[28]=0x84=读取的数据类型为DB块,A[29]~A[31]=0x007D00=32000=4000*8=读取偏移量offset(bit为单位) )03 00 00 1F02 F0 80 32 01 00 00 00 28 00 0E 00 00 04 01 12 0A 10 02 00 14 00 32 8400 7D 00PLC回复报⽂:(B[3]~B[4]=0x002D=45=回复报⽂总长度, B[12]~B[13]=0x0028=序列号,B[16]~B[17]=0x0018=24=读取请求count(20)+4B[24]~B[25]=0x00A0=20*8=请求数据长度(bit为单位), B[26]~B[45]=数据值)03 00 00 2D02 F0 80 32 03 00 00 00 28 00 02 00 18 00 00 04 01 FF 04 00 A0 00 04 0E AB 00 00 00 00 00 00 03 00 00 00 00 00 00 00 0000读demo5:西门⼦300 (315) 读取D10, count=100 ,offset=2PC发出报⽂:(A[3]~A[4]=0x001F=31=读取报⽂总长度, A[12]~A[13]=0x0003=序列号,A[24]~A[25]=0x0064=100=读取请求count;A[26]~A[27]=0x000A=10=DB10, A[28]=0x84=读取的数据类型为DB块,A[29]~A[31]=0x000010=16=2*8=读取偏移量offset(bit为单位) )03 00 00 1F 02 F0 80 32 01 00 00 00 03 00 0E 00 00 04 01 12 0A 10 02 00 64 00 0A 84 00 00 10PLC回复报⽂:(B[3]~B[4]=0x007D=125=回复报⽂总长度, B[12]~B[13]=0x0003=序列号,B[16]~B[17]=0x0068=104=读取请求count(100)+4B[24]~B[25]=0x0320=100*8=请求数据长度(bit为单位), B[26]~B[125]=数据值)03 00 00 7D 02 F0 80 32 03 00 00 00 03 00 02 00 68 00 00 04 01 FF 04 03 20 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00读demo6:西门⼦1200 读取X输⼊(input)两个byte:PC发出报⽂:(A[3]~A[4]=0x001F=31=读取报⽂总长度, A[12]~A[13]=0x0002=序列号,A[24]~A[25]=0x0002=2=读取请求count;A[26]~A[27]=0x000A=10=DB10[其实这⾥写什么都可以,因为input不属于DB块],A[28]=0x81=读取的数据类型为Input,A[29]~A[31]=0x000000=0=0*8=读取偏移量offset(bit为单位) )03 00 00 1F 02 F0 80 32 01 00 00 00 02 00 0E 00 00 04 01 12 0A 10 02 00 02 00 0A 81 00 00 00PLC回复报⽂:(B[3]~B[4]=0x001B=27=回复报⽂总长度, B[12]~B[13]=0x0002=序列号,B[16]~B[17]=0x0068=104=读取请求count(100)+4B[24]~B[25]=0x0320=100*8=请求数据长度(bit为单位), B[26]~B[27]=数据值)03 00 00 1B 02 F0 80 32 03 00 00 00 02 00 02 00 06 00 00 04 01 FF 04 00 10 08 00读demo7:西门⼦1200 读取Y输出(output)两个byte:PC发出报⽂:(A[3]~A[4]=0x001F=31=读取报⽂总长度, A[12]~A[13]=0x0001=序列号,A[24]~A[25]=0x0002=2=读取请求count;A[26]~A[27]=0x000A=10=DB10[其实这⾥写什么都可以,因为input不属于DB块],A[28]=0x82=读取的数据类型为Output,A[29]~A[31]=0x000000=0=0*8=读取偏移量offset(bit为单位) )03 00 00 1F 02 F0 80 32 01 00 00 00 01 00 0E 00 00 04 01 12 0A 10 02 00 02 00 0A 82 00 00 00PLC回复报⽂:(B[3]~B[4]=0x001B=27=回复报⽂总长度, B[12]~B[13]=0x0002=序列号,B[16]~B[17]=0x0068=104=读取请求count(100)+4B[24]~B[25]=0x0320=100*8=请求数据长度(bit为单位), B[26]~B[27]=数据值)03 00 00 1B 02 F0 80 32 03 00 00 00 01 00 02 00 06 00 00 04 01 FF 04 00 10 05 00读demo8:西门⼦1200 读取flag两个byte:03 00 00 1F 02 F0 80 32 01 00 00 05 65 00 0E 00 00 04 01 12 0A 10 02 00 02 00 09 83 00 00 00PLC回复报⽂:(B[3]~B[4]=0x001B=27=回复报⽂总长度, B[12]~B[13]=0x0565=序列号,B[16]~B[17]=0x0006=6=读取请求count(2)+4B[24]~B[25]=0x0010=2*8=请求数据长度(bit为单位), B[26]~B[27]=数据值)03 00 00 1B 02 F0 80 32 03 00 00 05 65 00 02 00 06 00 00 04 01 FF 04 00 10 FF 17根据以上8个报⽂的demo,摸索出⼤致规律如下(未必完全正确,但是应付项⽬可以了);A[1]~A[2]: 03 00 固定报⽂头;A[3]~A[4]: 00 1F 整个读取请求长度为0x1F= 31 ;A[5]~A[11]: 02 F0 80 32 01 00 00 固定6个字节;A[12]~A[13]: 两个字节,标识序列号,回复报⽂相同位置和这个完全⼀样;范围是0~65535;A[14]~A[23]:00 0E 00 00 04 01 12 0A 10 02 固定10个字节A[24]~A[25]:两个字节,访问数据的个数,以byte为单位;A[26]~A[27]: DB块的编号,⽐如DB50, 就是0x32=50, 两个字节,范围是0~65535(也许是⼀个1个字节,因为没有设置估DB255以上的数据块,所以不知道到底是⼏个字节,姑且认为是2个字节);A[28] : 访问数据块的类型:0x81-input ,0x82-output ,0x83-flag , 0x84-DB(这个最常见);A[29]~A[31]: 访问DB块的偏移量offset (地址+1以byte为单位); 3个字节,范围是0~16777216(⼀般⽤不到这么⼤)程序设计的时候,其实主要关注最后4个信息,即:1. A[24]~A[25]: 访问byte个数2. A[26]~A[27]: DB块编号3. A[28] : 数据块类型4.A[29]~A[31] :访问地址偏移量;相当于⾸地址编号B[1]~B[2]: 03 00 固定报⽂头B[3]~B[4]: 整个读取回复报⽂长度:25+读取长度;B[5]~B[11]: 02 F0 80 32 03 00 00 固定6个字节,和读取请求相同的位置⼏乎⼀样,就 B[9]=0x03 ;A[9]=0x01;B[12]~B[13]: 两个字节,标识序列号,回复报⽂相同位置和这个完全⼀样;范围是0~65535;B[14]~B[15]: 两个字节,固定为00 02;对应读取位置是 00 0E;正好 02+0E=10 ;有点补码的感觉,其实不需要关注规律,反正是固定的;B[16]~B[17]:两个字节,=请求读取的字节数+4;B[18]~B[23]:6个字节,固定为:00 00 04 01 FF 04 ;B[24]~B[25]:两个字节, 请求访问的byte个数*8 ;其实就是以⼆进制为单位的个数;由此可以看出,⼀⼝⽓最多访问的地址个数是8192;B[26]~ 最后⼀个:以offset作为⾸地址,所对应的各个byte的值;程序设计的时候,其实只要关注两个信息:1.校验B[3]~B[4]:校验长度正确;2.B[26]~最后⼀个 :获取对应的值;到这⾥读的处理就算结束了;⼏个⼩注意点:1. 对于不同信号的PLC,除了初始化的CPUSolt不同;正常读/写指令是⼀样的;2.读的时候,都是以byte为单位的,如果程序只需要bit,那么还是以Byte为单位去读,将读出的部分按bit再去分解;3.flag类型到底是什么,不是很清楚,有点类似三菱⾥的M点;这个也不需要去深究,⼀般项⽬⾥主要就是⽤DB块;4.读取的长度如果是N(以byte为单位),那么返回的长度就是N*8(以bit为单位);怎么判断长度是否要*8;主要看后⾯是不是紧挨着数据,如果是数据,就需要*8;offset都是以bit为单位的;5.正常读的操作都是DB块,所以在A[26]~A[27]这个字节写⼊DB块的编号,但是对于input,output,flags这三个类型,是不需要数据块编号的,不过我们可以随便写⼀个DB编号;4.写操作写demo1:西门⼦1200 写 db10.WORD18=0xFFFE=65534; 也就是: DB10.b18=0xFF; DB10.B19=0xFE;PC发出报⽂:(A[3]~A[4]=0x0025=37=读取报⽂总长度, A[12]~A[13]=0x0005=序列号,A[16]~A[17]=0x06=写⼊byte个数(2)+4 , A[23]=0x02=写⼊⽅式为byte, A[24]~A[25]=0x0002=2=写⼊个数count; A[26]~A[27]=0x000A=10=DB10,A[28]=0x84=写⼊的数据类型为DB块,A[29]~A[31]=0x000090=144=18*8=读取偏移量offset(bit为单位),A[32]~A[33]=0x0004=写⼊⽅式为Byte , A[34]~A[35]=0x0010=2*8=写⼊byte的个数(bit为单位) ,A[36]~A[37]= 写⼊数据)03 00 00 25 02 F0 80 32 01 00 00 00 05 00 0E 00 06 05 01 12 0A 10 02 00 02 00 0A 84 00 00 90 00 04 00 10 FF FEPLC回复报⽂:( B[12]~B[13]=0x0565=序列号,最后⼀个B[14]=0xFF表⽰写⼊)03 00 00 16 02 F0 80 32 03 00 00 00 05 00 02 00 01 00 00 05 01 FF1200 写⼊ DB10. X2.6=1 (这⾥是按bit写⼊)PC发出报⽂:(A[3]~A[4]=0x0024=36=读取报⽂总长度, A[12]~A[13]=0x0008=序列号,A[16]~A[17]=0x05=写⼊bit个数(1)+4A[26]~A[27]=0x000A=10=DB10,A[28]=0x84=写⼊的数据类型为DB块,A[29]~A[31]=0x000016=22=2*8+6=读取偏移量offset( bit为单位)A[32]~A[33]=0x0003=写⼊⽅式为bit , A[34]~A[35]=0x0001=写⼊bit的个数(bit为单位) ,A[36]= 写⼊数据[0或1])03 00 00 24 02 F0 80 32 01 00 00 00 08 00 0E 00 05 05 01 12 0A 10 01 00 01 00 0A 84 00 00 16 00 03 00 01 01PLC回复报⽂:( B[12]~B[13]=0x0565=序列号,最后⼀个B[14]=0xFF表⽰写⼊)03 00 00 16 02 F0 80 32 03 00 00 00 08 00 02 00 01 00 00 05 01 FF写demo3:1200 写⼊:output0=4PC发出报⽂:(A[3]~A[4]=0x0024=36=读取报⽂总长度, A[12]~A[13]=0x0008=序列号,A[16]~A[17]=0x05=写⼊byte个数(1)+4 ,A[23]=0x02=写⼊⽅式为byte,A[24]~A[25]=0x0001=1=写⼊个数count; A[26]~A[27]=0x0001=DB1(因为是output,所以DB块编号⽆所谓),A[28]=0x82=写⼊的数据类型为output,A[29]~A[31]=0x000000=读取偏移量offset( bit为单位)A[32]~A[33]=0x0004=写⼊⽅式为byte ,A[34]~A[35]=0x0008=1*8=写⼊byte的个数 ,A[36]= 写⼊数据)03 0000 24 02 F0 80 32 01 00 00 00 08 00 0E 00 05 05 01 12 0A 10 02 00 01 00 01 82 00 00 00 00 04 00 08 04PLC回复报⽂:( B[12]~B[13]=0x0565=序列号,最后⼀个B[14]=0xFF表⽰写⼊)03 00 00 16 02 F0 80 32 03 00 00 00 08 00 02 00 01 00 00 05 01 FF写demo4:1200 写输⼊:output 0.3=1PC发出报⽂:(A[3]~A[4]=0x0024=36=写⼊报⽂总长度, A[12]~A[13]=0x0003=序列号,A[16]~A[17]=0x05=写⼊bit个数(1)+4A[23]=0x01=写⼊⽅式为bit,A[24]~A[25]=0x0001=1=写⼊个数count; A[26]~A[27]=0x000A=10=DB10(因为是output,所以DB块编号⽆所谓),A[28]=0x82=写⼊的数据类型为output,A[29]~A[31]=0x000003=读取偏移量offset( bit为单位)A[32]~A[33]=0x0003=写⼊⽅式为bit , A[34]~A[35]=0x0001=写⼊bit的个数(bit为单位) ,A[36]= 写⼊数据[0或1])03 00 00 24 02 F0 80 32 01 00 00 00 03 00 0E 00 05 05 01 12 0A 10 01 00 01 00 01 82 00 00 03 00 03 00 01 01PLC回复报⽂:( B[12]~B[13]=0x0565=序列号,最后⼀个B[14]=0xFF表⽰写⼊)03 00 00 16 02 F0 80 32 03 00 00 00 03 00 02 00 01 00 00 05 01 FF根据以上4个报⽂的demo,摸索出⼤致规律如下(未必完全正确,但是应付项⽬可以了);A[1]~A[2]: 03 00 固定报⽂头;A[3]~A[4]: 整个报⽂长度:35+写⼊长度;A[5]~A[11]: 02 F0 80 32 01 00 00 固定6个字节(和读取的完全⼀样)A[12]~A[13]: 两个字节,标识序列号,回复报⽂相同位置和这个完全⼀样;范围是0~65535;A[14]~A[15]:00 0E 固定2个字节;A[16]~A[17]:写⼊长度+4;A[18]~A[22]: 05 01 12 0A 10 固定5个⾃⼰A[23] : 写⼊⽅式: 01-按bit写⼊; 02-按byte写⼊;A[24]~A[25]:两个字节,写⼊数据的个数(可能是byte或bit, 按A[23]来区分)A[26]~A[27]: DB块的编号A[28] : 写⼊数据块的类型:0x81-input ,0x82-output ,0x83-flag , 0x84-DB(这个最常见);A[29]~A[31]: 写⼊DB块的偏移量offset (地址+1以byte为单位); 3个字节,范围是0~16777216(⼀般⽤不到这么⼤)A[32]~A[33]:写⼊⽅式为: 03-按bit写⼊; 04-按byte写⼊;A[34]~A[35]:写⼊bit的个数(bit为单位)A[36]~最后:连续的写⼊值;B[1]~B[2]: 03 00 固定报⽂头;B[14]: FF 标识写⼊正常;到这⾥,初始化,读,写这3种⽅式都摸索完了,未必都正确,应付开发应该绰绰有余;在接下来的时间⾥,就需要把这些规律变成相应的程序;注意点:1.写⼊可以按byte和bit两种⽅法去操作;2.对于byte,可以⼀⼝⽓写连续多个byte, 理论上⼀条指令连续写bit也可以,但是实践下来,发现有问题,所以对于bit操作,我们就⼀个⼀个写吧;。
快充报文解析
非车载充电机与BMS通讯协议解析1、充电握手阶段
BRM:详见数据包传输格式。
2、参数配置阶段
BCP:详见数据包传输格式。
3、充电阶段
BCS:详见数据包传输格式。
4、充电结束阶段
5、数据包传输格式
整个快充报文交互过程中,以下地址以数据包的格式发送信息:BRM(BMS和车辆辨识报文)、BCP(动力蓄电池充电参数)、BCS(电池充电总状态)。
整个充电过程中,数据包均以以下格式进行传输:
帧ID 数据长度数据备注
1CECxxxx 0x08 10 xx xx xx xx ?? ?? ?? 通知发送数据包1CECxxxx 0x08 11 xx xx xx xx ?? ?? ?? 应答接收数据包1CEBxxxx 0x08 01 xx xx xx xx xx xx xx 数据
1CEBxxxx 0x08 02 xx xx xx xx xx xx xx 传输
1CEBxxxx 0x08 03 xx xx xx xx xx xx xx 内容
·
·
·
1CECxxxx 0x08 13 xx xx xx xx ?? ?? ?? 结束应答
注释:xx为数据包个数,??为参数组编号(PGN)。
BRM的PGN:000200H;
BCM的PGN:000600H;
BCS的PGN:001100H。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
+220V
就地
远方
远方位置 置检修态
调度远方遥控
开
关
遥合/可检同期
或
调
档
机பைடு நூலகம்
遥分
构
遥控选择
遥控返校
远
动
遥控执行
机
通讯状态
分闸!
遥控选择
调
遥控返校
度
主
遥控执行
站
5.7 遥控过程报文帧
101遥控报文解析1
11主站→68 0F 0F 68 73 01 67 01 06 01 00 00 FA 27 05 0A 11 02 05 2B 16 ;主站下传对时命令。秒和毫秒的计算--FA 27 (10234):毫秒=234;秒=10;分钟=05;小时=0A(10时);日 =11(17日);月=02;年05=2000+5=2005年。 子站←68 0F 0F 68 80 01 67 01 07 01 00 00 FA 27 05 0A 11 02 05 39 16 ;有的子站用E5确认。 12主站→10 5B 01 5C 16 ;主站召唤2级数据。 子站←E5 ;无请求的数据。背景扫描及分组召唤周期未到,子站没有事 件变位发生。 13主站→68 09 09 68 73 01 2E 01 06 01 01 61 81 8D 16 ;主站下 达双点遥控选择命令,根据发送接收信息表,地址6101对应B线开关, 信息体81代表选择控开。 子站←10 A0 01 A1 16 ;保持链路通畅,子站进行遥控选择判断。
104遥测报文实例报文解析1
2.遥测变化量报文 68 04 43 00 00 00 接收报文: 68 04 83 00 00 00 接收报文: 68 04 83 00 00 00 发送报文: 68 04 43 00 00 00 接收报文: 68 04 83 00 00 00 发送报文: 68 1e 00 00 00 00 15 04 03 00 02 00 01 07 00 40 06 02 07 00 40 06 03 07 00 80 0c 04 07 00 80 0c 接收报文: 68 04 83 00 00 00 发送报文: 68 04 43 00 00 00
《细则》规定,在总召中遥测量(2级)以1级数据的方 式返回,可能会给RTU方造成一定困难,需要单独为总召命令设 计一个函数。
101遥测报文实例解析2
9主站→10 7A 01 7B 16 ; 子站←68 09 09 68 88 01 64 01 0A 01 00 00 14 F9 16 ;总召唤结 束,下面将进入循环、背景扫描、分组召唤数据的正常传输过程中。 10主站→10 5B 01 5C 16 ;主站召唤2级数据。 子站←68 0E 0E 68 88 01 09 02 01 01 02 40 50 08 00 04 40 D3 7A C2 16 ;根据发送接收信息表,4002-(首地址)4001+1=(本报 文第一个信息体的顺序地址)2,即为B线无功,其码值为0850=二进制 0000 1000 0101 0000(十进制2128)。归一化值转换成十进制方法 是:最高位为符号位,第2位*2-1+第3位*2-2+…+第16位*2-15。由 此得出B线无功归一化值(1*2-4+1*2-9+1*2-11)=0.06494:由于 工程量最大值为12.47MW(同有功,它对应归一化满值1),转换后的 实际值为:0.06494*12.47= 0.81Mvar。相对比,十进制计算方法为 2128*12.47/ 32767=0.81Mvar,二进制计算方法与十进制计算方法 是相同的,后者更人性化一些。同理,4004对应B线A相电压,码值为 7AD3=十进制31443,工程量最大值为1.1*10000=11kV,转换后的 实际值为:31443*11/32767=10.56kV。传送原因COT=01是周期 循环数据标识,说明数据正常循环传输开始。
104遥测报文实例报文解析2
68 04 43 00 00 00 接收报文: 68 04 83 00 00 00 发送报文: 68 04 43 00 00 00 发送报文: 68 22 0a 00 04 00 0d 03 03 00 02 00 01 07 00 9a 99 19 40 00 02 07 00 9a 99 99 3f 00 03 07 00 cc cc 4c 3f 00 接收报文: 68 04 83 00 00 00 发送报文: 68 04 43 00 00 00 接收报文: 68 04 83 00 00 00
遥测信号的表示方法
遥测信号的ASDU
101遥测报文实例解析1
8主站→10 5A 01 5B 16 ; 子站←68 17 17 68 A8 01 09 85 14 01 01 40 5c 4A 00 F0 08 00 58 4B 00 03 7B 00 00 40 00 8C 16 ;返回遥测值 (控制字09)。信息体5个,公用起始地址4001,每个信息体共 3个字节,前两个字节为遥测值(低前高后传送,高字节首位是 符号位),第三个字节为品质描述(正常00、溢出01、被替换 20、无效80,也要求RTU执行101规约标准)。根据信息表的接 收发送顺序B线有功码值为4a5c=十进制19036,由于报文的正 满码值为215-1=16*1024=32767(归一化值0.99999…,可 视为1),对应工程量最大值=1.2*1.732* 10000*600=12.47MW(放大系数1.2),所以转换后的实际 值为:19036*12.47/32767= 7.244MW。其它遥侧量以十进 制方式进行计算的方法相同。
101遥控报文解析2
14主站→10 5A 01 5B 16 ; 子站←68 09 09 68 88 01 2E 01 07 01 01 61 81 A3 16 ;选择命令 确认。 15主站→10 7B 01 7C 16 ;主站召唤2级数据。遥控过程中数据刷新不 能停止。 子站←68 0B 0B 68 88 01 09 01 02 01 05 40 00 4C 00 27 16 ;传 送原因02是背景扫描数据标识,它的传送周期较长10分钟。地址40054001+1=5对应主变油温,其工程量最大值100,码值4C00=十进制 19456,实际值=19456*100/32767=59.38度。 16主站→68 09 09 68 53 01 2E 01 06 01 01 61 01 ED 16 ;主站下 达B线开关控开执行命令。信息体01表示执行。 子站←10 A0 01 A1 16 ;子站进行遥控执行准备。 17主站→10 7A 01 7B 16 ; 子站←68 09 09 68 88 01 2E 01 07 01 01 61 01 22 16 ;执行命令 确认。