欧姆龙ST编程中文手册:2006年功能块手册实战避坑指南
发布时间:2026/10/29 17:02:31 锦皓数字建站

简介这份欧姆龙ST编程中文手册面向PLC编程初学者与自动化工程技术人员用于系统学习结构化文本ST语言的基础语法与功能块应用。手册以CX-Programmer 6.1为编程环境内容涵盖功能块介绍与类型划分、变量声明与赋值/条件/循环等基本语法、编程环境设置以及安全注意事项与应用注意事项等章节并附有功能块规格、实例规格与功能块限制等技术参数说明可作为入门指南与日常参考。资源包共1个PDF文件约2.26MB为中文版操作手册便于在电脑或移动设备上随时查阅。目前已有7311人学习下载说明其在工控编程学习群体中具有较高的参考价值。读者可借助它快速建立ST编程的整体认知掌握功能块与变量的使用方法并在实际项目中规避常见的安全与应用问题。1. 欧姆龙ST编程中文手册一份2006年的功能块手册今天还能不能打手上拿到一份 W447-CN5-02 编号的中文手册封面写着 CX-Programmer 6.1 功能块操作手册修订日期 2006 年 6 月对应 CS1-H、CJ1-H、CJ1M、CP1H 这几条 CPU 线外加 NSJ、FQM1。很多人第一反应是快二十年的文档了还有翻的必要吗。我的判断恰恰相反——如果你现在还在维护存量 CS/CJ/CP 系列设备或者要接手一套用功能块FB搭起来的老程序这份手册的价值不在“新”而在“准”它把功能块的定义、实例、变量、库文件、编译限制、指令操作数边界讲得比很多二手教程细尤其是数组长度与指令操作数不匹配时编译器到底报错还是只给警告这种细节直接决定你现场敢不敢下载程序。它适合做设备维护、产线改造、老程序移植的电气工程师不适合只想学 ST 语法皮毛的人。2. 功能块与ST语言先把这套编程模型的地基打牢2.1 功能块、实例、变量三者的关系这份手册第 1 章把功能块Function Block定义成“带内部变量的程序单元”可以理解成梯形图里的一个“黑匣子”对外只暴露输入参数和输出参数内部逻辑用梯形图或 ST 写都行。关键在于“定义”和“实例”是分开的——定义只写一份实例是定义在内存里的一次落地每个实例有自己的变量副本。手册里反复强调的“实例规格”“实例执行时间”说的就是这件事你调用 10 次同一个 FB就有 10 份实例数据占 10 份内存执行时间也按实例累加。变量分三类这是后面所有坑的源头内部变量FB 内部用外部看不见、输入变量算法执行前成批从参数搬进来、输出变量算法执行完再成批写回参数。手册里有一句很容易被跳过的话数值是“成批地”经过输入参数到达输入变量的不是指令执行到哪搬到哪。这意味着你在 FB 内部用输入变量做中间运算拿到的永远是本次调用开始时的快照不会随内部指令执行而变。我一般会跟新人说输入变量当只读用要改就落到内部变量别在输入变量上做自增。还有一条硬规矩指定多个字的首地址或末地址时必须用 AT 设定或外部变量来指定变量或者变量长度要和指令处理的数据长度一致。否则编译直接报错。这条在手册的“安全注意事项”和“应用注意事项”里各出现一次说明当年踩的人不少。2.2 为什么老项目偏爱功能块而不是纯梯形图纯梯形图做重复逻辑复制粘贴十遍改一个定时器参数要改十处这是血泪经验。功能块把“一段带状态的逻辑”封装起来参数化调用改定义一处生效。手册第 2 章给了功能块规格、实例规格、CPU 单元的功能块规格还有“功能块程序步骤数和实例执行时间”的表格——这其实是在提醒FB 不是零成本的抽象每个实例都要吃扫描周期。CP1H 这类小型机资源紧实例开多了周期时间肉眼可见地涨。选型上我的习惯是逻辑重复三次以上、且带内部状态计时、计数、步序的做成 FB纯组合逻辑、一次性的老老实实写梯形图别为了“架构好看”硬封。手册里“功能块应用指南”那一节讲的就是这个度虽然写得偏官方但方向是对的。2.3 用 ST 写 FB 内部算法的最小骨架手册附录 B 专门讲结构化文本ST 语言附录 A 讲数据类型附录 C 讲外部变量。把这三块拼起来一个能编译的 FB 内部 ST 大概长这样变量名按手册风格起实际项目里换成你自己的(* 功能块内部ST示例带使能的累计计时 *) (* 输入变量Enable(BOOL), Reset(BOOL) *) (* 输出变量Elapsed(TIME), Running(BOOL) *) (* 内部变量tAcc(TIME), bPrev(BOOL) *) IF Reset THEN tAcc : T#0s; (* 复位累计值注意用T#字面量 *) Elapsed : T#0s; Running : FALSE; ELSIF Enable THEN tAcc : tAcc T#10ms; (* 假设任务周期10ms按实际任务周期改 *) Elapsed : tAcc; Running : TRUE; ELSE Running : FALSE; (* 不使能时保持Elapsed不清零 *) END_IF;逻辑说明Reset 优先级最高直接清零Enable 有效时按固定步长累加不使能时只把 Running 拉低Elapsed 保持——这是“暂停”而不是“复位”现场调试时这两种语义经常被混用导致操作工以为停了其实还在累计。参数说明T#10ms必须和该 FB 所在任务的循环周期一致手册在“实例执行时间”部分隐含了这个前提任务周期改了这里不改计时就是玄学。Elapsed是输出变量按手册的成批写入机制它在本次调用结束才写回参数所以 FB 内部别拿Elapsed当中间量再算。提示ST 里的赋值用:比较用这两个符号在 CX-Programmer 6.1 的 ST 编辑器里敲错一个就是编译错误且报错行号有时偏移别死盯报错那一行。3. 在CX-Programmer 6.1里落地从建FB到下载的完整链路3.1 建功能块定义与库文件手册第 3 章“创建功能块”给了程序流第 1 章 1-4 节讲“将功能块定义转换为库文件”。实操顺序是先在项目树里新建功能块定义选编程语言梯形图或 ST定义变量表名字、数据类型、方向输入/输出/内部/外部写完算法编译通过后另存为库文件.cxf 之类具体后缀以你装的版本为准之后别的项目就能引用这个库。变量表这一步最容易翻车的是数据类型。附录 A 列了 BOOL、INT、UINT、DINT、REAL、TIME、WORD、ARRAY 等注意 WORD 和 UINT 在手册里是分开的混用会在指令操作数匹配时报类型错误。数组变量要特别小心手册明确说指令操作数处理长度固定时数组元素数量必须和指令处理的元素数量相同否则编译报错长度不固定由另一个变量指定时数组元素数量必须大于等于那个长度否则 6.1 版只给警告不报错——然后指令会对超出元素数的那部分照读照写踩到别的变量头上这就是现场“莫名其妙动作”的来源之一。3.2 变量声明与AT设定的写法AT 设定是这份手册的高频词。它的作用是给变量绑一个绝对地址比如 CIO 区的 W 字让指令能按“多字首地址”去操作。写法上在变量属性里勾 AT填地址例如W100。下面这段是变量表在文本层面的等价描述方便你对照检查不是可直接粘贴的源码CX-Programmer 的变量表是表格录入变量名 数据类型 方向 AT设定 说明 StartSig BOOL 输入 - 启动信号 RunTime TIME 输出 - 运行时长 wBuf ARRAY[0..9] OF WORD 内部 W100 10字缓冲供多字指令用 wFirst WORD 内部 W100 首字与wBuf同址逻辑说明wBuf和wFirst绑同一地址是刻意的——手册要求“由操作数指定多个字中第一个或最后一个时输入变量无法被用作指令操作数应使用带 AT 设定的内部变量”。所以多字指令的操作数一律走内部变量 AT别图省事直接塞输入变量。参数说明数组上下界写清楚ARRAY[0..9]是 10 个元素如果某条指令要处理 16 个字这里就必须扩到 16否则就是上面说的越界读写。3.3 编译、下载与闪存备份的时序编译通过后下载手册“应用注意事项”里有两条必须刻在脑子里第一包含功能块的任务无法在任务单元中下载上传可以也就是说你只能整程序下载别指望单独下某个任务第二在线编辑后 CS1-H/CJ1-H/CJ1M/CP1H 会把用户程序和参数区备份到内置闪存备份期间 CPU 前面板 BKUP 灯亮此时断电数据就不备份了。下载前还有一条安全警告把 I/O 存储器区状态从编程软件传送到实际 CPU 之前要充分确认安全性因为不管 CPU 在什么模式接在输出单元上的设备都可能动作。我一般会先把输出侧能断的断掉或者至少让现场的人知道“要下载了”。# 不是真命令是下载前自检清单的落地形式按顺序过一遍 1. 确认CPU模式在PROGRAM 2. 确认输出负载已隔离或现场已通知 3. 确认程序编译0错误警告也要逐条看 4. 确认FB实例数量与周期时间余量 5. 下载后先监控再切RUN这段清单看着土但比任何流程图都管用。手册里那些“否则可能导致人身伤害”的警告落到操作层面就是这几步。4. 避坑与排查功能块编译和运行的五个高频翻车点4.1 现象编译报错“操作数长度不匹配”但变量明明够长原因指令操作数要处理多字你给的变量没有 AT 设定或者变量是输入变量。手册写得很死指定多字首/末地址必须用 AT 设定或外部变量输入变量不能当这类操作数。解决把该变量改成内部变量并加 AT 设定或者用数组变量且元素数与指令长度严格相等。4.2 现象数组长度比指令长度短编译只给警告运行后别的变量被改原因长度由变量指定时6.1 版不报错只警告指令对超出数组元素数的部分照常读写。解决把数组元素数扩到大于等于最大可能长度如果长度是常量则必须严格相等。上线前把这类警告当错误处理。4.3 现象FB 内部用输入变量做累加结果每次调用都从初值开始原因输入变量是算法执行前成批搬入的快照不是实时跟随。解决累加、计数这类带状态的量放内部变量输入变量只读。4.4 现象下载后程序跑飞提示非法指令原因含 6.0 版以上功能块的程序被下到了不支持功能块的 CPU2.0 版及以下的 CS/CJ 系列所有实例被当非法指令。解决确认 CPU 单元版本CP1H 和 3.0 版以上的 CS1-H/CJ1-H/CJ1M 才支持不支持的机器只能去掉 FB 改回标准程序。4.5 现象在线编辑后断电改动丢了原因在线编辑触发闪存备份BKUP 灯亮期间断电数据没写进去。解决等 BKUP 灯灭再断电或者在 PLC 属性里打开“PLC 存储器备份状态”显示确认备份完成。注意手册里“用户程序无法上传到 CX-Programmer 中”这句在注意事项里出现过结合上下文指的是某些受保护或特定条件下的情形实际能不能上传以你手上 CPU 的保护设置和软件版本为准别拿这句话当“永远不能上传”的结论。5. 把手册用成工具书三个检索技巧和一个验证习惯这份手册 150 多页正文加附录当小说读一遍记不住当工具书用才划算。第一个技巧按“症状”查而不是按“章节”查。编译报错先翻 2-5“规定多字中第一个字或最后一个字的操作数指令注意事项”和 2-6“指令支持和操作数限制”这两节是编译错误的集中营运行异常先翻 2-3“功能块限制”和 2-7“CPU 单元的功能块规格”资源不够、实例超限都在这。第二个技巧附录 B 的 ST 规格和附录 A 的数据类型要对着看ST 里每个运算符能接受哪些类型附录 B 有表别凭 C 语言直觉写。第三个技巧把 1-4“将功能块定义转换为库文件”和 3-1“程序流”打印出来贴工位建库和建 FB 的顺序错一步后面变量表全要重来。验证习惯上我自己的做法是任何带 FB 的程序下载前先在软件里做一次“实例数量 × 单实例执行时间”的粗算和任务周期余量对一下余量低于 20% 就砍实例或者拆任务。这个习惯来自一次翻车——某模拟项目里一个 FB 开了三十多个实例单看每个都不大合起来把扫描周期顶到临界现场偶尔丢输入脉冲查了两天才定位到是周期余量不够不是接线问题。从那以后我每次建 FB 都强制走一遍“实例数 × 执行时间”的估算再顺手把数组长度和指令长度对一遍宁可编译期多花十分钟也不在产线上花两天。手册里那些 2006 年的警告语今天读起来有点啰嗦但每一条背后大概率都有一台停过的设备。把它当中文速查表放在手边遇到 FB 相关的编译错误和运行异常先翻它比在网上搜二手答案快得多。希望帮到你。本文还有配套的精品资源点击获取
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。