施耐德开放自动化平台初体验(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

相关文章

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

Python实现Microsoft Office自动化的几种方式及对比详解

《Python实现MicrosoftOffice自动化的几种方式及对比详解》办公自动化是指利用现代化设备和技术,代替办公人员的部分手动或重复性业务活动,优质而高效地处理办公事务,实现对信息的高效利用... 目录一、基于COM接口的自动化(pywin32)二、独立文件操作库1. Word处理(python-d

Python使用DrissionPage中ChromiumPage进行自动化网页操作

《Python使用DrissionPage中ChromiumPage进行自动化网页操作》DrissionPage作为一款轻量级且功能强大的浏览器自动化库,为开发者提供了丰富的功能支持,本文将使用Dri... 目录前言一、ChromiumPage基础操作1.初始化Drission 和 ChromiumPage

Python实现自动化表单填写功能

《Python实现自动化表单填写功能》在Python中,自动化表单填写可以通过多种库和工具实现,本文将详细介绍常用的自动化表单处理工具,并对它们进行横向比较,可根据需求选择合适的工具,感兴趣的小伙伴跟... 目录1. Selenium简介适用场景示例代码优点缺点2. Playwright简介适用场景示例代码

Python自动化处理手机验证码

《Python自动化处理手机验证码》手机验证码是一种常见的身份验证手段,广泛应用于用户注册、登录、交易确认等场景,下面我们来看看如何使用Python自动化处理手机验证码吧... 目录一、获取手机验证码1.1 通过短信接收验证码1.2 使用第三方短信接收服务1.3 使用ADB读取手机短信1.4 通过API获取

Rust中的Drop特性之解读自动化资源清理的魔法

《Rust中的Drop特性之解读自动化资源清理的魔法》Rust通过Drop特性实现了自动清理机制,确保资源在对象超出作用域时自动释放,避免了手动管理资源时可能出现的内存泄漏或双重释放问题,智能指针如B... 目录自动清理机制:Rust 的析构函数提前释放资源:std::mem::drop android的妙

Python自动化Office文档处理全攻略

《Python自动化Office文档处理全攻略》在日常办公中,处理Word、Excel和PDF等Office文档是再常见不过的任务,手动操作这些文档不仅耗时耗力,还容易出错,幸运的是,Python提供... 目录一、自动化处理Word文档1. 安装python-docx库2. 读取Word文档内容3. 修改

Python自动化办公之合并多个Excel

《Python自动化办公之合并多个Excel》在日常的办公自动化工作中,尤其是处理大量数据时,合并多个Excel表格是一个常见且繁琐的任务,下面小编就来为大家介绍一下如何使用Python轻松实现合... 目录为什么选择 python 自动化目标使用 Python 合并多个 Excel 文件安装所需库示例代码