IEC 60870-5-104使用示例

EMQX 企业版技术支持发表于:2022年08月16日 11:22:59更新于:2022年08月17日 14:03:39

IEC60870 -5-104规约简介

     IEC60870-5-104实际上是将IEC60870-5-101与TCP/IP提供的网络传输功能相组合,使得IEC60870-5-101在TCP/IP内各种网络类型都可使用,在5层ISO参考模型中,IEC60870-5-104实际上处于应用层协议的位置;基于TCP/IP的应用层协议很多,每一种应用层协议都对应着一个网络端口号,根据其在传输层上使用的是TCP协议(传输控制协议)还是UDP协议(用户数据报文协议),端口号又分为TCP端口号和UDP端口号,其中TCP协议是一种面向连接的协议,为用户提供可靠的、全双工的字节流服务,具有确认、流控制、多路复用和同步等功能,适用于数据传输,而UDP协议则是无连接的,每个分组都携带完整的目的地址,各分组在系统中独立地从数据源走到终点,它不保证数据的可靠传输,也不提供重新排列次序或重新请求功能,为了保证可靠地传输远动数据,IEC60870-5-104规定传输层使用的是TCP协议,因此其对应的端口号是TCP端口。IEC60870-5-104规定本标准使用的端口号为2404,并且此端口号已经得到IANA(互联网地址分配机构,Internet Assigned Numbers Authority)的确认。对于基于TCP的应用程序来说,存在两种工作模式,即服务器模式和客户机模式。服务器模式和客户机模式的区别是,在建立TCP连接时,服务器从不主动发起连接请求,它一直处于侦听状态,当侦听到来自客户机的连接请求后,则接受此请求,由此建立一个TCP连接,服务器和客户机就可以通过这个虚拟的通信链路进行数据的收发。IEC60870-5-104规定控制站(即调度系统)作为客户机,而被控站(即站端RTU)作为服务器。 IEC 60870-5-104规定一个APDU报文由应用规约控制信息(APCI)和应用服务数据单元(ASDU)组成,和IEC-60870-5-101的帧结构相比,其中应用服务数据单元(ASDU)是相同的,相异之处在于,IEC-60870-5-104使用应用规约控制信息(APCI),而IEC-60870-5-101使用链路规约控制信息(LPCI)。在APDU中,启动字符68H定义了数据流内的起始点,应用规约数据单元的长度定义了APDU主体的长度;IEC 60870-5-104规定一个APDU报文(包括启动字符和长度标识)不能超过255个字节,因此APDU最大长度为253(等于255减去启动和长度标识共两个字节),ASDU的最大长度为249,这个要求限制了一个APDU报文最多能发送121个不带品质描述的归一化测量值或243个不带时标的单点遥信信息,若RTU采集的信息量超过此数目,则必须分成多个APDU进行发送。

下载IEC 104模拟器

IEC 104模拟器示例---链接

运行IEC 104模拟器(在拥有java环境下)

java -jar IECServer.jar

运行该程序会弹出一个GUI页面

  • 选择IEC 60870-5-104 类型 ID,不同类型对应的数据类型也是不同的,这里默认选用M_SP_NA对应数据类型为bit,详细数据类型对应参照如下:

    地址格式

    IEC 60870-5-104 类型 ID数据类型
    M_ME_NB_1、M_ME_TE_1uint16/int16
    M_ME_NC_1、M_ME_TF_1float
    M_SP_NA_1、M_SP_TB_1bit
    M_ME_NA_1、M_ME_TD_1、M_ME_ND_1uint16/int16

    image.png

  • 创建点位,点击箭头所指Add添加,然后可以看到其中IOB一列代表的是点位的地址,当然也可以通过左上角load功能导入已经准备好的点位表,自己手动创建的也可通过save功能保存

    image.png

  • 开启服务器,从图中可以看到有一个StartServer和StopServer按钮,分别对应启停服务器,在启动服务器可以看到下方黑色框里打印出一条日志表示已经成功启动服务器,监听的端口为2404

    image.png

  • neuron连接模拟器,通过下方trace日志可以看到打印了一条已连接的日志,同时切换到Clients也显示了有一个客户端连接成功

    image.png

    image.png

  • 发送数据,点击红色框里Send发送数据,就能通过neuron采集到数据信息

    image.png

安装Neuron(以docker运行为例)

## 获取 Docker 镜像
docker pull neugates/neuron:2.1.2

## 启动 Docker 容器
docker run -d --name neuron -p 7000:7000 -p 7001:7001 -p 9081:9081 --privileged=true --restart=always neugates/neuron:2.1.2

Neuron南向配置

创建南向设备

image-20220803104024859.png?lastModify=1660617115.png

新增设备,选择协议类型

image.png

确认创建,点击设备配置

image.png

填写相应配置信息,点击提交按钮

image.png

单击该设备面板,进入Group列表,点击创建填写group名称及采集频率为多少ms,完成创建

image.png

点击上图箭头所指图标,进入tag列表创建tag,添加tag填写tag相应信息,完成创建

image.png

点位创建成功后,开启刚创建好的南向设备,可以看到该设备工作状态以及连接状态都处于正常运行中

image.png

切换到数据监控页面,选择刚创建的南向设备和group名称,便可以看到点位对应的值

image.png

Neuron北向配置

创建北向应用

image-20220803110753394.png?lastModify=1660617115.png

点击添加应用,填写名称,选择协议类型,完成创建

image-20220803111241209.png

点击北向emqx面板上应用配置

image-20220803111433843.png

填写北向配置信息,点击提交,开启该北向应用,可以看到工作状态及连接状态都处于正常运行中

image-20220803111830544.png

单击emqx面板进入Group列表,选择添加订阅,选择需要订阅的南向设备及group,点击提交按钮

image-20220816105047949.png

验证

验证北向应用是否连接到EMQX

可以看到北向设置的clientid为neuron的客户端已经连接到EMQX

image-20220816105130494.png

验证北向所订阅南向设备点位数据是否接收成功

这里通过MQTTX去连接一个客户端到EMQX并且订阅南向设备上报数据topic为neuron/neuron/upload,可以看到成功接收到南向设备上报的点位数据信息,如图:

image-20220816105323971.png

至此,IEC 104协议模拟测试完成。



    您需要登录后才可以回复