大家好,又见面了,我是你们的朋友全栈君。
最近在写104规约的解析暂时做一个笔记,先写一个遥信的后期再补全
规约解析表如下:
104规约解析 | |||||||||||||||
启动字符 | 1字节 | 取值 | 68H | APCI应用规约控制信息 | APDU应用规约数据单元 | ||||||||||
APDU长度 | 1字节 | 取值 | 最大,253 | ||||||||||||
控制域 | 4字节 | I格式控制域标志 (编号的信息传输格式) (包含ASDU) |
位 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | ||||
控制域八位位组1 | 发送序列号N(S) | 0 | |||||||||||||
控制域八位位组2 | 发送序列号N(S) | ||||||||||||||
控制域八位位组3 | 接收序列号N(R) | 0 | |||||||||||||
控制域八位位组4 | 接收序列号N(R) | ||||||||||||||
S格式控制域标志 (编号的监视功能格式) (不包含ASDU) |
位 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | ||||||
控制域八位位组1 | 0 | 1 | |||||||||||||
控制域八位位组2 | 0 | ||||||||||||||
控制域八位位组3 | 接收序列号N(R) | 0 | |||||||||||||
控制域八位位组4 | 接收序列号N® | ||||||||||||||
U格式控制域标志 (不编号的控制功能格式) (不包含ASDU) (同一时刻TESTFR、STOPDT、STARTDT中只能有一个功能可以被激活) |
位 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | ||||||
控制域八位位组1 | TESTFR | STOPDT | STARTDT | 1 | 1 | ||||||||||
确认 | 命令 | 确认 | 命令 | 确认 | 命令 | ||||||||||
控制域八位位组2 | 0 | ||||||||||||||
控制域八位位组3 | 0 | ||||||||||||||
控制域八位位组4 | 0 | ||||||||||||||
类型标识TI | 1字节 | 取值 | 10进制 | 16进制 | 意义 | 类别 | ASDU应用服务数据单元 | ||||||||
1 | 0x01 | 单点信息(遥信) | 监视方向的过程信息 | ||||||||||||
3 | 0x03 | 双点信息 (遥信) | |||||||||||||
9 | 0x09 | 测量值,归一化值(遥测)* | |||||||||||||
11 | 0x0B | 测量值,标度化值(遥测) | |||||||||||||
13 | 0x0D | 测量值,短浮点数(遥测) | |||||||||||||
30 | 0x1E | 带CP56Time2a时标的单点信息(遥信带时标) | |||||||||||||
31 | 0x1F | 带CP56Time2a时标的双点信息(遥信带时标) | |||||||||||||
45 | 0x2D | 单命令(遥控) | 遥控 | ||||||||||||
46 | 0x2E | 双命令(遥控) | |||||||||||||
102 | 0x66 | 读单个参数命令(参数设置) | 参数设置 | ||||||||||||
132 | 0x84 | 读多个参数命令(参数设置) | |||||||||||||
48 | 0x30 | 预置/激活单个参数命令(参数设置) | |||||||||||||
136 | 0x88 | 预置/激活多个参数命令(参数设置) | |||||||||||||
70 | 0x46 | 初始化结束 | 系统命令 初始化结束 | ||||||||||||
100 | 0x64 | 召唤命令 | 系统命令 总召唤 | ||||||||||||
103 | 0x67 | 时钟同步/读取命令 | 系统命令 时钟同步 | ||||||||||||
105 | 0x69 | 复位进程命令 | 系统命令 复位进程 | ||||||||||||
可变结构限定词 | 1字节 | 位 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |||||
取值方法 | &0x80 | &0x7F | |||||||||||||
符号表示 | SQ | number | |||||||||||||
意义 | 地址连续性 | 应用服务数据单元信息元素(单个信息元素或同类信息元素组合)的数目 | |||||||||||||
值及功能 | 0.地址不连续 1.地址连续 |
<0>∶=应用服务数据单元不含信息对象;<1..127>∶=应用服务数据单元信息元素的数目 | |||||||||||||
传输原因 | 2字节 | 位 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |||||
取值及含义 | T(test)
0.未试验 1.试验 | P/N
0.肯定确认 1.否定确认 | 0 | 0x00 | 未用 | ||||||||||
1 | 0x01 | 周期、循环 (遥测) | |||||||||||||
2 | 0x02 | 背景扫描(遥信)(遥测) | |||||||||||||
3 | 0x03 | 突发(自发) (遥信)(遥测) | |||||||||||||
4 | 0x04 | 初始化完成 | |||||||||||||
5 | 0x05 | 请求或者被请求(遥信被请求)(遥测被请求) | |||||||||||||
6 | 0x06 | 激活(激活)(遥控、参数设置 控制方向) | |||||||||||||
7 | 0x07 | 激活确认(激活确认)(遥控、参数设置 监视方向) | |||||||||||||
8 | 0x08 | 停止激活 (遥控、参数设置 控制方向) | |||||||||||||
9 | 0x09 | 停止激活确认(遥控、参数设置 监视方向) | |||||||||||||
10 | 0x0a | 激活终止 (遥控 监视方向) | |||||||||||||
13 | 0x0d | 文件传输 | |||||||||||||
20 | 0x14 | 响应站召唤(总召唤)(遥信响应总召唤)(遥测响应总召唤) | |||||||||||||
44 | 0x2c | 未知的类型标识(遥控、参数设置 监视方向) | |||||||||||||
45 | 0x2d | 未知的传送原因(遥控、参数设置 监视方向) | |||||||||||||
46 | 0x2e | 未知的应用服务数据单元公共地址(遥控、参数设置 监视方向) | |||||||||||||
47 | 0x2f | 未知的信息对象地址(遥控、参数设置 监视方向) | |||||||||||||
48 | 0x30 | 遥控执行软压板状态错误 | |||||||||||||
49 | 0x31 | 遥控执行时间戳错误 | |||||||||||||
50 | 0x32 | 遥控执行数字签名认证错误 | |||||||||||||
应用服务数据单元公共地址 | 2字节 | 是一个系统参数,每一个配电终端对应唯一的一个值 | |||||||||||||
信息对象地址 (单个或多个) | 3字节 | 位 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |||||
地址表示 | 7位 | 0位 | |||||||||||||
15位 | 8位 | ||||||||||||||
23位 | 16位 | ||||||||||||||
描述 | 信息对象地址位三个字节(总召唤,信息地址为0)(时钟同步,信息地址为0)(复位进程地址为0)(初始化地址为0) | ||||||||||||||
信息元素 (可能是单个 或多个 信息元素) | 1字节 | 位 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |||||
单点遥信 | 0.有效 1.无效 | 0.当前值 1.非当前值 | 0.未被取代 1.被取代 | 0.未被闭锁 1.被闭锁 | 备用 | 备用 | 备用 | 0.开关分 1.开关合 | |||||||
双点遥信 | 0.有效 1.无效 | 0.当前值 1.非当前值 | 0.未被取代 1.被取代 | 0.未被闭锁 1.被闭锁 | 备用 | 备用 | 0.不确定或中间状态 1.确定开关分 2.确定开关合 3.不确定 | ||||||||
遥控 单命令 | 0.遥控执行命令 1.遥控选择命令 | 备用 | 备用 | 备用 | 备用 | 备用 | 备用 | 0.开关分 1.开关合 | |||||||
遥控 双命令 | 0.遥控执行命令 1.遥控选择命令 | 备用 | 备用 | 备用 | 备用 | 备用 | 0.不允许,有错误 1.开关分 2.开关合 3.不允许,有错误 | ||||||||
2字节 | 遥测 | 链路层传输顺序为低位在前,高位在后;低字节在前,高字节在后。如:69 01应该是01 69,即二进制0000 0001 0110 1001,转换成10进制是361 | |||||||||||||
参数设置 4字节 | 读取单个参数 | 在控制方向:空,在监视方向:返回参数(信息值为4个字节) | |||||||||||||
读取多个参数 | 在控制方向:空,在监视方向:返回参数(信息值1为4个字节,信息值n为4个字节) | ||||||||||||||
预置/激活单个参数 | 在控制方向:参数值,在监视方向:返回参数镜像(信息值为4个字节),后缀设定命令限定词1字节 | ||||||||||||||
预置/激活多个参数 | 在控制方向:参数值,在监视方向:返回参数镜像(信息值1为4个字节,信息值n为4个字节),后缀设定命令限定词1字节 | ||||||||||||||
描述 | 总召唤无此项,时钟同步无此项,复位进程无此项,初始化结束无此项, | ||||||||||||||
限定词 | 1字节 | 总召唤限定词 | 20 | ||||||||||||
复位进程限定词 | 1 | ||||||||||||||
初始化原因 | 0.当地电源合上,1.当地手动复位,2.远方复位 | ||||||||||||||
品质描述词(遥测) | 0(每个信息元素后缀1个字节) | ||||||||||||||
设置命令限定词 (参数预置) | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |||||||
S/E | QL | ||||||||||||||
1:选择预置参数 0:执行激活参数 | 0:缺省值 | ||||||||||||||
描述 | 时钟同步无此项,遥信无此项,遥控无此项, | ||||||||||||||
时标CP56Time2a | 7字节 | 位 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |||||
第1字节 | 毫秒(低8位) | ||||||||||||||
第2字节 | 毫秒(高8位) | ||||||||||||||
第3字节 | 0 | 0 | 分钟(0~59) | ||||||||||||
第4字节 | 0 | 0 | 0 | 小时(0~23) | |||||||||||
第5字节 | 星期(1~7) | 日(0~31) | |||||||||||||
第6字节 | 0 | 0 | 0 | 0 | 月(1~12) | ||||||||||
第7字节 | 0 | 年(0~99) | |||||||||||||
描述 | 时钟同步带时标、总召唤无时标、进程复位无时标、初始化结束无时标、参数设置无时标 |
遥信的解析例子:68 0E 0A 00 10 00 01 01 03 00 01 00 01 00 00 01(单点遥信),注意下面的所有运行 都需要把值转为10进制再进行运行比如(0A & 0x03–>11&0x03)
分析如下:
第一个字节68:起始符(固定的就是这个,转换成10进制就是104)
第二个字节0E: 报文长度(表示0E 后面的字节一共有多少个字节 即0A 到最后01一共14个字节,0E的十进制即为14)
第三个字节到第六个字节:都是控制域值 分三种
I帧是信息帧,作用是用于传输具体的通信数据的 长度必大于6个字节。
* S帧是用于确认接收的I帧,即当接收到I帧后需要返回一个S帧 长度等于6个字节。
* U帧是控制帧,用于控制启动/停止子站进行数据传输,或测试TCP链路连接,长度等于6个字
把第一控制域的值和 16进制的03进行与运算(0A & 0x03) 是1代表S格式, 3代表U格式,其余就是I格式
第七个字节 01 是类型标识符:对应上面的表 就是单点遥信类型 十进制值为1
第八个字节01 是可变结构限定词:这里可得出两个值,对应上面表
sq值:01 & 0x80的结果 如果为128 就是信息元素地址是顺序的,sq值设置为1。如果为0,sq值等于0 信息元素地址非顺序的
元素个数:01 & 0x7F 表示信息元素的个数。
第九个字节03到第十个字节00:表示传输原因,对应上表得出以下几个值:
注意:这里03带入计算表示第九个字节为03
T(test): 03&0x80 值为128 为已实验 ,值为0 表示未实验
PN值:03 & 0x40 值为64 为否定确认,值为0肯定确认
原因值:03 & 0x3F (对应上面的表,计算的值表示对应的原因)
第十一字节01到第十二字节00:表示应用服务数据单元公共地址 计算规则是 第十二字节在前第十一字节在后拼成 十六进制的格式:0001 然后计算出这个数的十进制值
第十三字节01到第十五字节00:表示信息对象地址 00 << 16 + 00<<8 + 01计算规则:第十五字节 << 16 + 第十四字节 << 8 +第十三字节 (记住字节转为十进制再计算)
第十六字节01:表示信息元素的值 这里一般会有多个或者一个
源码:https://github.com/wangtingsong/iec104_wts
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/151378.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...