IEC 104协议一次发送大量I帧数据

一、IEC协议结构

第一个字节:启动字符68H,十进制为104(正好代表104规约),二进制为:0110 1000。
第二个字节:APDU长度,注意APDU长度并不包括1字节的启动字符和1字节的APDU长度本身,而由于只有1字节代表数据长度,其最大值为255(2^8 - 1),所以最大值为255 - 2 = 253,又由于APCI除了这两个字节外还包括了4个字节的控制域(1~4),那么剩下的ASDU(可选的应用服务数据单元)长度为253 - 4 = 249字节。
正是由于ASDU的长度限制,所以一帧104 I格式报文能传送的数据信息是有限的。而不同数据类型占用的字节长度可能不一样,所以一帧报文能发送的最大IOA数量也不一样,下面就拿遥信和遥测分析。

二、遥信和遥测

根据104调度规约,基地址取值范围:

遥信:1H------4000H                ----->对应十进制  1-----16384

遥测:4001H------5000H          ----->对应十进制  16386----20480

        假设某次总召唤需要上传的数据将遥信和遥测的地址都占满了,也就是需要发送20480组数据响应总召唤!这么多的数据即使是TCP层也不可能一包全部发完,必须要分包发送。

遥信

01———不带时标的单点遥信,每个遥信占1个字节

03———不带时标的双点遥信,每个遥信占1个字节

14———具有状态变位检出的成组单点遥信,每个字节8个遥信

遥测

09———带品质描述的测量值,每个遥测值占3个字节

0a———带3个字节时标的且具有品质描述的测量值,每个遥测值占6个字节

0b———不带时标的标度化值,每个遥测值占3个字节

0c———带3个时标的标度化值,每个遥测值占6个字节

0d———带品质描述的浮点值,每个遥测值占5个字节

0e———带3个字节时标且具有品质描述的浮点值,每个遥测值占8个字节

15———不带品质描述的遥测值,每个遥测值占2个字节

        根据104调度规约,遥信数据最短为一个字节(当类型为01),如果ASDU里遥信数据全部占满的话能发249组遥信数据,然而并不是,首先ASDU字段里还有Type,VSQ,COT等要占用字节数,更重要的是VSQ代表信息体的数量,也就相当于VSQ限制了信息体的个数,而且VSQ只占一个字节,最大值为127(最高位为是否连续标志),因此发送一包包含遥信的帧最多只能发送127组数据,16384/127=129.007,超过了129也就是需要130包数据帧才能发送完成。

遥测数据最短为2个字节(当类型为15),如果取VSQ最大值的话,2*127=254>249,所以比遥信组数要少,(249-1-2-2-3-1)/2=120,所以发送一包包含遥测的帧最多只能发送120组数据,4096/120=34.13,也就是需要35包数据帧才能发送完所有遥测数据。

因此所有遥信包+遥测包=130+35=165包I帧报文。

三、IEC 104参数设置

k和w参数

        104规约规定了两个参数K和W,其取值为1到32767,其中K表示发送方在有K个I格式报文未得到对方的确认时,将停止数据发送;W表示接收方最迟在接收W个I格式报文后应发出认可。104规约规定K和W的默认值分别为12个APDU和8个APDU,推荐关系式为w<k*2/3。
  在实际中,K和W的具体取值可以根据TCP连接双方的数据通信量加以确定。对于从站RTU来说,每收到一个调度端的I格式报文都应立即响应,其W的取值实际上为1,由于RTU端可以循环向主站发送遥信、遥测等信息,因此K的取值与其循环发送的定时周期有关,通常12到20个APDU就足够了;对于主站端,由于不停接收RTU数据,因此应及时地给以确认,通常W取小于8个APDU的值。

t0、t1、t2、t3参数
  当未确认I格式APDU达到K个时,发送方停止发送。如果t1超时仍未收到确认,则重启链路。
为了能对TCP连接进行检查和维护,104规定了几个超时时间:t0、t1、t2、t3。它们的取值范围为1~255s,准确度为1s。
  t0规定了主站和从站建立一次TCP连接的最大允许时间,即主站端一直发出连接请求,在t0时间内得不到连接建立成功的状态下,要向应用层提示,说明无法建立连接,一般可设置进行多次连接,当每次连接都超过t0无法建立成功时都应给出提示。默认值30s。
  t1规定发送一个I格式报文或U格式报文后,必须在t1的时间内得到接收方的认可,否则发送方认为TCP连接出现问题并应重新建立连接。这个过程是双向的,即对于厂站端和主站端当这个过程任一方发生时,两方的连接都需关闭,重新建立连接。默认值15s。
  t2规定接收方在接收到I格式报文后,若经过t2时间未再发送新的I格式报文,则必须向发送方发送S格式帧对已经收到的I格式报文进行认可,显然t2必须小于t1。默认值10s。
  t3规定主站或从站每接收一个I,S,U报文将重新触发计时器t3,若再t3内未能接收到任何报文,将向对方发送测试链路报文(U帧)。发送测试帧后,若在t1时间内没有收到测试确认,则连接关闭,若达到t3时间,则再次发送测试链路报文(U帧)。默认值20s。

        当网速较好的情况下发送多包数据时,t0、t1、t2、t3的默认值都能满足,而k和w参数的默认值当要满足发送165包情况是远远不够的,根据w<k*2/3的关系,可修改为k=180,w=120。当然这里只考虑发送地址连续而且数据是最短的理想情况,在实际中如果地址不连续或数据类型占用数据多几个字节,k和w数值可适当的调大些。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值