【Codesys-Runtime】PLC下位机软件开发-固件部署流程-CODESYS移植-酷德网 - CoDeSys软件教程下载,CoDeSys工控资讯门户 

酷德网

HSC6490-cn中国制造,中国芯~
查看: 2819|回复: 1

【Codesys-Runtime】PLC下位机软件开发-固件部署流程

[复制链接]
  • TA的每日心情
    开心
    2017-11-20 22:07
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2025-7-10 09:01:55 | 显示全部楼层 |阅读模式
    关注我的朋友们,估计大部分都是嵌入式软件开发人员。嵌入式软件开发属于技术栈的范畴,利用这个技术,可以在各种不同的岗位上、开发不同的嵌入式产品。
        今天给大家介绍一下基于Codesys平台下的PLC下位机软件开发,本篇是开篇,会详细介绍怎么部署下位机的固件。
        对于非工控领域,或者说不熟悉PLC产品的小伙伴来说,可能对Codesys比较陌生,但是这家总部位于德国的公司老牛了,号称是“工控领域的Android”。
        Android在手机领域是什么概念,懂的都懂。
        如果对于Codesys没有一丁点儿概念,可以暂停下来,在搜索引擎里搜索一下,看一下在世界范围内使用Codesys解决方案来开发PLC产品的公司有多少,就晓得这家公司的技术有多牛了。德国人精湛的技术、严谨的做事风格、N多年如一日的持续优化,再加上中国公司这些年持续的推广和技术支持,让他们的产品(方案)遍地开发、如日中天、光芒四射!(此处省略一万字)
        言归正传,为什么要写Codesys下位机开发的文章?
    • 这是嵌入式工程师可以入职的岗位,市场上供不应求;如果有嵌入式小伙伴想往这个方向发展,熟悉了基本的开发流程,在面试时一般都会被优先考虑;
    • 在网络上关于PLC软件开发的文章几乎都是上位机C#开发,以及PLC项目工程师从事的梯形图、ST语言开发,也就是终端用户现场编写的程序(这部分的文摘大部分又是ST语言程序框架、伺服控制、工艺库等),关于下位机部分的软件开发非常少;
    • 上位机工程师、PLC项目工程师有时候也有兴趣窥探一下下位机部分的软件开发,但是按照Codesys官方文档进行操作的时候,仍然存在一些困难。其实官方的文档已经非常完善了,但是比较零散。比如:如何通过C语言来编写一个外部库,并且通过上位机把该外部库部署到下位机中,按照官方文档来一步一步操作的话,如果没有其它一些零散的背景知识,还是比较难以顺利完成的。


        下面进入正题。本文中使用的所有文件、说明、软件等,在Codesys官网上都能找得到;所有的操作步骤,都可以在帮助页面上看到(再次赞扬一下Codesys的文档工程师),本文只是把所有的操作流程整合在一起而已。
        Codesys的PLC方案非常灵活,可以部署在不同的硬件+操作系统上。为了降低咱们学习的成本,我们在一个Ubuntu虚拟机中来部署,建议新建一个虚拟机来操练。主要参考的是官方这个手册:https://content.helpme-codesys.c ... untime_systems.html。
    640?wx_fmt=png&from=appmsg&watermark=1.jpg

        如果你想挑战一下的话,可以先按照官方文档操作一遍,然后再看一下本文的详细描述。
        另外,Codesys的产品有多种部署方式,本文描述的是Linux SL单机版本,这样的形式一般是终端用户使用的部署方案,数量比较少的时候适用。如果是PLC生产厂家使用Codesys方案来开发,一般是使用另外一种SDK的方式,暂且不表。
        由于对Codesys的理解有限,有些地方的理解可能存在错误,欢迎大家指正、讨论。

    【目录】
    • 上位机环境准备
    • 下位机环境准备
    • 部署方法1:远程安装
    • 用户程序的下载和运行

    • 部署方法2:手动安装
    • Runtime固件探索
    • 小结


    【上位机环境准备】
        手册中两种部署方式都是需要上位机开发软件(俗称:IDE)的支持,因此首先要下载、安装Codesys的上位机开发软件,我这里使用的SP20版本。下载地址是:https://store.codesys.com/de/codesys.html,有很多个版本可以选择。
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        IDE安装好之后,需要安装一个Package包:CODESYS Control for Linux SL 4.14.0.0.package。
        关于如何安装Pacakge,这个再啰嗦一下。
        【工具】-【Codesys安装程序】,打开之后,单击【浏览】,找到提前下载好的package文件之后,一路安装即可。
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        CODESYS Control for Linux SL 4.14.0.0.package这个包安装之后,就可以在【工具】菜单下看到【Deploy Control SL】选项了。
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        单击此选型,弹出【Deploy Control SL】窗口,如下(下面的图是我后来截取的,第一次打开时IP地址、用户名等都是空的):
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        可以看到左侧有三个标签页:通信,部署,操作。

    【下位机环境准备】
        上文说过,这里使用Ubuntu虚拟机来部署下位机固件,我会使用 20.04 和 18.04 两个版本,来分别描述两种不同的部署方式。
        在虚拟机中,需要安装 SSHServer,为了操作方便,我把 root 远程登录权限也开启了(ssh 配置文件)。
        确认一下虚拟机的IP地址,然后确保在宿主机中可以 ping 通虚拟机。

    【部署方法1:远程安装】
        上、下位机都准备好之后,就可以在上位机中进行扫描、连接了,确认可以正常连接到下位机(也就是Ubuntu虚拟机)。
    640?wx_fmt=png&from=appmsg&watermark=1.jpg

        输入IP地址和端口号,单击【扫描】,出现如下对话框。
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        其中第二个IP地址就是我的 Ubuntu20.04 虚拟机,记住这里 IP 地址最后一个字段是 103,下文会再次提到。
        输入用户名和密码,然后点击【连接】,在【设备信息】部分,可以看到上位机已经正确获取到了下位机的相关信息。
    640?wx_fmt=png&from=appmsg&watermark=1.jpg

        同时,在IDE最下面的消息提示区可以看到连接成功的信息。
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        下面开始部署,单击【部署】标签,产品和版本按照下图进行选择,然后单击【安装】。
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        在安装过程中,会有一些提示信息,比如:
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        直接点击【是】。安装完成之后,在最下面的消息区同样有提示信息:
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        在第三个【操作】标签页面中,也可以看到下位机已经部署成功,并且顺利启动执行了:
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        注意:下位机会安装三个程序-codesyscontrol, codemeter(授权用), gateway(扫描用),分别负责不同的功能,目前只需把重点放在codesyscontrol上,也就是大家所说的runtime运行时。
        到此,通过上位机来部署Codesys下位机固件的流程就结束了。
        作为一名嵌入式工程师,理所当然要到下位机上中(虚拟机)探索一下。
        首先使用 htop 指令看一下 codesys 启动的可执行程序:
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        下文会更加详细的描述一下下位机中部署的固件信息,这里我们先把完整的流程走完。








    【用户程序的下载和运行】
        为了验证下位机中固件的部署是否准确无误,我们来写一个最简单的用户程序(Application),然后下载到下位机中执行,观察执行结果。
        创建用户程序的过程如下:
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        单击【确定】,弹出窗口:
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        按照上图进行选择,然后单击【确定】,IDE就开始创建工程。
        工程创建完成之后,单击左侧设备树中的【Device(CODESYS Control for Linux SL)】,右侧弹出【Device】页面,单击【通信设置】,然后单击【扫描设备】,就会弹出下面窗口:
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        可以看到:上位机已经扫描到虚拟机了:ubuntu [036c.4067]。最后的数字 67 是十六进制,对应着十进制的 103 ,也就是虚拟机 IP 地址的最后一个字段。
        选中此设备之后,单击【确定】,然后就可以编写程序了。
        如果是第一次扫描此设备,Codesys还会让你添加用户名,修改密码,按照提示进行操作即可。
    640?wx_fmt=png&from=appmsg&watermark=1.jpg 640?wx_fmt=png&from=appmsg&watermark=1.jpg
        为了便于记忆,我这里的用户名和密码设置的都一样。
        为了避免每次操作扫描、连接时都让我们输入密码,可以修改一下这里的安全策略,如下:
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        选择【修改Runtime安全策略】,按照下图设置:
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        【确定】之后,右键单击【Device】弹出上下文菜单,单击【复位原点设备[Device]】:
    640?wx_fmt=png&from=appmsg&watermark=1.jpg 640?wx_fmt=png&from=appmsg&watermark=1.jpg
        单击【是】,以后就不需要每次都输入用户名和密码了。
        下面开始写一个程序:PLC_PRG,一个最简单的长整型变量自增操作。
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        为了便于观察,我们把Task任务周期设置为1000ms:
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        然后,开始【编译】-【生成代码】:
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        如果是第一次编译程序,可能会遇到如下的错误:
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        原因是:上位机中缺少一些库文件(library)。很好办,安装一下。在左侧的设备树中单击【库管理器】:
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        单击【下载缺失的库】:
    640?wx_fmt=png&from=appmsg&watermark=1.jpg

        单击【下载】。稍等一下即可下载、安装完成。
        然后重新【编译】-【生产代码】,此时应该不会报错了。然后通过菜单【在线】-【登录】-【下载】,把程序下载到下位机中,如下:
    640?wx_fmt=png&from=appmsg&watermark=1.jpg 640?wx_fmt=png&from=appmsg&watermark=1.jpg
        单击【是】。下载完成之后,窗口如下:
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        可以看到目前用户程序虽然已经下载到下位中了,但是处于【停止】状态。
        单击工具栏中的【启动】(实心三角形图标),红色的停止状态就切换到绿色的运行状态。此时观察程序,可以看到变量value的值每秒自增。
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        以上就是一个完整的部署流程,并且通过用户程序来验证下位机固件已经被正确部署了。

    【部署方法2:手动安装】
        所谓的手动安装,就是不通过上位机软件,而是手动把codesyscontrol、codemeter、gateway这几个程序(.deb文件)下载到下位机中,然后通过 dpkg 工具 来手动安装。
        其实也是很简单的事情,执行几个命令而已。(为了与方法1进行隔离,我这里使用了另外一个虚拟机 Ubuntu18.04)
        在上位机安装了开发环境(IDE)以及 pakage 包之后,在 CODESYS 的安装目录下可以找到下面几个软件包:
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        把三个 .deb 文件手动放到虚拟机中的某个位置(可以通过共享文件夹或 SCP 指令),如下:
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        然后依次安装这三个 deb 文件:dpkg -i xxx.deb。
        安装之后,可以看到 codesys 的执行路径:
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        可以看到 IP 地址是 192.168.0.107。这里也使用 htop 指令看一下线程信息:
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        部署完成,看起来比方法1更简单一些。此时,使用上位机来扫描,可以发现的下位机设备地址部分是 406B(6Bh = 107)。

    【Runtime固件探索】
        Codesys的下位机固件包括:
    可执行程序;
    配置文件;
    启动文件;
        它们分别位于:/opt/codesys,/etc/codesyscontrol,/etc/init.d 这三个目录,如下所示:
    640?wx_fmt=png&from=appmsg&watermark=1.jpg 640?wx_fmt=png&from=appmsg&watermark=1.jpg 640?wx_fmt=png&from=appmsg.jpg
        在启动脚本中,比较重要的几个变量如下:
    640?wx_fmt=png&from=appmsg&watermark=1.jpg
        详细的内容这里就不分析了,感兴趣的小伙伴可以自行探索。
        最后再来看一下用户程序文件被下载到哪里了,也就是启动脚本中的 WORKDIR 变量所表示的目录,如下:
    640?wx_fmt=png&from=appmsg&watermark=1.jpg

        看到没?Application.app文件就是从上位机中下载的用户程序。

    【小结】
        以上就是本文的全部内容了,非常的基础,希望能够对你有所帮助!再次感谢Codesys,向他们学习!

    +10
    不赞一个?
    打赏鼓励一下!
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2026-5-7 18:07
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    发表于 2026-5-7 20:00:41 | 显示全部楼层
    htjiumfjhgfvgds,hjgykjkggfdvvf
    +10
    不赞一个?
    打赏鼓励一下!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

    本版积分规则

    
    顶部qrcode底部
    关注酷德网订阅号,获取更多资讯!

    QQ|Archiver|手机版|小黑屋|酷德论坛 ( 苏ICP备16065247号-1 )|网站地图

    GMT+8, 2026-10-11 17:43 , Processed in 0.265182 second(s), 54 queries .

    酷德网

    © 2001-2013 Hicodesys. 技术支持 by 酷德网

    快速回复 返回顶部 返回列表