尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

IEC-101报文解析:帧格式、ASDU结构与调试实战指南

IEC-101报文解析:帧格式、ASDU结构与调试实战指南 简介电力远动通信是变电站自动化与调度主站之间的信息桥梁而IEC-101作为国际电工委员会制定的远动配套标准定义了串口链路上数据交换的帧格式与传输规则。理解其固定帧长与可变帧长结构掌握控制域、校验和及ASDU各字段含义是进行电力监控系统调试和规约转换开发的必备基础。该协议广泛应用于变电站远动装置、RTU与调度端之间的遥信、遥测、遥控及SOE事件上报场景具有极强的工程实践价值。本文从链路层帧结构切入逐步拆解应用层ASDU组成并结合总召唤、变位上报、遥控选择执行等典型报文流程梳理常见调试问题与排查思路为从事电力远动、变电站自动化及规约调试的工程师提供一份可直接落地的参考指南。 刚接触电力远动的人十有八九会被IEC-101报文里那一串十六进制字节搞得头疼。明明是一堆0x68、0x53、0x64开头的数据却要从中读出断路器位置、遥测值、遥控命令甚至还要判断是哪台设备、哪个间隔、什么时间发生的。这篇文章就把电力系统IEC-101报文里最常用的帧格式、ASDU结构、典型流程和调试经验一次性讲清楚适合变电站自动化调试人员、电力监控系统工程师、规约转换开发者和刚入行的远动新人参考。1. 先搞清楚IEC-101在电力系统里扮演什么角色1.1 从一次设备到调度主站IEC-101解决什么问题IEC-101是IEC 60870-5-101标准的简称全称是“基本远动任务配套标准”专门用于电力系统调度自动化中的远动通信。你可以把它理解成变电站和调度主站之间的“普通话”——站内的测控装置、保护装置、RTU把断路器位置、刀闸状态、电流电压、有功无功、电度量等数据通过串口通道或者网络透传方式送到调度端同时接收调度下发的遥控、遥调命令。这个协议对应的是IEC/OSI七层模型中的增强性能体系结构EPA只包含物理层、链路层和应用层。实际工程中物理层大多是串口RS-232/RS-485或者通过光纤Modem转换波特率常用9600bps数据位8位偶校验1位停止位。链路层采用IEC 60870-5-1规定的FT1.2帧格式应用层就是ASDU应用服务数据单元。这套组合虽然看起来“老”但在电力系统里极其稳定可靠至今仍是国内绝大多数地调、县调与变电站之间的主力通信方式之一。1.2 非平衡式传输一问一答的通信模型IEC-101有两种传输模式平衡式和非平衡式。国内变电站到调度主站的场景绝大多数采用非平衡式传输也就是“主站问、子站答”。主站是链路层的主站端子站是从站端只有主站可以主动发起链路请求从站只能被动响应。这样做的好处是避免多个子站同时抢占总线造成冲突尤其适合一对多的串口轮询场景。调试时可以记住这个特点如果主站不发任何帧从站是绝对不会主动上送数据的。很多刚接触的人把串口线接上、打开调试工具发现没有任何报文以为是设备坏了其实是因为主站还没发起总召唤或链路请求。这个模型理解透了后续所有报文流程都能顺下来。1.3 帧格式选择固定帧长与可变帧长的区别FT1.2帧格式一共有三种形式单个字符E5H、固定帧长帧、可变帧长帧。单个字符E5H用于从站确认主站召唤链路状态时的“无数据可发”响应固定帧长帧以10H开头常用于链路控制命令和确认可变帧长帧以68H开头用于承载带ASDU的业务数据。简记就是链路层控制用固定帧长业务数据传输用可变帧长。后面两节分别拆开讲。2. 两类帧结构解析IEC-101报文的底层基础2.1 固定帧长10H——短小精悍的链路控制固定帧长帧的结构如下字段字节数说明启动字符1固定10H控制域1包含传输方向、请求/响应标志、功能码链路地址1或2子站地址常见为2字节低字节在前帧校验和1控制域与链路地址字节的算术和取低8位结束字符1固定16H以主站复位链路命令为例如果链路地址为2字节报文是10 07 00 00 07 16其中10H是启动字符07H是控制域00 00是链路地址07H是校验和0700000716H是结束字符。从站收到后回确认10 00 00 00 00 16控制域从站回00H表示链路确认功能码为0。这组报文是IEC-101链路建立的第一个握手动作串口调试工具里每天都能看到它们刷屏。2.2 可变帧长68H——承载业务数据的载体可变帧长帧在固定帧长的基础上增加了长度字段和ASDU区结构如下字段字节数说明启动字符1固定68H长度L1从控制域开始到ASDU结束的字节数长度L重复1与L相同控制域1同上链路地址1或2子站地址ASDUL-控制域-地址长度应用服务数据单元帧校验和1控制域、链路地址、ASDU字节的算术和结束字符1固定16H长度字段最大的意义是让接收方知道“还要收多少个字节才能凑成一帧”接收方按长度收完数据后先校验和再解析ASDU。实际抓包时如果发现长度L和实际ASDU长度对不上大概率是链路层错位或者程序拼接缓存出了问题。2.3 控制域里藏着哪些状态位控制域是IEC-101链路层最容易看晕的地方但其实拆成位来看并不复杂。主站向从站发送时控制域高位置1从站向主站响应时高位置0。以主站发送总召唤的常见控制域53H为例二进制是0101 0011拆分如下PRM位1表示这是主站发往从站的帧FCB位1帧计数位FCV位1帧计数有效位功能码3表示“向从站发送数据”从站响应的控制域通常是08HPRM0、ACD0、DFC0、功能码8表示“以数据响应请求”。如果从站有1级用户数据等待上送会把ACD位置1主站看到ACD1后会额外发送召唤1级数据的请求。这个机制是IEC-101非平衡方式下从站主动上送变位信息的关键后面讲遥信变位时还会涉及。2.4 校验和必须会算IEC-101的帧校验和CS计算方式很简单从控制域开始到ASDU最后一个字节为止所有字节做二进制算术累加只保留低8位。固定帧长帧则是控制域加链路地址的累加。调试时可以自己手算一遍验证比如固定帧长帧10 07 00 00 07 1607000007校验和就是07H可变帧长帧里要把ASDU所有字节也加进去。很多排查到最后发现是设备间校验算法不一致其实基本都是对“校验范围”理解不同并不是算法本身有差异。3. ASDU应用层报文内容的核心拆解3.1 ASDU八个字段的构成ASDU是整个IEC-101报文里真正承载业务含义的部分结构固定如下类型标识TI1字节说明这条报文是遥信、遥测、遥控还是其他功能可变结构限定词VSQ1字节说明信息对象的个数和信息元素的排列方式传送原因COT2字节说明这是激活、确认、突发还是周期上传公共地址1或2字节通常是站地址或装置地址信息对象地址IOA3字节常用定位到具体间隔和测点信息元素集具体的数据值、状态、时标等时标可选7字节毫秒、分钟、小时、日期等一个典型的单点遥信ASDU长这样01 01 06 00 01 00 01 00 00 01拆开看就是类型标识01H表示单点遥信VSQ01H表示1个信息对象传送原因06H 00H表示激活公共地址01H 00H表示装置地址1信息对象地址01H 00H 00H表示第1个测点信息元素01H表示开关状态为合。3.2 常用类型标识TI速查类型标识含义典型用途01H单点遥信断路器、刀闸位置02H单点遥信带时标SOE事件记录03H双点遥信双位置开关状态09H测量值归一化值遥测数据2DH单点命令遥控选择2EH单点命令遥控执行64H总召唤主站请求全数据67H时钟同步对时命令调试时最常打交道的就是总召唤64H、单点遥控2DH/2EH、单点遥信01H、SOE 02H。看到类型标识基本就知道这条报文是干什么的。3.3 传送原因COT和可变结构限定词VSQ怎么读传送原因也是2字节低字节表示具体原因高字节一般为0。常见值06H激活主站下发命令07H激活确认从站确认收到命令08H停止激活09H停止激活确认0AH激活终止14H响应总召唤03H突发从站主动上送变位举个实际场景主站下总召唤时COT06H从站回确认时COT07H随后从站把全站遥信遥测数据上送COT14H响应总召唤或0AH。如果你发现从站响应总召唤时COT用了07H而不是14H说明从站可能把确认和数据混在一起了数据完整性会受影响。VSQ是单字节bit7表示信息元素的排列方式0表示顺序排列1表示信息对象地址连续递增只给首地址。低7位表示信息对象个数。比如VSQ81H表示“地址连续共1个对象”不对81H的bit71、低7位1表示地址连续、共2个对象这里要注意低7位是实际个数81H低7位是1所以共1个对象但因为bit71表示后续信息元素地址连续递增。之所以要设置这个字段是为了压缩报文长度——遥测批量上送时如果地址连续只需给首地址后面依次排列数据即可不用每个对象都带完整3字节地址。4. 实战报文从十六进制还原业务场景4.1 链路建立与总召唤流程站端设备上电后主站和从站的第一件事是建立链路。整个过程是固定的“四步握手”第一步主站发送复位链路命令。常见的固定帧长报文10 07 00 00 07 16第二步从站回复确认10 00 00 00 00 16第三步主站发送总召唤请求。这是一个可变帧长报文68 0D 0D 53 00 00 64 01 06 00 01 00 01 00 00 00 00 C0 16逐字节拆开68H是启动符0DH是长度控制域1字节链路地址2字节ASDU 10字节13字节即0DH53H是控制域00 00是链路地址64H是总召唤类型标识01H是VSQ06H 00H是传送原因“激活”01H 00H是公共地址01H 00H 00H是信息对象地址00H是总召唤限定词QOIQOI00H表示全数据召唤。第四步从站先回激活确认然后开始上送遥信、遥测数据。确认报文一般是10 00 00 00 00 16后续数据报文则以68H开头类型标识可能是01H遥信、09H遥测等传送原因通常为14H。这里有个容易踩的坑总召唤的ASDU里信息对象地址一般用01 00 00H但有些老设备用00 00 00H主站侧如果对IOA做了严格过滤会漏掉这批数据。我在现场遇到过好几次最后都是把主站的点表起始地址改成和从站一致才解决。4.2 遥信变位SOE报文怎么看遥信变位是变电站最重要的实时信号比如断路器跳闸、保护动作。当从站检测到开关量变化时会生成带时标的SOE报文。非平衡方式下从站不能随便主动发数据它会把ACD位置1主站轮询到该站时发现ACD1就会发“召唤1级数据”请求从站再把SOE报文上送。一个单点遥信SOE报文字节流大致是68 12 12 08 00 00 02 01 03 00 01 00 01 00 00 00 01 00 00 00 00 00 16关键字段拆解TI02H单点遥信带时标VSQ01H1个对象COT03H 00H突发公共地址01H 00HIOA01H 00H 00H信息元素01H变位后状态为合后面7字节是时标包含毫秒、分钟、小时、日、月、年等。SOE报文的时标是现场追事故的关键调试时要把主站和从站的时钟先对好。如果发现SOE时间比实际时间慢了几分钟基本可以断定是时钟同步没做或对时周期太长。IEC-101的时钟同步命令类型标识是67H主站下发的对时报文里携带标准时间从站收到后据此校准自身RTC。4.3 遥控选择与执行最应该小心的报文遥控是调度员在远方直接控制断路器分合闸的操作一旦报文出错可能造成误动所以IEC-101采用“选择-执行”两步机制。第一步主站下发遥控选择命令TI2DH。选择合闸的报文中信息元素S/E位置1SCS位置1常见字节为81H。完整报文类似68 0C 0C 53 00 00 2D 01 06 00 01 00 01 00 00 00 81 16第二步从站收到选择命令后校验遥控点号和控制性质如果合法则回激活确认TI2DH、COT07H信息元素原样返回。此时主站确认选择成功再下发遥控执行命令TI2EH信息元素S/E位清0SCS保持原值常见字节为01H。第三步从站收到执行命令后再次校验然后驱动出口继电器动作完成后回执行确认TI2EH、COT07H。整个过程中最容易出的问题是选择确认和执行确认的COT都写成06H激活而不是07H激活确认。这在标准里是明确不允许的因为06H表示新激活07H才是对已接收激活的确认很多规约检测工具会直接判错。另外遥控对象地址、命令性质必须和点表严格对应。我曾经遇到一个变电站调度端下拉的遥控点号和站内实际IOA错位一个点结果选择命令下到了相邻间隔幸亏现场有防误闭锁逻辑没有实际出口。从那以后我每次调遥控前都会先用测试工具逐个点做选择测试确认IOA映射无误后再上真值。4.4 时钟同步与对时时钟同步命令是主站定期下发的广播式报文TI67HASDU中包含7字节的标准时标。变电站内所有从站收到后用这个时间校准自己的RTC。对时周期一般设置为1分钟或5分钟太短了增加总线负担太长了SOE时标误差会变大。对时报文的公共地址一般是全站广播地址比如公共地址FFH FFH或者用01H 00H再配合全站广播标志。调试时可以通过修改从站本地时间后等待一个对时周期观察从站的时间是否被“拉回来”。如果对时后时间反而跳变异常优先检查主站时钟源GPS/北斗对时装置是否正常再看ASDU里时标字段的字节序有没有搞反。5. 调试中的常见坑与排查思路5.1 链路建立不了先查物理层IEC-101通信不上第一反应不要直接抓报文先按“物理层→链路层→应用层”的顺序排查。物理层最常出问题的几个点RS-232的收发线接反表现为完全收不到任何数据RS-485的A/B线接反或者未共地表现为波形异常、偶发乱码波特率、校验位、停止位和主站侧不一致表现为抓到帧但校验和全错光纤Modem的收发纤接反或光衰过大表现为时通时断现场最快的方法是用串口调试助手在两个方向分别自发自收测试排除线路问题后再接设备抓报文。链路层的标志就是能不能看到10H开头的固定帧长帧和对应的确认帧。如果只看得到主站下发帧而从站永远没响应绝大多数是物理层或从站地址配置问题。5.2 报文能通但数据不刷新如果链路已经建立主站总召唤也发出去了但遥测遥信不刷新或刷新不全常见原因有三类。第一类是公共地址不匹配。IEC-101里主站和从站的公共地址必须一致但链路地址和公共地址是两个概念链路地址是链路层的路由地址公共地址是应用层的站地址。两个都对应同一台设备但程序里分开处理调试时容易漏改其中一个。第二类是VSQ解析错误。有的从站上送多组数据时VSQ置1表示地址连续如果主站侧把这个标志忽略把后续每个信息元素都当成独立IOA数据就全错位了。排查方法是抓一条完整的批量遥测报文按VSQ规则手算一遍地址对比主站收到的点号。第三类是总召唤响应不完整。有些从站把总召唤的数据分成多帧上送每帧的COT都是14H主站如果只处理了第一帧就结束后面的数据全部丢失。主站程序需要根据VSQ和对象计数判断是否收齐不要以帧数判断。5.3 遥控失败的原因遥控失败一般分两个层面报文层失败和出口层失败。报文层失败的表现是主站发出选择命令后从站不回确认或回错误确认。这时抓报文看COT是否为07H、信息元素是否原样返回如果从站返回的TI不同或者COT变成0AH激活终止说明从站内部校验没通过。常见原因包括遥控点号不在允许列表、SCS状态和当前设备状态不一致、防抖时间设置过长、遥控压板未投入。出口层失败表现为报文交互完全正常选择确认、执行确认都回了但断路器没有动作。这种情况优先检查从站装置的遥控出口继电器、操作回路和机构箱电源。报文层没有问题问题就在二次回路上。我的习惯是调试时先用万用表在装置出口端子测量是否有脉冲输出判断是装置没出口还是回路断了。5.4 抓包工具与报文记录技巧IEC-101是串口协议调试工具选择比较灵活。工程上常用的有串口调试助手加十六进制显示适合快速看报文支持脚本的串口工具可以用于模拟主站或从站规约分析仪适合复杂故障定位能自动解析ASDU并提示校验错误我的习惯是调试前先配置好两套工具一套挂在串口上实时监视主站和从站之间的报文另一套在从站侧用调试软件查看站内规约处理和出口日志。两边对照能快速定位问题是出在通信过程还是站内逻辑。报文记录时建议打上时间戳至少精确到毫秒。排查SOE时标不对、偶发通信中断等间歇性问题时时间戳的作用非常大。我在现场调试时会把抓到的原始报文直接保存成txt或csv再用脚本批量解析成可读的点表格式效率比肉眼逐帧看高得多。5.5 一个完整的现场调试参考流程最后整理一个我自己常用的调试流程供参考确认串口参数9600bps、偶校验、8数据位、1停止位按工程实际用串口调试助手自发自收确认物理链路正常接上设备观察是否有10H开头的链路帧交互查看复位链路和总召唤完整交互流程是否正常核对主站和从站的链路地址、公共地址是否一致召唤全数据检查遥信遥测点数量和地址映射做单点遥控选择测试验证IOA和命令性质核对SOE时标与主站时钟差必要时调整对时周期连续运行24小时以上观察丢帧率和周期性异常这套流程走下来绝大多数IEC-101通信问题都能定位。我做远动调试这些年最深的体会是IEC-101协议本身并不复杂复杂的是现场环境——老旧设备的私有实现差异、点表不一致、时钟偏差、串口干扰每一个都可能让两套“标准”设备对不上话。调试时多一点耐心先看物理层再看协议层把报文逐字节拆开核对问题往往很快就能浮出水面。遇到实在啃不动的场景拿一条正常报文和一条异常报文做逐字节对比是最有效的手段。本文还有配套的精品资源点击获取
返回列表