施耐德开放自动化平台初体验(3)

2023-11-04 07:20

本文主要是介绍施耐德开放自动化平台初体验(3),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

施耐德EAE 之所以称为开放自动化,其中一个重要的特征就是它提供了软件运行时(Soft dPAC)。而且不仅提供了Windows 版本的Soft dPAC,还提供Linux版本的运行时,Linux版本运行时实现了容器化(docker),在Alpine OS 环境的容器中运行。并且分别支持X86 处理器和Arm hf 处理器。这意味着软件dPAC 既可以在X86 linux 上运行,也可以在大多数Arm 计算设备上运行,比如树莓PI,瑞芯微RK3399 或者全志H6,NXP i.mx 系列产品。这是令人兴奋的事情。为第三方自动化软硬件提供了一个入口。

另一方面,Soft dAPC 还提供了Modbus TCP和TCP/UDP 方式和其它应用程序交换数据。

       本文介绍Linux 操作系统下的Soft dPAC 的安装,使用,以及通过modbus TCP和TCP/UDP 与外部程序交换数据。

背景资料

EcoStruxure Automation Expert的三层架构

施耐德的EcoStruxure Automation Expert(简称为 EAE),是一个自动化平台,他们称之为软件为中心的工业自动化。EAE具有三层架构。从底层的PLC,变频器,传感器到边缘控制的软件dPAC ,到顶层的应用,分析和服务。

 EcoStruxure Automation Expert基本组成

软件dPAC 的特性

EcoStruxure Automation Expert软件dPAC 是先进的多平台 IEC61499 为基础的控制运行时,它包括:

  1. 基于事件,网络透明的自动化能力
  2. 原生过程告警支持
  3. modbus/TCP 客户端和服务器
  4. OPC UA 服务器
  5. 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 下的运行时有两个版本:

  1.   X86-64 版本是 Intel X86 下的版本
  2.   Arm HF 版本 是 32 位Arm 版本。arm hf arm hard float 的简写。

这就意味着Soft dPAC 不仅能够在Intel X86 计算机上运行,也可以在Arm 嵌入式平台上运行,比如树莓PI 4,RK3399 ,H6 等Arm 板上运行。

Soft dPAC 要求在docker 容器中运行。施耐德提供的是一个docker 容器的image。直接可以在docker 中安装成为容器运行。

这是一件令人兴奋的事情,我们可以在各种边缘计算机上部署Soft dPAC, 甚至可以将它们部署在云端。和其它微服务协同操作。构建一个开发性系统。

构建边缘计算架构

   有了docker 版本的Soft dPAC ,就可以将它部署到边缘服务器上面,并且与docker 容器中的其它微服务协同操作。下面是一个典型的架构图:

前面提到,Soft dPAC 提供了3种方式与外部程序交互

  1. 动态库 DLL 直接调用
  2. modbus TCP
  3. TCP/UDP 方式。

docker 容器中程序以微服务的方式运行,所有的微服务通过一个统一的消息系统实现消息交换。比如RabbitMQ ,MQTT 等。为此,我们要设计一个Soft Gateway 程序将Soft dPAC TCP 传输的数据转换成微服务消息,通过message bus 信息交换。在这里我们选择简单MQTT 作为消息总线。

测试过程

安装

解压

解压出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 的容器管理工具。

 

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 .(不要忘记,我就是忘了,一直搞不通)

<?xml version="1.0" encoding="utf-8"?><MBInterface><var name="VAL_OUT1" type="UINT" offset="0" usage="write"  comment="VAL_OUT1" /><var name="VAL_OUT2" type="UINT" offset="1" usage="write"  comment="VAL_OUT2"  /><var name="VAL_IN1" type="UINT" offset="0" usage="read"  comment="VAL_IN1" /><var name="VAL_IN2" type="UINT" offset="1" usage="read"  comment="VAL_IN2" /></MBInterface>

该文件可以存储在Project 文件夹中。下一步指向MODBUSGENTCPS1 击右键,选择Modbus Gateway。弹出一个文件选择窗口。选择 modbusmap.xml.

经过上面一系列添加之后,HW Configuration 是这样的:

我们还需要设置上面窗口中所有项目的属性(property),它们包括:

  1. MODBUS,
  2. MODBUSGENTCPS1,
  3. VAL_OUT1_MODBUSGENTCPS1 
  4. VAL_OUT2_MODBUSGENTCPS1 
  5. VAL_IN1_MODBUSGENTCPS1 
  6. 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

package mainimport ("log""time""github.com/tbrandon/mbserver"
)func main() {serv := mbserver.NewServer()err := serv.ListenTCP("0.0.0.0:502")if err != nil {log.Printf("%v\n", err)}defer serv.Close()// Wait foreverfor {time.Sleep(1 * time.Second)}
}

 

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 语言编写,代码如下:

package mainimport ("fmt""net""os""strings"
//	"strconv"
)const (CONN_HOST = "localhost"CONN_PORT = "9201"CONN_TYPE = "tcp"
)func main() {// Listen for incoming connections.l, err := net.Listen(CONN_TYPE, CONN_HOST+":"+CONN_PORT)if err != nil {fmt.Println("Error listening:", err.Error())os.Exit(1)}// Close the listener when the application closes.defer l.Close()fmt.Println("Listening on " + CONN_HOST + ":" + CONN_PORT)for {// Listen for an incoming connection.conn, err := l.Accept()if err != nil {fmt.Println("Error accepting: ", err.Error())os.Exit(1)}// Handle connections in a new goroutine.go handleRequest(conn)}
}// Handles incoming requests.
func handleRequest(conn net.Conn) {// Make a buffer to hold incoming data.buf := make([]byte, 1024)index:=0for { // Read the incoming connection into the buffer.cnt, err := conn.Read(buf)if err != nil {fmt.Println("Error reading:", err.Error())}line := strings.TrimSpace(string(buf[0:cnt]))fmt.Println(line)// Send a response back to person contacting us.index=index+1if index>128 {index=0}fmt.Printf("message recieved :%d\n",index)conn.Write([]byte(fmt.Sprintf("message recieved :%d",index)))// Close the connection when you're done with it.
}conn.Close()
}

运行的结果如下:

一个简单的软件网关(Soft Gateway)

    Soft dPAC 只是提供了一个简单的TCP,UDP和modbusTCP通信机制。为了实现Soft dPAC与容器中的其它微服务通信。需要设计一个软件网关,将TCP 数据转化成为微服务的消息总线协议。为了简单演示,我们实现了一个 TCP/MQTT 的软件网关(Soft Gateway),它采用Go 语言编写。

   MQTT 代理使用开源Eclipse Mosquitto 。

Soft Gateway 代码

(未完成,敬请期待吧!)

结束语

经过这些实验后,你大概能够体会到为什么说施耐德的EAE 是一个开放自动化系统了。如果你对容器,云平台等相关技术了解的IT 工程师。你会想象出各种应用场景。产生无限的遐想。EAE 的确是你想要的样子。

建议你再次阅读我的博文理想的开放自动化

这篇关于施耐德开放自动化平台初体验(3)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/344182

相关文章

Spring Boot从main方法到内嵌Tomcat的全过程(自动化流程)

《SpringBoot从main方法到内嵌Tomcat的全过程(自动化流程)》SpringBoot启动始于main方法,创建SpringApplication实例,初始化上下文,准备环境,刷新容器并... 目录1. 入口:main方法2. SpringApplication初始化2.1 构造阶段3. 运行阶

Linux之platform平台设备驱动详解

《Linux之platform平台设备驱动详解》Linux设备驱动模型中,Platform总线作为虚拟总线统一管理无物理总线依赖的嵌入式设备,通过platform_driver和platform_de... 目录platform驱动注册platform设备注册设备树Platform驱动和设备的关系总结在 l

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

Python自动化批量重命名与整理文件系统

《Python自动化批量重命名与整理文件系统》这篇文章主要为大家详细介绍了如何使用Python实现一个强大的文件批量重命名与整理工具,帮助开发者自动化这一繁琐过程,有需要的小伙伴可以了解下... 目录简介环境准备项目功能概述代码详细解析1. 导入必要的库2. 配置参数设置3. 创建日志系统4. 安全文件名处

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

pytest+allure环境搭建+自动化实践过程

《pytest+allure环境搭建+自动化实践过程》:本文主要介绍pytest+allure环境搭建+自动化实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、pytest下载安装1.1、安装pytest1.2、检测是否安装成功二、allure下载安装2.

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示

Python使用python-docx实现自动化处理Word文档

《Python使用python-docx实现自动化处理Word文档》这篇文章主要为大家展示了Python如何通过代码实现段落样式复制,HTML表格转Word表格以及动态生成可定制化模板的功能,感兴趣的... 目录一、引言二、核心功能模块解析1. 段落样式与图片复制2. html表格转Word表格3. 模板生

使用Python自动化生成PPT并结合LLM生成内容的代码解析

《使用Python自动化生成PPT并结合LLM生成内容的代码解析》PowerPoint是常用的文档工具,但手动设计和排版耗时耗力,本文将展示如何通过Python自动化提取PPT样式并生成新PPT,同时... 目录核心代码解析1. 提取 PPT 样式到 jsON关键步骤:代码片段:2. 应用 JSON 样式到