电力系统104规约帧报文解析

电力系统104规约帧报文解析最近被调到电力物联网的项目组,之前一直在做移动终端的我现在在这个项目中得要重新学起了。。~_~!1.电力系统常见概念首先介绍一份ppt:https://wenku.baidu.com/view/557ceb87be23482fb5da4c84.html看着挺好。。。这边文章主要是解释一些电力系统开发中比较常见的概念,也是给自己做个笔记~~~~~~电力系统远动(powersys…

大家好,又见面了,我是你们的朋友全栈君。

最近被调到电力物联网的项目组,之前一直在做移动终端的我现在在这个项目中得要重新学起了。。~_~!

1.电力系统常见概念

首先介绍一份ppt:https://wenku.baidu.com/view/557ceb87be23482fb5da4c84.html

看着挺好。。。

这边文章主要是解释一些电力系统开发中比较常见的概念,也是给自己做个笔记~~~~~~

电力系统远动(power system telemechanics):为电力系统调度服务的远距离监测、控制技术,即管理和监控分布甚广的众多厂、所、站和设备、元器件的运行工况的一种技术手段。

一般来说,电力系统远动终端RTU(Remote Terminal Unit)具有”四遥”等功能。”四遥”主要指的是 遥测、遥控、遥调、遥信四种。其实从”遥”字面意思上我们也可以看到这注定是一个远程远距离的操控了。

遥测:远程测量。采集并传送运行参数,包括各种电气量(线路上的电压、电流、功率等量值) 和负荷潮流等。

遥控:远程控制。接受并执行遥控命令,主要是分合闸,对远程的一些开关控制设备进行远程控制。 

遥信:远程信号。采集并传送各种保护告警和开关量信息。

遥调:远程调节。接受并执行遥调命令,对远程的控制量设备进行远程调试,如调节发电机输出功率。

一摇:遥信
二遥:遥信和遥测
三遥:遥信、遥测和遥控

2.104规约使用场景

电力系统中常见的设备分为 调度端(控制站、主站、客户机) , 服务端(被控站、子站,典型设备包含TTU、RTU等),两者之间通过104规约来进行数据通信与传输。其传输层实际上使用的是TCP协议进行数据的传输。固定端口号为2404。

服务端不主动发起请求,一直处于侦听状态,当侦听到来自客户机的连接请求后,则接受此请求,由此建立一个TCP链接。控制站(即调度系统)作为客户机,被控站(即站端RTU)作为服务器。

即实际的代码操作为:

主站按照 Socket()->Connect()的顺序进行

RTU(服务器)端按Socket()->Bind()->Listen()->Accept()的顺序进行。

这里我找到一份代码工程,该代码中包含服务端和客户端的VC6.0的源码工程,可以在VC6.0上打开这两个工程,编译两份工程生成主站和子站的带界面的exe文件,可以调试代码,非常方便,可以尝试着边看代码边调试边梳理104的具体流程。

链接:https://pan.baidu.com/s/1Q00O3vfeNKueGri7Bqp0OA      提取码:kj4m 

3.帧报文

这里首先提出一个可用于解析104报文的软件,我们可以直接将一条完整的报文贴到该软件中,就可以看到该帧报文所表示的内容含义了。可以直接在搜索引擎上搜索   IEC8705(报文翻译工具).exe 即可。

104规约帧报文分为三大类( I帧、S帧、U帧)

I帧是信息帧,作用是用于传输具体的通信数据的,长度必大于6个字节。

S帧是用于确认接收的I帧,即当接收到I帧后需要返回一个S帧,长度等于6个字节。

U帧是控制帧,用于控制启动/停止子站进行数据传输,或测试TCP链路连接,长度等于6个字节。

帧报文的格式如下所示:

电力系统104规约帧报文解析

帧报文实际例子:

1.遥信信息(I格式)

序列号信息连续的单点信息(单点信息包含一个字节)

serversend:

68 1c 00 00 00 00 01 8f 14 00 33 00 01 02 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01

1c表示长度为28个字节,从 00000000~~~010001,ASDU长度一共28个字节

报文类型为01,表示该帧报文为单点信息(遥信)

结构限定词为8f(1000 1111),表示数据为连续数值,数量为15,最后面的灰色部分010001~~~010001,共15个字节

原因为 1400==>0014===>20,该帧报文原因为响应站召唤

ASDU公共地址为3300==>0033==>51,站址为51

010200(信息体起始地址)==> 0201H.

个数据:index = 0201H value=01H&0x01 = 1   一与01H对应

个数据:index = 0202H value=00H&0x01 = 0   二与00H对应

个数据:index = 0203H value=01H&0x01 = 1   三与01H对应

………..

十五个数据:index = 020fH value=01H&0x01 = 1 十五与01H对应

0x01表示为单点遥信,如果是双点遥信,则是数据与0x11做与操作。

2.遥测信息(I格式)

遥测信息采用短整型或短浮点型数据进行传送。短整型数据会占据两个字节。

帧报文类型标识为 

0x09:带品质描述(品质描述会占一个字节)的测量值,所以每一个测量值总共占三个字节

0x0a:上述0x09类型另加3个字节时标,一共占6个字节

0x0d:由四个字节的数据值和一个字节的质量位组成,共 五个字节

序列号不连续:

serversend:

68 1c 00 00 00 00 09 03 03 00 33 00 08 07 00 14 00 01 0f 07 00 5a 00 00 13 07 00 82 00 00

 

09表示带品质描述的测量值

03表示数值不连续,数量为3,不连续的话则说明后面DATA部分都会自带一个数据的地址(地址占三个字节)

0300==>0003==>3 原因为突发

3300==>0033==>51 ,ASDU公共地址为51

3个遥测数据:

     addr: 080700==>0708H   value:14 00 ==>0014H==>20 quality = 01

     addr: 0f0700==>070fH   value:5a 00 ==>005aH==>90 quality = 00

     addr: 130700==>0713H   value:82 00 ==>0082H==>130 quality = 00

3.报文中的时标信息

.. .. 0f 07 00 5a 00 00 13 07 00 82 00 16 23 32 10 13 05 08

报文前面的部分这里就不关注,主要看后面的时标部分,一般帧报文中时标信息都是放在报文最后面,且时标一般占7个字节,每一个字节里面的排序为bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0,一般来说bit7都是备用位,值为0。

时标部分每一个字节按照上面的排序表示的含义

毫秒低八位 毫秒高八位 分 时 日 月 年

年:备用(bit7),年(bit6~bit0)

月:备用(bit7~bit4),月(bit3~bit0)

日:星期(bit7~bit5),日(bit4~bit0)

时:夏时制位(bit7),备用(bit6~bit5),小时(bit4~bit0)

分:无效位(bit7),备用(bit6),分钟(bit5~bit0)

毫秒: 低八位 高八位==>高八位 低八位 ==> 组合成毫秒===> xx.xxx秒

根据上面的规则,前面报文的时标表示的时间为:08年5月19日16时50分8秒982毫秒  

4.超时时间

t0:连接建立的超时 =30s

规定了主站端和子站RTU端建立一次TCP连接的最大允许时间

t1:发送或测试APDU的超时 =15s

规定发送方发送一个I格式报文或U格式报文后,必须在t1的时间内得到接收方的认可

t2:无数据报文t2<t1时确认的超时 =10s

规定接收方在接收到I格式报文后,若经过t2时间未再收到新的I格式报文,必须向接收方发送S格式帧对已经接收到的I格式帧进行认可

t3:长期空闲t3>t1状态下发送测试帧的超时 =20s

规定调度端或子站RTU端每接收一帧I帧、S帧或者U帧将重新触发计时器t3,若在t3内未接收到任何报文,将向对方发送测试链路帧TESTFR

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/151399.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • header中Content-Disposition的作用

    header中Content-Disposition的作用

  • java用户态和内核态「建议收藏」

    java用户态和内核态「建议收藏」在&lt;深入理解java虚拟机&gt;这本书上多次看到用户态和内核态两个名词,虽然大概能明白意思.但对于两者具体的定义和区别还是比较,特此查阅之后记录.内核态(KernelMode)与用户态(UserMode)内核态:CPU可以访问内存所有数据,包括外围设备,例如硬盘,网卡.CPU也可以将自己从一个程序切换到另一个程序用户态:只能受限的访问内存,且不允许访问外…

  • C++和Java有哪些区别

    C++和Java有哪些区别1.C++创建对象后需要在使用结束后调用delete方法将其销毁,Java有垃圾回收机制,用来监视new出来的所有对象,辨别不会再被引用的对象,然后释放内存空间2.C++可以重载操作符,Java不能重载3.当变量作为类的成员使用时,Java才确保给定默认值,以确保那些基本类型的成员变量得到初始化,但是C++没有此功能4.C++有多继承,Java只有单继承5.Java中没有sizeof(),在C++中sizeof()操作符能够告诉我们为数据项分配的字节数,因为C++中不同的数据类型在不同的机器上可能有

  • stm32 nvic配置

    stm32 nvic配置STM32有43个channel的settable的中断源;AIRC(ApplicationInterruptandResetRegister)寄存器中有用于指定优先级的4bits。这4个bits用于分配preemption优先级和sub优先级,在STM32的固件库中定义如下/*PreemptionPriorityGroup————————–

  • nginx代理tcp协议_tcp怎么加密传输

    nginx代理tcp协议_tcp怎么加密传输NGINX实现TCP加密代理

  • 电脑锁屏时钟屏保_翻页时钟怎么设置在手机锁屏

    电脑锁屏时钟屏保_翻页时钟怎么设置在手机锁屏资源链接fliqlo说明:1、简约朴素的电脑屏保,锁屏后呈现翻页时钟效果;2、支持window、mac;效果…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号