折腾:
【整理】Java版本的104协议解析
期间,去先参考别人的代码
的
去尝试解析,104协议,收到的示例的二进制数据。
EB90EB90(端口号:21站0)[2020/1/6 18:18:58] 发送: 68 04 07 00 00 00 EB90EB90(端口号:21站5)[2020/1/6 18:19:07] 接收: 68 12 E6 B7 00 00 0F 81 05 00 05 00 01 0C 00 95 42 03 00 00
中的:
68 12 E6 B7 00 00 0F 81 05 00 05 00 01 0C 00 95 42 03 00 00
看看能否运行起来上述java代码,从数据中解析出要的内容。
去下载代码:
➜ java git clone https://github.com/mujave/iec_analysis.git Cloning into 'iec_analysis'... remote: Enumerating objects: 57, done. remote: Counting objects: 100% (57/57), done. remote: Compressing objects: 100% (38/38), done. remote: Total 226 (delta 17), reused 21 (delta 3), pack-reused 169 Receiving objects: 100% (226/226), 1.80 MiB | 15.00 KiB/s, done. Resolving deltas: 100% (69/69), done.
然后想要去调试java代码。
记得之前IntelliJ IDEA是可以的,但是貌似太重了。
还是希望可以用VSCode,所以去试试:
【未解决】Mac中用VSCode调试java代码
然后继续调试:
再按2次跳出:
然后继续 单步进入
然后从字符解析出 int数组:
然后进入asdu的解析:
刚才解析出code=100,是:
CALL_COMMAND(100, "召唤命令"),
以及:6是激活:
抽空去:
【未解决】VSCode中调试java报错:Build failed do you want to continue
然后继续调试代码
*APCI应用规约控制信息* 启动字符[1 byte]: 0x68 应用规约数据单元(APDU)长度[2 byte]:14字节 控制域[3 byte - 6 byte]: (I格式控制域标志) 发送序列号:0 接受序列号:1 *ASDU应用服务数据单元* 类属性标识符[7 byte]:召唤命令 可变结构限定词[8 byte]:可变结构限定词:0x01 SQ=0 信息元素地址非顺序 信息元素个数:1 传送原因[9 byte - 10 byte]:[T(test) bit7:0 未实验][P/N bit6:0 肯定确认][原因 bit5~bit0:激活] 应用服务数据单元公共地址[11 byte - 12 byte]:0001H 信息对象地址:0(000000H) 召唤限定词QOI:20
然后自己去把之前示例数据,多弄几个过来,看看能否都可以正常解析
然后先去:
【已解决】java中实现字符串数组
再去实现:
【已解决】java中for循环从字符串数组中获取单个字符串
不过接着要去:
【已解决】java代码println报错:The method println(String) in the type PrintStream is not applicable for the arguments (String, String)
继续写代码。
结果:
【已解决】java解析104数据出错异常:未知类型标识符 at com.iec.analysis.common.TypeIdentifier.getDescribe TypeIdentifier.java
然后又出现其他错误:
【已解决】java的com.iec.analysis.解析104出错:类型标识出错,无法解析信息对象
然后再去:
【部分解决】VSCode中System.out输出的内容不方便选择和全部复制
当然对于log的话,最好还是使用专门的log库。
所以去找找java的好用的log库:
【已解决】java中好用的log日志的库
另外顺带记录:
抽空好好看看。
转载请注明:在路上 » 【已解决】用Java代码解析104协议收到的数据