大话IEC104 规约

2. iec104 协议的帧结构

大话IEC104 规约_第1张图片
iec104 基于TCP/IP 传输,是一个应用层协议, 其帧结构被称为 APDU,APDU 一般由 APCI 和 ASDU组成。

2.1 APDU (Application Protocol Data Unit)

APDU 被称为应用协议数据单元,也就是一个iec104 的协议帧的官方叫法。一个APDU(也就是协议帧),可以只包含一个ACPI, 或者 一个ACPI + ASDU。

APDU = APCI 
or
APDU = APCI + ASDU

APDU 的最大长度为255byte。

2.2 ACPI (Application Protocol Control Information)

ACPI(应用控制信息,类似于帧头),由一个1byte 的起始字节0x68 + 1 byte ADPU 的长度 + 4 个1 byte控制位域(CF)组成。详细如下图所示。
大话IEC104 规约_第2张图片
APCI 中第一个控制位域(CF1)的最低2bit,确定了帧的格式,iec104 定义了3种格式的帧。其如下图所示:
大话IEC104 规约_第3张图片

  • I-format (information transfer format), last bit of CF0 是0
    • 它用于控制RTU(server, slave) 和 类SCADA(master, client)之间的信息传输,其位可变长度。
    • I-format 的数据帧(APDU)总是包含ASDU。
    • I-format 的控制位域表明了消息的方向,其包含了两个15bit 的序号数字,每个方向上,每个APDU的序号数字都会被有序的加1。并且在0~32767之间循环。
      • 发送器在发送一个iFrame后,会将发送端的发送序号自动加1,同时将该iFrame保存在发送缓冲区中, 直到它接受到一个ADPU,该APDU中接收序号表明接收到发送端发送的对应发送序号&以下的iFrame,这些iFrame会被从发送缓冲区移除。
      • 接受器接收到一个iFrame后,会将接收端的接收序号自动加1,当接收序号到达设定的数量后,会给发送端回应一个sFrame 的Ack。如果在一定的时间内,接收端接收的iFrame 未到达该设定的数量,接收端也会发送一个sFrame的Ack。如果接收端在一定的时间内都处于idle状态,且存在没有回应的iFrame, 接收端就会给其回应一个sFrame的Ack。
      • TCP 连接建立后,发送/接收序号应当被置0;
    • 发送/接收序号由CF位域由LSB 和MSB 构成,I-Format的帧序号只有15bit, 如下图所示:
      大话IEC104 规约_第4张图片
  • S-format (numbered supervisory functions), last bits of CF1 是 01
  • 一般作为一个/多个iFrame的Ack , 固定APDU 长度
  • S-format APDU 只有APCI, 没有ASDU。
  • 在iFrame只是单向情况下, S-format的APDUs 必须被发送出去,当相应的iFrame 超时,溢出,或者到达IFrame 接收的最大允许数量。
  • U-format (unnumbered control functions), last bits of CF2 是 11
    • 被用于有序的控制功能, 固定APDU 长度

    • U-format 的APDU只有一个APCI,没有ASDU。其功能包括TESTFR
      (测试帧), STOPDT (停止数据传输) or STARTDT (开启数据传输,它们可以同时被激活。其CF1的二进制值,如下图所示:
      大话IEC104 规约_第5张图片

    • uFrame 用于STARTDT(开启数据传输),STOPDT(关闭数据传输)和TESTFR(测试帧)的激活&确认机制。

    • STARTDT和STOPDT 用于client(master,也称控制站点)去控制Server(Slave,也称被控制站点)去开启/关闭数据传输
      当连接建立时,用户数据传输是没有被使能的(默认是处于STOPDT状态的),在这种状态下,客户端通过这个连接是不能发送仍何用户数据的(uFrame是可以发送的)。客户端必须发送一个**STARTDT 激活(STARTDT activate)指令去激活用户数据的传输,服务器端将会回应一个STARTDT 确认(STARTDT confirm)**消息。如果没有收到该确认消息,client将会关闭此连接。

      只有client才可以发送STARTDT 激活指令。当连接建立好后,client 才可以向server 发送STARTDT激活指令,该指令只能被发送一次。激活后,该连接才可以在仍何时间发送仍何消息, 直到连接被STOPDT激活指令终止。

    • client & server必须周期性地发送TESTFR帧,去检测所有连接的连接状态,和通信问题等.

      client & server必须周期性地发送**TESTFR 激活(TESTFR activate)指令,对应的TESTFR确认(TESTFR confirm)**帧必须被回应。

      在一定的时间内,连接没有数据传输时,client/server 就可以启动这个测试进程。

你可能感兴趣的:(工业协议,armlinux,云计算,网络,服务器,运维,网络协议,linux)