0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英特尔开发者套件爱克斯板与CODESYS实现软PLC配置并与外界程序通信

英特尔物联网 来源:英特尔物联网 2023-06-15 17:37 次阅读

1

序言

1.1英特尔开发者套件爱克斯板介绍

英特尔开发者套件AIxBoard 爱克斯板是一款功能强大的小型计算机,专为支持入门级边缘人工智能应用程序和设备而设计。无论是在人工智能学习、开发还是实训等应用场景下,它都能完美胜任。

该开发板是类树莓派的 x86 主机,可支持 Linux Ubuntu及完整版 Windows 操作系统。板载一颗英特尔4核处理器,最高运行频率可达 2.9 GHz,且内置核显(iGPU),板载 64GB eMMC 存储及 LPDDR4x 2933MHz(4GB / 6GB / 8GB),内置蓝牙Wi-Fi 模组,支持 USB 3.0、HDMI 视频输出、3.5mm 音频接口,1000Mbps 以太网口。完全可把它作为一台 mini 小电脑来看待,且其可集成一块 Arduino Leonardo 单片机,可外拓各种传感器模块。

此外, 其接口与 Jetson Nano 载板兼容,GPIO 与树莓派兼容,能够最大限度地复用树莓派、Jetson Nano 等生态资源,无论是摄像头物体识别,3D 打印,还是 CNC 实时插补控制都能稳定运行。可作为边缘计算引擎用于人工智能产品验证、开发;也可以作为域控核心用于机器人产品开发。

然而,虽然爱克斯板具有如上的诸多优点。但由于其运行的 Windows 或者 Linux 系统都是非实时性的操作系统,难以用于对实时性要求较高的工业环境中。而实时性的 PLC 环境通常较为封闭,难以使用 Python ,OpenVINO 等外界程序。

1.2CODESYS 介绍

CODESYS 是一款工业自动化领域的一款开发编程系统(CODESYS 是 Code System 的简写),应用领域涉及工厂自动化、汽车自动化、嵌入式自动化、过程自动化和楼宇自动化等等。CODESYS 软件可以分为两个部分,一部分是运行在各类硬件中的 RTE(Runtime Environment ),另一部分是运行在 PC 机上的 IDE。因此 CODESYS的用户既包括生产 PLC 、运动控制器的硬件厂商,也包括最终使用 PLC 、运动控制器的用户。

目前全球有近400家的控制系统生产制造商是 CODESYS 的用户:如 ABB 、施耐德电气 SchneiderElectric、伊顿电气 EATON 、博世力士乐 Rexroth、倍福 BECKHOFF 、科控 KEBA 、日立 HITACHI、三菱自动化 MITSUBISHI 、欧姆龙 OMRON、研华科技、凌华科技 ADLINK 、新汉电脑、和利时集团、 SUPCON 中控集团、步科自动化 KINCO 、深圳雷赛、汇川技术、深圳合信、深圳英威腾、华中数控、固高科技等等。

简单来说,CODESYS 可以说是 PLC 界的安卓,许多PLC 厂商都以 CODESYS 作为其 PLC 的内核。

此外,CODESYS 可以将任何一款 arm 架构或者 x86 架构的处理器变为实时的 PLC 系统。CODESYS 结合 AIxBoard ,我们能够得到一个可以用于工业控制检测领域的一款功能强大的人工智能小型计算机。

2

前期准备

CODESYS 软件分三层架构,可用下图来表示:

a46f2acc-0b5e-11ee-962d-dac502259ad0.png

图1 CODESYS 软件架构示意图

其中开发层(IDE)可使用 CODESYS Development System(具有完善的在线编程和离线编程功能)、编译器及其配件组件、可视化界面编程组件等对 CODESYS 程序进行开发与部署。本文使用的版本为 CODESYS V3.5 SP17,下载与安装教程可见《CODESYS 3.5.17.0 软件安装_codesys安装教程》:

https://blog.csdn.net/goo__gle/article/details/116987188

2.1开发层主机前期准备

在安装完 CODESYS 后,还需要根据需求下载安装部分CODESYS 软件包,由于本文需要在运行有 Ubuntu 的AIxBoard 上部署 CODESYS Runtime ,并通过共享内存实现与外界程序通信,故需安装的软件包有以下几种:

CODESYS Control for LinuxSL

CODESYS Edge Gateway for Linux

Shared Memory Communication

完成安装后,可在包管理器中查看到这三个软件包:

a4c2e3a6-0b5e-11ee-962d-dac502259ad0.png

图2在 CODESYS 中安装软件包

安装完成三个软件包后,重启 CODESYS ,随后能够在工具中最下面一行找到 Update Linux ,点击后会打开一个能够与安装了 Linux 系统的 AIxBoard 进行通信部署的界面。

a4db0af8-0b5e-11ee-962d-dac502259ad0.png

图3安装软件包完成后的效果

2.2设备硬件层前期准备

为了提高 AIxBoard 的适用性,本文将使用 Ubuntu 系统作为 AIxBoard 的操作系统,系统版本为 Ubuntu 20.04LTS ,这里使用的是 Canonical 为英特尔优化的版本。下载与安装教程如下:

https://www.xzsteam.com/docs/osinstallation.html

除此之外,安装完成系统后,还需安装 Python 以进行共享内存通信,本文使用的 Python 版本为 3.8.10。

为验证 CODESYS 能够与外界程序通信,同时也安装了 Epics 。Epics(Experimental Physics and Industrial Control System)即“实验物理及工业控制系统”,是上世纪90年代初由美国洛斯阿拉莫斯国家实验室(LANL)和阿贡国家实验室(ANL)等联合开发的大型控制软件系统。安装完成 Epics 后,需使其在后台运行,后续将通过 CODESYS 与其进行通信。

a506c08a-0b5e-11ee-962d-dac502259ad0.png

图4在 AIxBoard 中预先安装好 Ubuntu 系统与 Epics

3

工程建立

3.1新建标准工程

在 CODESYS 中,选择文件-新建工程,命名工程为 AIxBoard ,选择新建标准工程。

a544d3fc-0b5e-11ee-962d-dac502259ad0.png

图5新建标准工程

在弹出的标准工程对话框中,选择设备为 CODESYS Control for Linux SL ,选择结构化文本(ST)作为编程语言。

a5646df2-0b5e-11ee-962d-dac502259ad0.png

图6新建标准工程选项

3.2加载所需函数库

将我们刚刚安装的软件包中的所需函数库加载到此工程中,需要添加的函数库有:

SysShm,3.5.8.0 (System)

SysTypes2 Interfaces,3.5.4.0 (System)

打开库管理器( Library Manager ),选择“添加库( Add Library )”,点“高级( Advanced... )”;

a5948d16-0b5e-11ee-962d-dac502259ad0.png

图7 在工程中加载刚刚安装好的函数库

在搜索框(String for a fulltext search...)中分别输入 SysShm 和 SysTypes 搜索添加 SysShm,3.5.8.0 和 SysTypes2 Interfaces,3.5.4.0 ,

选中搜索到的库,点 “OK” 确认添加,

a5b37172-0b5e-11ee-962d-dac502259ad0.pnga5d09aea-0b5e-11ee-962d-dac502259ad0.png

图8 搜索并添加所需的两个函数库

3.3建立设备通信

点击工具-Update Linux 打开与 Linux 通信的界面,在左侧输入用户名和密码,搜索到 AIxBoard 的 IP 后,点击Install 将 CODESYS Runtime 安装至 AIxBoard 中,安装文件可以在 AIxBoard的 /etc/ 中找到。

a5f149f2-0b5e-11ee-962d-dac502259ad0.png

图9与 AIxBoard 通信并将 Runtime 部署在 AIxBoard 上

经过图9的操作之后,AIxBoard 便已经成为了一个能够运行 CODESYS 的实时性系统的 PLC 了。

a6148a84-0b5e-11ee-962d-dac502259ad0.png

图10 在 AIxBoard 上安装好的 CODESYS Runtime 程序文件

新建项目后,点击左下角设备进入设备树,双击 Device 后,点击扫描网络进行设备连接,选择 AIxBoard 为控制器的网络路径。

a642022a-0b5e-11ee-962d-dac502259ad0.png

图11 进行设备扫描与连接

输入账号密码进行登录,如果是第一次登陆,还需要另外设置一次登录密码。

a657c20e-0b5e-11ee-962d-dac502259ad0.png

图12 在 CODESYS Runtime 上登录并自动下载代码

登陆完成后,将会自动下载程序代码至 AIxBoard 上,并且可以在 device 中看到设备信息

a67b39be-0b5e-11ee-962d-dac502259ad0.png

图13 连接完成后的设备网络图

4

代码编写

4.1定义数据单元类型与全局变量

右击 Application,选择添加 DUT(Data Unit Type,数据单元类型),DUT 为自定义的数据类型,本文中新建自定义的数据单元类型目的为通过不同类型的数据单元,将输出至外部程序的变量与从外部程序输入进来的变量分离开。

新建两个数据类型分别为:Str_ParaFromHMI 与Str_ParaToHMI ,目前结构体内部仅包含一个长整型格式的数据(LREAL),可根据实际需求修改或添加。

TYPE Str_ParaToHMI :
STRUCT
 fOut: LREAL;
END_STRUCT
END_TYPE


TYPE Str_ParaFromHMI :
STRUCT
 fIn: LREAL;
END_STRUCT
END_TYPE

右击 Application 添加全局变量列表 GVL(Global Var List),并将刚刚新建的两种数据类型实例化,并添加至全局变量中。实例化的名称分别为 GetPara 与 SetPara 。其中 GetPara 用于从外部程序中获取数据进入CODESYS , SetPara 用于将 CODESYS 中的数据输出至外部程序中。

VAR_GLOBAL
 GetPara:Str_ParaFromHMI;
 SetPara:Str_ParaToHMI;
END_VAR

4.2编写共享内存 POU

右击 Application 添加POU (Program organizational unit,程序组织单元),命名为 Sharedmemory 。

a6b5da60-0b5e-11ee-962d-dac502259ad0.png

图14 新增程序组织单元的相关配置

POU 上方为局部变量声明区域,下方为结构化文本程序区域。局部变量声明如下:

PROGRAM SharedMemory
VAR
 
 bStart: BOOL:= FALSE;
 ReadHandle: RTS_IEC_HANDLE:= RTS_INVALID_HANDLE;
 WriteHandle: RTS_IEC_HANDLE:= RTS_INVALID_HANDLE;
 szNameRead: STRING:= 'CODESYS_MEMORY_READ';  //声明共享内存的读取内存名称
 szNameWrite: STRING:= 'CODESYS_MEMORY_WRITE'; //声明共享内存的写入内存名称
 ulPhysicalAddressRead: __UXINT:= 0;//读取数据的偏移地址,0为从头读取
 ulPhysicalAddressWrite: __UXINT:= 0;//写入数据的偏移地址,0为从头写入
 ulSizeRead: __UXINT:= 1024;//读取空间大小
 ulSizeWrite: __UXINT:= 1024;//写入空间大小
 ResultRead: ARRAY[0..2] OF RTS_IEC_RESULT;  //返回运行错误码,0中为运行错误码,1中为读取执行错误码,2中为写出执行错误码
 ResultWrite: ARRAY[0..2] OF RTS_IEC_RESULT;   //返回运行错误码,0中为运行错误码,1中为读取执行错误码,2中为写出执行错误码
 
 SMRead: __UXINT;
 SMWrite: __UXINT;
 ulOffsetRead: __UXINT:= 0;
 ulOffsetWrite: __UXINT:= 0;
 
END_VAR

向右滑动查看完整代码

szNameRead: STRING:= 'CODESYS_MEMORY_READ';  //声明共享内存的读取内存名称
szNameWrite: STRING:= 'CODESYS_MEMORY_WRITE'; //声明共享内存的写入内存名称

向右滑动查看完整代码

其中,上面这两行语句部分所指定的名称是之后需要与 Python 中读取共享内存中数据一致的文件名称。可任意修改但是应与 Python 中程序一致,共享内存的文件将会保存在 /dev/shm/ 中。

下方 ST 程序部分编写代码如下:

//Init Memory
IF NOT bStart THEN
 ReadHandle:= SysSharedMemoryCreate(pszName:= szNameRead, ulPhysicalAddress:= ulPhysicalAddressRead, pulSize:= ADR(ulSizeRead), pResult:= ADR(ResultRead[0]));
 WriteHandle:= SysSharedMemoryCreate(pszName:= szNameWrite, ulPhysicalAddress:= ulPhysicalAddressWrite, pulSize:= ADR(ulSizeWrite), pResult:= ADR(ResultWrite[0]));
 IF RTS_INVALID_HANDLE <> ReadHandle AND RTS_INVALID_HANDLE <> WriteHandle THEN
  bStart:= TRUE;
 END_IF
END_IF
 
//读入数据
IF RTS_INVALID_HANDLE <> ReadHandle THEN
 SMRead:= SysSharedMemoryRead(
 hShm:= ReadHandle,      //读取内存的设备句柄
 ulOffset:= ulOffsetRead,   //读取数据的偏移地址 
 pbyData:= ADR(GVL.GetPara),   //指向读取数据的缓冲区
 ulSize:= SIZEOF(Str_ParaFromHMI),  //读取数据的字节大小 
 pResult:= ADR(ResultRead[1]));  //返回执行的错误码
END_IF
 
//写出数据
IF RTS_INVALID_HANDLE <> WriteHandle THEN
 SMWrite:= SysSharedMemoryWrite(
 hShm:= WriteHandle,     //写入内存的设备句柄
 ulOffset:= ulOffsetWrite,    //写入数据的偏移地址
 pbyData:= ADR(GVL.SetPara),   //指向写入数据的缓冲区
 ulSize:= SIZEOF(Str_ParaToHMI),  //写入数据的字节大小
 pResult:= ADR(ResultWrite[2]));  //返回执行的错误码
END_IF

向右滑动查看完整代码

在 Maintask 中调用编辑好的 POU ,将此 POU 加入到执行程序中。

a6dfa2aa-0b5e-11ee-962d-dac502259ad0.png

图15 在任务配置中调用编写好的程序

4.3编写数据来源 POU

在主程序 PLC_RPG 中添加正弦数据函数,不断向SetPara 中发送正弦波数据。

a705e3ac-0b5e-11ee-962d-dac502259ad0.png

图16 编写主程序相关函数,用于输入正弦波形

完成后,点击上方编译,编译通过后即可将程序登录下载至 AIxBoard 中。在 AIxBoard 上,编写相关 python 程序接收来自 CODESYS 传递的信号并通过 pyepics 将其发送至 Epics 中,代码如下:

import mmap
import struct
from epics import caput
import epics
import time
name="CODESYS_MEMORY_WRITE"
f= open('/dev/shm/'+name,"r")
while 1:
  f.flush()
  mm=mmap.mmap(f.fileno(),0,prot=mmap.PROT_READ)
  #print(mm.read(8))
  [number,]=struct.unpack('d',mm.read(8))
  print(number)
  #print(epics.ca.find_libca())
  caput('aiHost:xxxExample',number)
time.sleep(0.05)

向右滑动查看完整代码

5

运行结果

以管理员身份运行 Python 程序,可在 AIxBoard 上不断读取到 CODESYS 发送的数据。

a7230a9a-0b5e-11ee-962d-dac502259ad0.png

图17 AIxBoard 上最终运行结果,左侧为接收到的数据量

同时在 CODESYS 中可建立信号跟踪器,检测发送出的数据波形。

a7456c48-0b5e-11ee-962d-dac502259ad0.png

图18 信号跟踪器上显示的 CODESYS 中发出的数据波形

通过新建 CS-Studio 界面,可以从 Epics 中查看数据,验证 CODESYS 中发送出来的数据的正确性。

a76925ca-0b5e-11ee-962d-dac502259ad0.png

图19 在 CS-Studio 界面上监视到的 Epics 网络中 PV 量的变化波形

至此,我们已完成了将 AIxBoard 变为 PLC 并与外界程序通信的全部任务,顺利将 AIxBoard 从一台非实时性的开发板变成了一个能够用于工业控制领域的实时 PLC 控制器。能够与外界程序进行通信,使基于 AIxBoard 与CODESYS 配置而成的软 PLC 相比传统的 PLC 而言,具有了更高的灵活性,通过搭配 OpenVINO 等人工智能模型,能够实现更加智能化的控制效果。

文中所涉及到的所有工程文件与代码均已开源于 github,网址为:

https://github.com/EHU0/Codesys_ShareMemory_On_AIxBoard.git

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 英特尔
    +关注

    关注

    61

    文章

    9985

    浏览量

    171962
  • plc
    plc
    +关注

    关注

    5013

    文章

    13329

    浏览量

    464133
  • 人工智能
    +关注

    关注

    1792

    文章

    47442

    浏览量

    239004

原文标题:英特尔开发者套件爱克斯板与CODESYS实现软PLC配置并与外界程序通信 | 开发者实战

文章出处:【微信号:英特尔物联网,微信公众号:英特尔物联网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    NVIDIA发布小巧高性价比的Jetson Orin Nano Super开发者套件

    NVIDIA近期推出了一款全新的生成式AI超级计算机——Jetson Orin Nano Super开发者套件。这款开发者套件以其小巧的尺寸和高性价比吸引了广泛关注。 Jetson O
    的头像 发表于 12-19 11:28 417次阅读

    通动力亮相英特尔新质生产力技术生态大会

    近日,2024 英特尔新质生产力技术生态大会在成都举行。作为英特尔战略合作伙伴,通动力及旗下机械革命受邀参会,Intel、智谱、机械革命三方联合发布了专为程序员设计的CODE AI
    的头像 发表于 11-30 10:37 315次阅读

    使用英特尔哪吒开发套件部署YOLOv5完成透明物体目标检测

    英特尔的哪吒(Nezha)开发套件是一款专为边缘AI和物联网应用设计的高性能计算平台,搭载了英特尔 N97处理器、内置英特尔 UHD Graphics GPU,并提供高达8GB LPD
    的头像 发表于 11-25 17:15 259次阅读
    使用<b class='flag-5'>英特尔</b>哪吒<b class='flag-5'>开发套件</b>部署YOLOv5完成透明物体目标检测

    OpenVINO™ C++ 在哪吒开发板上推理 Transformer 模型|开发者实战

    使用OpenVINO定制你的AI助手丨开发者实战作者:王国强苏州嘉树医疗科技有限公司算法工程师指导:颜国进英特尔边缘计算创新大使研扬科技针对边缘AI行业开发者推出的『哪吒』(Nezha)开发套
    的头像 发表于 09-28 08:01 379次阅读
    OpenVINO™ C++ 在哪吒<b class='flag-5'>开发板</b>上推理 Transformer 模型|<b class='flag-5'>开发者</b>实战

    银与英特尔AI芯片合作计划告吹

    近日,科技界传来消息,银集团与英特尔公司关于共同开发人工智能(AI)芯片的合作计划以失败告终。据悉,双方曾计划携手生产AI芯片,以挑战英伟达在市场的领先地位,但终因英特尔无法满足
    的头像 发表于 08-16 17:46 968次阅读

    英特尔中国开源技术委员会成立一周年

    开源已成为技术和产业生态发展的重要趋势。英特尔秉持着开放、选择、信任的原则贯彻开源,并在社区、开源项目、开发者等方面贡献力量,带动更多参与共同实现生态繁荣。2023年2月,
    的头像 发表于 08-16 15:35 480次阅读

    从运动员到开发者: 英特尔以开放式AI系统应对多重挑战

    打造的生成式AI(GenAI)检索增强生成(RAG)解决方案。该成果深度展示了英特尔如何通过基于英特尔®至强®处理器和英特尔® Gaudi AI加速器的开放式AI系统及平台,帮助开发者
    的头像 发表于 07-25 09:28 302次阅读
    从运动员到<b class='flag-5'>开发者</b>: <b class='flag-5'>英特尔</b>以开放式AI系统应对多重挑战

    英特尔是如何实现玻璃基板的?

    。 虽然玻璃基板对整个半导体行业而言并不陌生,但凭借庞大的制造规模和优秀的技术人才,英特尔将其提升到了一个新的水平。近日,英特尔封装测试技术开发(Assembly Test Technology Development)部门介绍
    的头像 发表于 07-22 16:37 349次阅读

    英特尔确认Ponte Vecchio GPU将以云服务形式推出

    英特尔在公告中强调,随着AI技术需求的不断增加,公司重点利用Gaudi AI加速器的性能优势及有竞争力的价格,实现其迅速拓展。同时,至强系列CPU依然是HPC解决方案的首选,而数据中心GPU Max亦可在英特尔
    的头像 发表于 05-18 17:14 1074次阅读

    BittWare提供基于英特尔Agilex™ 7 FPGA最新加速

    BittWare 当前的加速产品组合包括最新的英特尔 Agilex 7 FPGA F、I 和 M 系列,包括 Compute Express Link (CXL) 和 PCIe* 5.0
    的头像 发表于 04-30 15:22 846次阅读
    BittWare提供基于<b class='flag-5'>英特尔</b>Agilex™ 7 FPGA最新加速<b class='flag-5'>板</b>

    英特尔开发套件『哪吒』在Java环境实现ADAS道路识别演示 | 开发者实战

    本文使用来自OpenModelZoo的预训练的road-segmentation-adas-0001模型。ADAS代表高级驾驶辅助服务。该模型识别四个类别:背景、道路、路缘和标记。硬件环境此文使用了英特尔开发套件家族里的『哪吒』(Nezha)
    的头像 发表于 04-29 08:07 605次阅读
    <b class='flag-5'>英特尔</b><b class='flag-5'>开发套件</b>『哪吒』在Java环境<b class='flag-5'>实现</b>ADAS道路识别演示 | <b class='flag-5'>开发者</b>实战

    英特尔面向AI PC软件开发者与硬件供应商新增助力计划

    英特尔公司近日宣布“AI PC加速计划”再添两项人工智能(AI)新举措,即新增“AI PC开发者计划”,并吸纳独立硬件供应商(IHV)加入“AI PC加速计划”。
    的头像 发表于 04-02 10:09 344次阅读

    英特尔宣布AI PC加速计划新增两项AI举措

    首先,“AI PC 开发者计划”面向软件研发人员和独立软件开发商,为他们提供便捷的开发环境,助力加速大规模运用新型 AI技术。此计划包含一系列全面的工具、优化工作流方案、AI 部署框架以及开发
    的头像 发表于 03-27 16:03 401次阅读

    【转载】英特尔开发套件“哪吒”快速部署YoloV8 on Java | 开发者实战

    OpenVINO 工具套件基于OneAPI开发,可以加快高性能计算机视觉和深度学习应用开发速度的工具套件,适用于从边缘到云的各种英特尔计算平
    的头像 发表于 03-23 08:05 593次阅读
    【转载】<b class='flag-5'>英特尔</b><b class='flag-5'>开发套件</b>“哪吒”快速部署YoloV8 on Java | <b class='flag-5'>开发者</b>实战

    基于英特尔哪吒开发者套件平台来快速部署OpenVINO Java实战

    OpenVINO 工具套件基于OneAPI开发,可以加快高性能计算机视觉和深度学习应用开发速度的工具套件,适用于从边缘到云的各种英特尔计算平
    的头像 发表于 03-21 18:24 1529次阅读
    基于<b class='flag-5'>英特尔</b>哪吒<b class='flag-5'>开发者</b><b class='flag-5'>套件</b>平台来快速部署OpenVINO Java实战