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

相关文章

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 文件安装所需库示例代码

10个Python自动化办公的脚本分享

《10个Python自动化办公的脚本分享》在日常办公中,我们常常会被繁琐、重复的任务占据大量时间,本文为大家分享了10个实用的Python自动化办公案例及源码,希望对大家有所帮助... 目录1. 批量处理 Excel 文件2. 自动发送邮件3. 批量重命名文件4. 数据清洗5. 生成 PPT6. 自动化测试

10个Python Excel自动化脚本分享

《10个PythonExcel自动化脚本分享》在数据处理和分析的过程中,Excel文件是我们日常工作中常见的格式,本文将分享10个实用的Excel自动化脚本,希望可以帮助大家更轻松地掌握这些技能... 目录1. Excel单元格批量填充2. 设置行高与列宽3. 根据条件删除行4. 创建新的Excel工作表5

MySQL分表自动化创建的实现方案

《MySQL分表自动化创建的实现方案》在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低,分表是一种有效的优化策略,它将数据分散存储在... 目录一、项目目的二、实现过程(一)mysql 事件调度器结合存储过程方式1. 开启事件调度器2. 创

Python Invoke自动化任务库的使用

《PythonInvoke自动化任务库的使用》Invoke是一个强大的Python库,用于编写自动化脚本,本文就来介绍一下PythonInvoke自动化任务库的使用,具有一定的参考价值,感兴趣的可以... 目录什么是 Invoke?如何安装 Invoke?Invoke 基础1. 运行测试2. 构建文档3.

Windows自动化Python pyautogui RPA操作实现

《Windows自动化PythonpyautoguiRPA操作实现》本文详细介绍了使用Python的pyautogui库进行Windows自动化操作的实现方法,文中通过示例代码介绍的非常详细,对大... 目录依赖包睡眠:鼠标事件:杀死进程:获取所有窗口的名称:显示窗口:根据图片找元素:输入文字:打开应用:依

Jenkins中自动化部署Spring Boot项目的全过程

《Jenkins中自动化部署SpringBoot项目的全过程》:本文主要介绍如何使用Jenkins从Git仓库拉取SpringBoot项目并进行自动化部署,通过配置Jenkins任务,实现项目的... 目录准备工作启动 Jenkins配置 Jenkins创建及配置任务源码管理构建触发器构建构建后操作构建任务