本文转载自CSDN 作者:姚家湾
PART 1
背景资料
EcoStruxure Automation Expert的三层架构
施耐德电气的EcoStruxure Automation Expert(简称为EAE),是一个自动化平台,他们称之为软件为中心的工业自动化。EAE具有三层架构。从底层的PLC,变频器,传感器到边缘控制的软件dPAC,到顶层的应用,分析和服务。
EcoStruxure Automation Expert基本组成
软件dPAC 的特性
EcoStruxure Automation Expert软件dPAC是先进的多平台IEC61499为基础的控制运行时,它包括:
●基于事件,网络透明的自动化能力
●原生过程告警支持
●modbus/TCP客户端和服务器
●OPC UA服务器
●Ethernet/IP(在v20.2中支持有限平台
EcoStruxure Automation Expert软件dPAC在一个标准PC上使能一个开放,灵活,可扩展,高度集成IEC61499运行时。从低成本的嵌入式系统到高性能IT服务器。
运行时在工业边缘提供了集成和运行先进IT工具,程序库和应用的开放平台。这是通过TCP/UDP socket和直接链接DLL库的方式实现的。
这个公共运行时集成硬件解决方案,比如Altivar 变频器,Modicon M251 dPAC,Modicon M580 dPAC,加上linux系统上基于容器的虚拟软件运行时。
EcoStruxure Automation Expert的Linux软件dPAC兼容实时Linux内核,并且支持每台机器上多个运行时同时运行,它们通过modbus/TCP和Ethernet/IP通信。
软件dPAC 的运行环境
由此可见,Linux下的运行时有两个版本:
●X86-64版本是Intel X86下的版本
●Arm HF版本是32位Arm版本。arm hf arm hard float的简写。
这就意味着Soft dPAC不仅能够在Intel X86计算机上运行,也可以在Arm嵌入式平台上运行,比如树莓PI4,RK3399,H6等Arm板上运行。
Soft dPAC要求在docker容器中运行。施耐德电气提供的是一个docker容器的image。直接可以在docker中安装成为容器运行。
这是一件令人兴奋的事情,我们可以在各种边缘计算机上部署Soft dPAC,甚至可以将它们部署在云端。和其它微服务协同操作。构建一个开发性系统。
构建边缘计算架构
有了docker版本的Soft dPAC,就可以将它部署到边缘服务器上面,并且与docker容器中的其它微服务协同操作。下面是一个典型的架构图:
前面提到,Soft dPAC提供了3种方式与外部程序交互
●动态库DLL直接调用
●modbus TCP
●TCP/UDP方式。
docker容器中程序以微服务的方式运行,所有的微服务通过一个统一的消息系统实现消息交换。比如RabbitMQ,MQTT等。为此,我们要设计一个Soft Gateway程序将Soft dPAC TCP传输的数据转换成微服务消息,通过message bus信息交换。在这里我们选择简单MQTT作为消息总线。
PART 2
测试过程
安装-解压
解压出EAE V20.2后有一个文件,这就是Linux版本Soft dPAC的压缩包:
tar zxvf ./softdpac.tar
安装image
sudo python3 install.py
启动容器运行
按照文档中的提示是运行startSoftdPAC.sh
sudo sh startSoftdPAC.sh
--ipbase 192.168.31.95
--itname enp1s0
--image-name softdpac:x86-v20.2-20315-1064
--nbcontainer 1
不过具体过程中发现docker的端口51499没有暴露除了来,直接使用物理端口IP地址也不是很好。可以使用docker的方式直接安装。我采用portainer 基于web的容器管理工具。
PART 3
modbus/TCP 通信
在EAE中,有一个Modbus Software Gateway,可以实现与外部modbus TCP server的通信。这就可以连接第三方的远程IO模块,也可以连接其它的应用程序。
在EAE中,modbus是作为硬件功能块来实现的。需要在device List窗口中,指定设备击右键选择 HW Configuration.
出现下面窗口,选择 Standard.IoModbus.MODBUS.
于是在HW Configuration中出现MODBUS项目。
下一步,在MODBUS端口添加设备,在MODBUS 下击右键,出现下面窗口。选择MODBUSGENTCPS。
添加的MODBUSGENTCPS相当于Slave MODBUS设备。它内部的读写寄存器在一个XML 中定义。比如modbusmap.xml。如下面所示
最后还需要添加一个Standard.IoModbus.MODBUSSLAVEND.(不要忘记,我就是忘了,一直搞不通)
该文件可以存储在Project文件夹中。下一步指向MODBUSGENTCPS1击右键,选择Modbus Gateway。弹出一个文件选择窗口。选择 modbusmap.xml.
经过上面一系列添加之后,HW Configuration是这样的:
我们还需要设置上面窗口中所有项目的属性(property),它们包括:
MODBUS,
MODBUSGENTCPS1,
VAL_OUT1_MODBUSGENTCPS1
VAL_OUT2_MODBUSGENTCPS1
VAL_IN1_MODBUSGENTCPS1
VAL_IN2_MODBUSGENTCPS1
下面是相关项目的属性窗口。
MODBUS属性
MODBUSGENTCPS1属性
VAL_OUT1_MODBUSGENTCPS1 /VAL_OUT2_MODBUSGENTCPS1属性
VAL_IN1_MODBUSGENTCPS1 /VAL_IN2_MODBUSGENTCPS1的属性
要反复检查,不要遗留。要不然也搞不定。
设置完成后,点击HW Configuration边上的Mapping,这时切换到RES窗口,发现在里面添加了两个功能块MODBUSGENTCPS MBRead和MODBUSGENTCPS MBWrite.你可以添加连线如下图。
GO语言编写了一个简单的modbus server
PART 4
TCP/UDP 通信
modbusTCP协议比较适合soft dPAC连接远程IO模块,而TCP/UDP更适合于软件交换数据。EAE 有一个NETIO功能块提供给用户建立特定的TCP,UDP通信。这个功能块意义非凡,使用户可以实现与非EAE程序的通信。
下面是一个简单的例子:
ENDPOINT设置外部应用的协议类型和IP地址,端口。在EAE的文档中解释有点凌乱。我设置为 TCP Client模式,在9200端口接收数据,在与Soft dPAC同一台主机上向9201发送数据。
'TCP:9200;127.0.0.1:9201'
外部的测试程序采用GO 语言编写,代码如下:
运行的结果如下:
PART 5
一个简单的软件网关(Soft Gateway)
Soft dPAC只是提供了一个简单的TCP,UDP和modbusTCP通信机制。为了实现Soft dPAC与容器中的其它微服务通信。需要设计一个软件网关,将TCP数据转化成为微服务的消息总线协议。为了简单演示,我们实现了一个TCP/MQTT的软件网关(Soft Gateway),它采用Go语言编写。
MQTT代理使用开源Eclipse Mosquitto。
(未完成,敬请期待吧!)