☰
CoDeSys V3 编程手册知识地图:IEC 61131-3 标准与六种语言复习指南
2026/11/3 11:45:45 网站建设 项目流程

简介:面向工业自动化开发者与PLC编程初学者的CoDeSys编程手册,聚焦IEC 61131-3标准下的CODESYS V3基础编程入门与工程实践。内容从标准概述、软PLC控制方案与实时核讲起,依次展开软件安装配置、软件模型、设备与应用、程序组织单元(函数、功能块、程序)、公用元素、变量与数据类型等核心章节,并延伸至采样跟踪、持续变量、全局网络变量与配方管理器等应用对象,目录层次清晰,便于按模块系统学习。资源为1个PDF文件,压缩包约12.42MB,适合作为案头查阅的编程参考。已有2181人学习,可帮助读者建立完整的CODESYS知识框架,理解任务、库文件与变量作用域的组织方式,并借助书中示例与解决方案快速迁移到实际工业自动化项目。

1. 从 IEC 61131-3 到软 PLC:一张 CoDeSys V3 的知识地图

很多人第一次翻 CoDeSys 的手册,会被目录吓退:IEC 61131-3 标准、软件模型、公用元素、变量、六种编程语言、指令系统、通信网络、可视化……章节多到像一本字典。但真正梳理下来会发现,这份 CoDeSys 编程手册的骨架其实只有一条主线:标准定规则,软件模型定结构,编程语言定表达,指令与通信定落地。IEC 61131-3 是那个“规则制定者”,它规定了 PLC 该有什么软件模型、该支持哪几种语言;CoDeSys V3 则是把这套规则做成一个可用的开发环境,让你在设备树里挂设备、在任务里排周期、在 POU 里写逻辑、最后下载到软 PLC 实时核里跑起来。这份笔记适合两类人:正在系统学 CoDeSys、想把零散章节串成体系的人,以及备考或面试前需要快速查漏补缺的人。下面按“地图—模块—易错点—复习清单”的顺序,把这份手册拆成可抄作业的复习框架。

2. 标准与软件模型:IEC 61131-3 定下的四层骨架

2.1 IEC 61131-3 到底规定了什么

IEC 61131 是 PLC 领域的国际标准,共 8 个部分,其中和编程直接相关的是第 3 部分——编程语言。它做了两件关键的事:第一,定义了公共元素,包括字符集、分界符、关键字、注释、数据外部表示、数据类型、变量、程序组织单元;第二,定义了软件模型,也就是配置、资源、任务、存取路径、全局变量这一套层级概念。手册里反复出现的“公共元素结构图”,本质上就是把“数据表示”和“编程模型”两条线并在一起画。

理解这一点很重要:CoDeSys 不是凭空发明的语法,它是 IEC 61131-3 的一个实现。所以复习时遇到任何语法细节,先问一句“这是标准规定的,还是 CoDeSys 扩展的”,能省掉很多死记硬背。标准语言的特点可以归纳成五条,手册里写得很清楚,但复习时容易只记名词不记含义:

特点含义复习时的落点
多样性5 种语言可混用大项目按模块选语言
兼容性与硬件无关换平台主要改 I/O 地址
开放性符合标准即可编程减少对单一供应商依赖
可读性类高级语言语句IF/CASE/FOR 与常见语言相似
易操作与安全标准降低出错概率语法约束本身就是保护

这里最容易忽略的是“兼容性”的边界:标准能做到软件与硬件解耦,但不同 PLC 的外部端子对应 I/O 地址可能不同,移植时仍要重新定义地址。手册没有回避这一点,复习时别把它当成“一次编写到处运行”的万能承诺。

2.2 软件模型的四层:设备、应用、任务、POU

CoDeSys 的软件模型是整份手册的骨架,复习时建议按“设备 → 应用 → 任务 → 程序组织单元”四层来记。设备是工程里的硬件节点,添加设备后进入设备编辑器;应用挂在设备下,是真正被编译下载的逻辑集合;应用里再分任务、库文件、全局变量和局部变量;任务负责按周期或事件触发 POU 执行。

任务这一层是重点也是难点。手册里任务部分篇幅不小,核心就三件事:任务类型(循环、事件、自由运行等)、优先级、看门狗。复习时要把“任务周期”和“程序执行顺序”分开看:任务决定“什么时候跑”,POU 内部的语句顺序决定“按什么次序跑”。很多调试翻车就翻在这里——逻辑写得没问题,但任务周期设得太长,边沿检测漏了脉冲。

程序组织单元分三类,这是必须背清楚的对比:

类型有无返回值有无内部状态典型用途
函数 FUN有无数学运算、转换
功能块 FB无(输出靠实例)有定时器、计数器、状态机
程序 PRG无有主逻辑、任务挂载

功能块必须声明实例才能调用,这是和函数最大的区别。手册里“创建的原则”一节其实在讲一件事:需要保存状态就用 FB,纯计算就用 FUN,顶层调度用 PRG。复习时如果只记定义不记这条选择原则,写程序时就会把该用 FB 的地方写成 FUN,然后发现定时器根本不计时。

2.3 应用对象:采样跟踪、持续变量与配方

应用对象这一块容易被当成“边角料”,但采样跟踪和持续变量在调试阶段非常实用。采样跟踪相当于一个软件示波器,把变量按周期采样记录下来,用来观察时序问题;持续变量(RETAIN/PERSISTENT)解决的是掉电保持,配方管理器则把一组参数打包成可切换的数据集。复习时把这三者归为“调试与数据管理”一类,比孤立记忆更牢。全局网络变量则跨设备传递,和后面的通信章节呼应,先在这里埋个伏笔即可。

3. 公用元素与变量:类型系统是后面一切的地基

3.1 字符集、关键字与注释的边界

公用元素看起来琐碎,但它是语法错误的第一个来源。字符集规定了标识符能用哪些字符,关键字是保留字不能拿来当变量名,注释有单行和块注释两种写法。手册里还提到句法颜色,也就是编辑器按语法高亮,这其实是个复习工具:颜色不对,多半是关键字拼错或类型没声明。复习时不必背字符表,但要记住两条硬规则:标识符不能以数字开头、不能与关键字重名。这两条在考试和实际编译报错里出现频率最高。

3.2 数据类型:标准类型、扩展类型与自定义类型

变量章节是整份手册里信息密度最高的部分之一。数据类型分三层:标准数据类型(BOOL、BYTE、WORD、DWORD、INT、DINT、REAL、TIME 等)、标准扩展类型(如 LINT、LREAL、各种长度的字符串)、自定义类型(结构体 STRUCT、枚举 ENUM、数组 ARRAY、别名)。复习时建议按“位串、整数、浮点、时间、字符串”五类做一张表,重点记每类的取值范围和默认初始值。

TYPE ST_Motor : STRUCT bRun : BOOL; // 运行状态 nSpeed : INT; // 转速给定 tDelay : TIME; // 启动延时 END_STRUCT END_TYPE

上面这段是自定义结构体的典型写法,关键点在END_STRUCT和END_TYPE的配对,以及每个字段都要显式声明类型。结构体适合把一组相关变量打包,配合功能块使用时,接口会干净很多。参数说明:BOOL占 1 位,INT为 16 位有符号整数,TIME用于时间量,单位由字面量后缀决定。复习时最容易错的是整数溢出和类型隐式转换——INT加到 32767 再往上就回绕,浮点转整数是截断不是四舍五入,这两条在指令系统的转换指令里还会再出现。

3.3 变量声明与 Pragma 指令

变量声明编辑器里的 Pragma 指令是 CoDeSys 的扩展能力,用来给变量附加编译或运行属性,比如指定地址、设置保持属性、控制初始化行为。手册里“字段 Pragma”一节讲的就是这类指令。复习时不必背全部 Pragma,但要建立意识:看到{attribute ...}或{pragma ...}形式的声明,先判断它影响的是编译期还是运行期。命名建议部分提到匈牙利命名法,前缀标类型(b 表示 BOOL、n 表示 INT、t 表示 TIME),这在多人协作项目里能显著降低读代码成本,属于“知道就赚到”的细节。

4. 六种编程语言:选型逻辑比语法更值得记

4.1 IL、LD、FBD:三种“靠近硬件”的表达

指令表 IL 是文本化的低级语言,一条指令一行,靠累加器工作,适合写紧凑的逻辑但可读性差;梯形图 LD 是图形化的继电器逻辑,执行顺序从左到右、从上到下,赋值指令在右侧;功能块图 FBD 用方框和连线表达,适合信号流清晰的场合。这三种语言的共同点是“贴近传统 PLC 工程师的直觉”,复习时要把重点放在执行顺序上:LD 和 FBD 都是按网络顺序扫描,前一网络的输出可以作为后一网络的输入,但同一网络内的求值顺序有讲究。

(* IL 示例:简单的与或逻辑 *) LD bStart AND bEnable OR bManual ST bRun

这段 IL 的含义是:装载bStart,与bEnable,再或bManual,结果存入bRun。关键在累加器的隐式传递——每一行都在操作同一个当前值,所以顺序不能乱。复习时如果只记指令名不记累加器模型,读 IL 程序会完全找不到北。

4.2 ST:最像高级语言,也最容易写错

结构化文本 ST 是五种语言里表达力最强的,支持 IF、CASE、FOR、WHILE、REPEAT 等语句,语法接近 Pascal。手册里 ST 部分篇幅最长,因为它是复杂算法和状态机的首选。复习重点有三个:一是:=是赋值、=是比较,写反了编译能过但逻辑全错;二是 CASE 语句的分支必须覆盖所有可能值,否则要有 ELSE 兜底;三是循环里改循环变量会导致行为不可预期。

CASE nState OF 0: bRun := FALSE; 1: bRun := TRUE; IF nSpeed > 1000 THEN nState := 2; END_IF 2: bRun := TRUE; ELSE nState := 0; // 非法状态回零,防止卡死 END_CASE

这段状态机的关键是 ELSE 分支:实际项目里状态值可能因为通信或掉电变成意外值,没有兜底就会卡在未知状态。参数说明:nState建议用 INT 或枚举类型,枚举可读性更好但要注意底层值。复习时最容易漏的是“ST 程序执行顺序”——它和 LD 一样是按扫描周期整体执行,不是事件驱动,所以长循环会拖垮周期时间。

4.3 SFC 与 CFC:顺序控制与连续信号流

顺序流程图 SFC 用步、转换条件、动作来描述流程,适合有明显阶段划分的工艺,比如“上料—加热—保温—出料”。它的编程元素包括步、转换、分支、并行分支,属性里可以设步的初始状态和动作限定符。CFC 连续功能图则把功能块自由摆放、连线,执行顺序由块的连接关系决定,适合模拟量处理和连续控制。复习时把 SFC 记成“流程语言”、CFC 记成“信号流语言”,选型时就不会混。手册里 SFC 的结构和元素属性占了不少篇幅,重点看转换条件的求值时机——转换成立才进入下一步,动作限定符决定动作在步内还是步外执行。

5. 指令系统与程序结构:从语法到能跑的逻辑

5.1 位逻辑、定时器、计数器:三条高频指令线

指令系统章节按位逻辑、定时器、计数器、数据处理、运算、转换分块。位逻辑里重点是置位优先与复位优先触发器的区别,以及边沿检测指令——上升沿只在信号从 0 变 1 的那个周期为真,所以必须用中间变量保存前一状态,否则每个周期都触发。定时器分接通延时、断开延时、脉冲等类型,复习时记“定时器是功能块,必须声明实例”这条就够避开大半错误。计数器同理,加减计数和复位端的行为要对着时序图看一遍。

VAR fbTimer : TON; // 接通延时定时器实例 bCond : BOOL; END_VAR fbTimer(IN := bCond, PT := T#2S); bDone := fbTimer.Q; // 延时到达后为真

这段代码的关键是TON必须作为功能块实例调用,IN和PT是输入,Q是输出。参数说明:PT用T#2S这种时间字面量,单位可以是 ms、S、M。复习时最容易错的是把定时器写在条件分支里导致实例不被周期调用,计时自然不准。

5.2 数据处理与类型转换:隐式转换的坑

选择操作、比较、移位、算术、数学、地址运算、类型转换,这一串指令的共同主题是“数据怎么变形”。复习时把注意力放在转换指令上:INT 转 REAL 是精确的,REAL 转 INT 是截断,字符串和数值之间转换要注意长度。移位指令要区分左移右移和循环移位,地址运算则和指针、数组下标相关。这一块没有捷径,建议按“输入类型 → 输出类型 → 边界行为”三列做一张小表,考前扫一遍。

5.3 程序结构:系统程序与用户程序的分界

程序结构章节讲的是用户程序怎么组织。手册提到常用的编程方法,核心思想是分层:底层功能块封装设备逻辑,中层程序做工艺协调,顶层任务做调度。复习时把“系统程序和用户程序”分开理解——系统程序是运行时和库,用户程序是你写的 POU。库文件的管理也在这里,库的版本和命名空间会影响编译,升级库时要注意接口是否兼容。

6. 通信与工程实例:协议选型和调试的复习重点

6.1 五种现场总线:拓扑、原理与配置入口

通信章节是整份手册里最“工程化”的部分,覆盖 CANopen、Modbus(串口与 TCP)、EtherCAT、PROFINET、EtherNet/IP。复习时不要平均用力,按“拓扑结构—运行原理—配置入口”三件事做对比:

协议典型拓扑复习重点
CANopen总线型PDO 与 SDO 的区别
Modbus串口/以太网功能码与寄存器映射
EtherCAT线型/环型主从站与过程数据
PROFINET星型/线型协议架构与设备描述
EtherNet/IP星型显式与隐式报文

CANopen 的 PDO 是过程数据、周期传输,SDO 是服务数据、按需读写,这个区分是高频考点。Modbus 要记清串口和 TCP 的帧结构差异,以及寄存器地址从 0 还是从 1 开始这类细节——不同设备手册写法不一,配置时对不上就查映射表。EtherCAT 和 PROFINET 的配置都依赖设备描述文件,主从站组态的顺序不能颠倒。

6.2 工程实例:六个案例背后的复用套路

控制系统工程实例给了圆盘正反转、火警报警、抢答控制、交通灯、停车场管理、恒压变频供水六个案例。复习时不要逐个背程序,而是抽共性:正反转考的是互锁,火警考的是报警优先级和复位,抢答考的是首信号锁定,交通灯考的是定时步序,停车场考的是计数与满位判断,恒压供水考的是 PID 与变频器通信。把这六个套路记住,比背代码有用得多。可视化章节的工具箱和报警管理,本质是把这些状态映射到画面,复习时把“变量绑定”这条线抓住即可。

7. 易漏点与易错点:五条血泪经验

易漏点一:任务周期与边沿检测的配合。为什么漏:边沿检测只在信号变化的那个扫描周期为真,如果任务周期远大于信号变化间隔,脉冲就被吞了。怎么补:对快速信号用事件任务或提高任务频率,边沿检测的中间变量放在不随任务重置的全局区。

易漏点二:功能块实例的声明位置。为什么漏:把 FB 实例声明在函数里或临时变量区,每次调用都是新实例,状态全丢。怎么补:实例声明在 VAR 或 VAR_STAT 区,且只声明一次,定时器、计数器尤其要注意。

易漏点三:数据类型隐式转换。为什么漏:编译不报错,运行时数值悄悄变了,比如 INT 溢出回绕、REAL 转 INT 截断。怎么补:关键路径显式写转换指令,边界值加范围判断,调试时用采样跟踪看原始值。

易漏点四:通信寄存器地址偏移。为什么漏:设备手册的地址基址和软件配置的基址可能差 1,PDO 映射长度对不上也不报错。怎么补:先用单个变量做点对点读写验证,确认地址和长度后再批量映射。

易漏点五:库版本与命名空间。为什么漏:升级库后接口签名变了,旧程序编译能过但行为异常。怎么补:锁定库版本,升级前看变更说明,工程文件加密和用户管理章节提到的访问限制也顺手配上,避免误改。

8. 复习清单:从知识地图到查漏补缺的落地方法

复习这份 CoDeSys 编程手册,我自己的做法是“三遍法”,这里把它拆成可执行的清单。第一遍建地图:只看目录和每章开头,把 15 章归成四块——标准与模型(第 1、2 章)、语法与语言(第 3 到 7 章)、工程落地(第 8、9、11 章)、通信与附加(第 12、13 章),在纸上画一张四象限图,每块写三个关键词。第二遍填细节:按块精读,每读完一节合上书,用一句话复述“这节解决什么问题”,复述不出来就回去重读。第三遍查漏:拿下面这张自检表逐项打勾,打不上勾的就是薄弱点。

自检项能说清待补
IEC 61131-3 八个部分各管什么
软件模型四层与任务优先级
FUN/FB/PRG 的选择原则
标准类型与自定义类型的边界
六种语言的执行顺序差异
边沿检测与定时器的实例规则
CANopen PDO 与 SDO 的区别
Modbus 串口与 TCP 的帧差异
下载、在线监控、仿真的流程

查漏补缺的具体技巧有两个。一是“反推法”:随便挑一个工程实例,比如交通灯,先不看程序,自己用 ST 写出状态机,再对照手册的写法,差异处就是理解偏差。二是“报错驱动法”:故意写几个典型错误——FB 不声明实例、INT 溢出、CASE 缺 ELSE——看编译器报什么,把报错信息和对应知识点记在一起,比正面记忆牢得多。仿真功能在这里很好用,离线仿真不需要真实硬件,改一个参数看一次结果,反馈闭环很短。

从那以后我每次复习这类手册,都强制走一遍“先画四象限、再填自检表、最后用反推法验一个案例”的流程,不再从第一页硬啃到最后一页。这套流程不挑章节,换成任何一本工控编程手册都能套。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询