zoukankan      html  css  js  c++  java
  • IEC 104公约 解析 c#使用通过104公约同步时间

    1. 104公约概况

    使用tcp协议通信,标准tcp端口号是2404。服务端模拟软件可以使用gitbub上一个模拟器(IEC60870-5-104ServerSimulator.exe)。

    2. 104公约数据结构

    APCI------------------ Application Protocol Control Information   控制信息

    ASDU -----------------------Application Service Data Unit  服务数据单元

    APDU -----------------Application Protocol Data Unit  规约数据单元

      说明   字节长度  
    APCI 起始字 68H 1字节 APDU
    APDU长度

    最大253

    长度=报文总长度-2

    1字节
    控制域1

    控制域,保护报文不丢失、不重复。

    控制报文开始与停止、连接监视

    1字节
    控制域2 1字节
    控制域3 1字节
    控制域4 1字节
    ASDU 类型标识    1字节
    可变结构限定词    1字节
    传输原因   2字节
    公共地址   2字节
    信息体 ...... ......

     

    I帧:编号的信息传输帧,包含APCI和ASDU。控制域1的    bit1=0    表示I帧

    S帧:编号监视帧。               控制域1的   bit1=1 ,bit2=0表示S帧,只包含APCI

    U帧:未编号的控制帧。            控制域1的    bit1=1, bit2=1表示U帧,只包含APCI

    3. U帧、控制功能帧

    U帧包括启动、停止、测试帧。控制域1的第一个bit=1,第二个bit=1定义了U帧。

    启动帧:用于启动应用层传输

    停止帧:用于停止应用层传输

    测试帧:元数据传输时候,用于维持链路活动状态。

    U帧只跟【控制域1】有关,不需要记表格,用的时候查就行了。

    控制域1: 字节位7 字节位6 字节位5 字节位4 字节位3 字节位2 字节位1 字节位0 说明 对应控制域1的字节值 固定命令
      表示是测试帧Test 表示是停止帧 表示是开始帧          
      C V C V C V 1 1 V生效、C确认    
      0 0 0 0 0 1 1 1 启动生效 0x07 68 04 07 00 00 00
      0 0 0 0 1 0 1 1 启动确认 0x0B 68 04 0B 00 00 00
      0 0 0 1 0 0 1 1 终止生效 0x13 68 04 13 00 00 00
      0 0 1 0 0 0 1 1 终止确认 0x23 68 04 23 00 00 00
      0 1 0 0 0 0 1 1 测试生效 0x43 68 04 43 00 00 00
      1 0 0 0 0 0 1 1 测试确认 0x83 68 04 83 00 00 00

     

    4. I帧、信息传输帧

    控制域1的比特1=0定义了I格式。I格式的APDU包含ASDU。

      比特7 比特6 比特5 比特4 比特3 比特2 比特1 比特0
    控制域1 发送序号S(低位) 0
    控制域2 发送序号S(高位)
    控制域3 接收序号R(低位) 0
    控制域4 接收序号(高位)

    其中,高位有8bit,低位有7bit。比如发送序列号1000,转换成2进制是 0000 0011   1110   1000 ,因为序列号是由7+8bit组成的,所以高位就是0000 0011,低位就是110 1000

    发送一个I帧报文,发送序列号+1,

    接收一个I报文,接收序列号+1.

    TCP重连后,调度主站和子站的接收序号和发送序号都要清零。

    5.S帧、确认帧

    控制域1的第一个bit1=1,第二个bit2=0定义了S帧。

      比特7 比特6 比特5 比特4 比特3 比特2 比特1 比特0
    控制域1 0 0 1
    控制域2 0
    控制域3 接收序列号R(低位) 0
    控制域4 接收序列号R(高位)

    6.ASDU类型标识

     

     7.报文分析举例

    拿时钟同步报文举例:

    字节序号: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
    值(16进制): 68 14 8e 00 6c f9 67 01 06 00 00 00 00 00 00 d8 02 00 0c 4a 01 0c
          控制域 类型标识 结构限定词 传送原因 公共地址 对象地址 毫秒 分钟 小时 星期|日期
    说明:

    十进制104

    表示是104公约

    长度=20

    1000 1110

    最后bit=0是I帧

          时钟同步 1指有序 06=激活 0 0 2*0xff+d8 0 12 2|10 1

    (20)12

    8.发送接收的步骤

     服务端,【收到的发送号】<【自己的接收号】------------报文重复

     服务端,【收到的发送号】>【自己的接受号】----------------报文丢失

    不管丢失还是重复,服务端需要断开连接重连。

    k---默认值12,未被确认的I格式的最大数,适用于服务端,达到k指停止发文

    w---默认值8,最迟收到w个I格式后必须确认。

    t0 ----------默认30s--------建立连接超时---------客户端

    t1-----------默认15秒-------发送或测试报文超时-----------服务端

    t2-----------默认10秒------无报文时候,确认超时------客户端

    t3--------默认20秒----------长期空闲,发测试帧超时----------双方

    9.调试工具的使用

    第一步:打开程序

     第二步、点击addServer:

    第三步,加载配置:

     第四步,启动服务:

    这时候就可以通过客户端连接了。

    10.c#代码下载

    此代码实现了,从104公约报文里获取时间的功能。其中有了【发送序列号、接收序列号的计数功能】、模拟了发送U帧、S帧、I帧的功能。模拟了解析数据并以友好中文显示功能。

    效果如下:

    源码地址:

    https://files.cnblogs.com/files/chlm/2020-4-26-104%E5%85%AC%E7%BA%A6%E8%A7%A3%E6%9E%90%E6%B5%8B%E8%AF%95.rar

    调试工具可以从github上下载,也可以:

    https://files.cnblogs.com/files/chlm/IEC60870-5-104ServerSimulator.rar

  • 相关阅读:
    python os模块 常用命令
    将excel表格中的数据导入到SQL中
    临时数据表DataTable selected方法的使用
    ASP.NET数据库使用精典读取数据库中数据
    新兵开唱
    DropDownList控件的changed事件调用
    C# 读取Excel表格中的数据
    C# 强制类型转换示例
    用ADO.NET的ExecuteScalar方法返回单一值
    CentOS 6.3 桥接上网
  • 原文地址:https://www.cnblogs.com/congqiandehoulai/p/12781909.html
Copyright © 2011-2022 走看看