本来想好的题目是《跟我学做PLC》,但是转念一想,做为一个离开工控行业七八年的二手程序猿,自己的行业知识已经过期很久了,所以还是改为《揭秘PLC》更合适些。
想当年大四的时候学分不够,所以选修了PLC这门课程,虽然没正儿八经听过几节课,但是实验课程却甚是有趣,引起了我们几个小伙伴的好奇心,总想趁老师不在偷偷拆开看看,到底里面是一个PC还是一个专用的芯片,可惜一直没有得手。不过后来倒是在微机原理实验室里从一堆废电脑里拆出一个Voodoo(好家伙,淘宝现在居然能卖15w)
毕业后一不小心进入了工控行业,开始研发DCS/PLC产品,接触到了这类产品的相关技术,终于明白PLC里面并没有专用的芯片,其核心部件就是MCU或者MPU/CPU,小型的用MCU,中大型的用MPU/CPU,用PC做的PLC有个专用的名字:Soft-PLC。之前朋友圈里有不少人在分享文章:“PLC, DCS, MCU有什么区别,能不能替换等等”,这里揭开第一个秘密:PLC其实就是拿MCU做的,它们本质上是没有区别的。
既然PLC是用MCU/MPU做的,那具体区别在哪儿呢?上学时看过很多文章和书籍,回想起来总感觉它们总在外面蹭蹭,极少能真正进去,读者往往得到似是而非的东西。今天我们就好好的刨一刨Codesys,争取能往祖坟上刨(受到License的限制,本文只会展示Codesys已公开内容,并以Codesys V2.3版本为例)。
1. 什么是Codesys
Codesys是一个PLC开发套件,将它的RTS组件运行在MCU/MPU端,并配合Codesys PC端就可以轻松设计出一款PLC。之前在公众号上看到哪位大哥在讲国内工业软件的短板,拉出Codesys来,说它是PLC界的安卓,国内的汇川、合信、和利时、英威腾、台达,国外的倍福、施耐德、力士乐都在用,可安卓开源的啊,谁见过入门费20W¥的安卓?
相信有不少朋友开始嘀咕了,这家伙就没有竞争对手了么?有,但确实不多,而且规模也都不大,不然怎么说Codesys是行业安卓呢。下面列了几个玩家(包括开源项目):
Vendor | Software | Description |
---|---|---|
3S | Codesys | https://www.codesys.com/ |
KW-Software(Phoenix收购) | MultiProg | 原先是Codesys最大竞争对手,后被Phoenix收购,改名PLCnext |
infoteam | OpenPCS | http://infoteam.com.cn/ |
Rockwell | ISaGRAF | https://www.rockwellautomation.com/ |
logicals | logi.CAD | https://www.logicals.com/en/ |
ide4plc | ide4plc | https://ide4plc.wordpress.com/ |
Beremiz | Beremiz | http://www.beremiz.org/ |
1.1 Codesys的构成
Codesys由3部分组成:
PC端的Codesys软件:给电气攻城狮提供的编程IDE(编辑器+编译器+调试器),相当于MCU攻城狮的Keil,IAR。这个IDE是可以免费下载。
PLC端的Runtimer system:给PLC Vendor提供的软件套件,要花钱买的,可以运行在不同的芯片平台。后面简称RTS(也有其他厂商叫RTE)。
Target配置工具:PC端IDE和PLC端Runtimer之间的桥梁,通过编写一些配置文件来生成一个目标文件,目标文件含有PLC端的各种信息。
1.2 Codesys for PC
Codesys V2.3这个软件发布的比较早,和它的黄金搭档应该是WinXP或者Win7,如果装在Win10系统上可能会出现蓝屏,但这并不影响我们对它进行分析,如果安装的时候一路next,软件会被安装在如下路径:C:\Program Files (x86)\3S Software\CODESYS V2.3
双击Codesys.exe打开软件会看到欢迎的提示:
点击新建一个项目会提示Target选择窗口,因为我这里啥也没装,所以没有任何的Target可以选择,点击OK进入POU设置页面
上图左边需要设置POU的类型:程序或者功能块。程序就相当于Keil,IAR里的程序,功能块相当于Keil,IAR里的LIB
右边选择POU的语言,Codesys支持6种语言:IL, LD, FBD, SFC, ST, CFC,这六种语言都follow IEC 61131-3的标准,这六种语言就不展开了,感兴趣的小伙伴自己百度,ST语言的语法类似于C语言,只要在编辑器输入;就相当于nop指令,一个空函数就完成了。
不过这还不能编译通过,因为还没有设置Target,Codesys编译器还不知道PLC有多少资源,RAM多大,什么Core它都不知道,所以我们需要安装一个Target,这个一般都是由PLC厂商提供,有些厂商为了用户方便,将Codesys PC端进行了二次打包,这样安装好后就有默认的Target了,而且欢迎logo也可以替换为自己的,具体做法我只展示一次,亮点已经标注了
3S自带了几个Target需要安装一下即可,双击InstallTarget.exe,然后选择Open目标文件的路径,安装需要的Target
1.3 Codesys and Target
安装好Target后,我们可以来C:\Target目录查看相关的内容,里面最重要的两个文件.trg,.CFG,其中trg是通过工具生成的,PLC vendor会根据所选择的MCU平台来定义该文件,比如用什么处理器,编译器,N, M, I, Q, R各个区地址和大小。CFG文件定义了该PLC通道定义
Name | Description |
---|---|
*.trg | 定义Target相关参数设置 |
\PCBASEDIO\*.CFG | 定义PLC的通道参数 |
Trg文件对应如下配置:
CFG文件对应通道数据,可以添加子模块,比如CAN,CP5613等:
CFG文件内容示例:
1.4 编译成功
设定好Target后,就可以成功编译拉
今儿就写到这儿吧,下一篇专门讲讲RTS吧