简介:面向欧姆龙PLC编程初学者与电气自动化从业者的ST语言中文手册,围绕CX-Programmer 6.1环境下的功能块编程展开,适合需要从梯形图过渡到结构化文本、理解功能块复用与变量定义的人群。内容从功能块概念、基本与高级功能块分类讲起,延伸到变量、功能块库文件转换、应用程序组织及技术规格与限制,并补充编程环境设置、基本语法、安全与应用注意事项,能帮助读者建立较完整的ST编程框架。压缩包共1个PDF文件,约2.26MB,单文件便于在电脑或移动端查阅与检索。已有7329人学习下载,说明其在欧姆龙ST入门资料中具有一定参考价值。读者可据此了解功能块定义、变量使用、库文件生成和程序组织方式,并对照技术规格排查容量与使用限制,作为入门指南和日常参考手册较实用。
1. 先别急着写ST:这份ST编程中文手册到底解决哪类现场问题
不少现场把ST当成“把梯形图改成文本”,功能块一嵌套,编译能过,下载后实例却报非法指令;这份ST编程中文手册真正值钱的地方,不是语法表,而是把功能块、实例、变量、下载边界和操作数长度这些容易翻车的点按版本讲清楚。它适合已经能维护梯形图、准备把重复逻辑封成功能块的电气工程师,也适合接手旧程序、需要判断CPU是否支持功能块的人。
手册覆盖功能块规格、实例规格、限制、应用指南、ST语法、数据类型和外部变量,读法要按“先选型、再封装、后验证”走。如果你只想要一份语法速查,它会显得啰嗦;如果你要落地到一台支持功能块的CPU上,它的参数和限制才是后悔药。
2. 功能块、实例与变量:把手册里的三层模型拆成可落地的选型表
2.1 先分清定义、实例和变量,不然封装越多越乱
这份ST编程中文手册开篇没有急着讲语法,而是先把功能块定义、实例和变量分开讲,这个顺序很关键。功能块定义是“逻辑模板”,实例是“在程序里真正占用存储、参与扫描的那一份”,变量则是模板和实例之间的数据通道。很多人第一次用功能块,会把定义当成子程序,改一处以为所有调用都会同步变,结果下载后发现只有某个实例变了,或者某个实例的输入变量没接上,现场就开始翻车。
手册里把功能块规格、实例规格、功能块限制、应用指南拆成不同章节,实际是在提醒:定义能不能复用,看规格;实例能不能上机,看限制;变量能不能接地址,看外部变量规则。常见做法是先画一张三层表,把“我要封什么逻辑、要开几个实例、每个实例的输入输出挂什么变量”写清楚,再打开编程软件。这样后面即使编译报错,也能判断是定义层、实例层还是变量层的问题。
| 层次 | 作用 | 手册关注点 | 落地检查 |
|---|---|---|---|
| 功能块定义 | 封装可复用逻辑 | 功能块规格、指令支持、程序步骤数 | 逻辑是否只依赖输入变量,是否用了不支持的指令 |
| 实例 | 让定义在程序中执行 | 实例规格、实例执行时间、限制 | 开几个实例,扫描周期是否够,实例名是否可读 |
| 变量 | 连接外部数据和内部逻辑 | 变量类型、数组、AT设定、外部变量 | 输入输出类型是否匹配,数组长度是否对齐 |
我一般会先做一张功能块清单,列四列:功能块名、输入变量、输出变量、实例数量。清单里只要出现“输入变量要直接接多字首地址”这种需求,就提前标记,因为手册明确提醒:由操作数指定多个字中的第一个或最后一个时,输入变量不能直接当功能块中的指令操作数,应使用带AT设定的内部变量。这个点不提前设计,后面编译或运行就会出问题。
提示:功能块不是越多越好。一个功能块只封装一类稳定逻辑,输入输出变量控制在能看懂的范围内,比堆一个大而全的模板更可靠。
2.2 读功能块规格和实例规格:哪些参数决定能不能上机
手册第2章把功能块规格和实例规格分开列,读的时候不要只看“支持功能块”几个字。功能块规格决定这个CPU单元能装多少功能块定义、支持哪些指令、程序步骤数上限大概是什么量级;实例规格决定每个定义能开多少实例、实例执行时间怎么算。现场最怕的是离线编译通过,下载后扫描周期变长,输入信号读不到,输出动作滞后,最后查半天发现是实例开太多。
选型时我通常按下面顺序看参数。先看CPU单元是否在手册支持范围内,尤其是旧版CPU单元:手册写得很直接,包含功能块的用户程序下载到不支持功能块的CPU单元时,所有实例都会被当作非法指令,无法编辑或执行。再看功能块程序步骤数和实例执行时间,别把多个大功能块塞进一个扫描周期很紧的任务。最后看指令支持和操作数限制,尤其是数组、多字操作数、AT设定这些边界。
| 参数 | 看什么 | 现场影响 | 处理方式 |
|---|---|---|---|
| CPU支持版本 | 是否支持功能块 | 不支持时实例变非法指令 | 下载前查CPU单元版本,别等现场停机 |
| 功能块程序步骤数 | 单个定义占多少步骤 | 步骤过多影响扫描和存储 | 拆分逻辑,把诊断和主控制分开 |
| 实例执行时间 | 多实例累加后的耗时 | 扫描周期延长,输入可能读不到 | 关键任务单独评估,必要时退回梯形图 |
| 指令支持与操作数限制 | 数组、多字、AT设定 | 编译报错或越界读写 | 按手册限制改变量定义,不用“试试看” |
这里有个反直觉结论:功能块适合封装重复逻辑,但不适合拿来炫技。手册的应用指南里提到功能块限制,不是让你背条款,而是让你判断什么时候该退回梯形图。单次使用的简单逻辑、扫描周期非常紧的逻辑、需要大量直接地址操作的逻辑,用梯形图反而更容易审查。功能块的优势在多实例、库复用、接口清晰,选型时要把这个优势对上现场需求。
2.3 选型步骤:从重复逻辑到功能块清单的五步操作
第一步,列出最近三个月重复出现三次以上的逻辑,比如泵启停、报警延时、模拟量缩放、阀门互锁。第二步,给每段逻辑写输入输出清单,输入是BOOL还是INT/REAL,输出是状态还是数值,有没有数组。第三步,对照手册的功能块限制,标出涉及多字操作数、数组长度、AT设定的点。第四步,估算实例数量和扫描时间,超过任务余量就拆小。第五步,先做一个最小功能块,离线编译通过后再复制成库文件。
这套步骤看起来慢,但比现场下载后改变量快。手册里讲“将功能块定义转换为库文件”时,本质是让定义脱离单个程序复用,库文件一旦生成,后面项目引用的是同一个定义,接口变动会影响多个实例,所以封装前必须把输入输出变量名和类型定死。常见误用是边写边改接口,今天加一个输入,明天改一个输出类型,最后库文件版本和现场程序对不上,排查时连“哪个实例用的哪版定义”都说不清。
注意:库文件封装前先冻结接口。变量名、数据类型、数组长度、默认值四项确认后再生成库文件,后面只允许加新功能块,不轻易改旧接口。
2.4 功能块限制与应用指南:什么时候该退回梯形图
手册的功能块限制章节值得逐条读,尤其是“指令支持和操作数限制”和“多字中第一个字或最后一个字的操作数指令注意事项”。这两块直接决定功能块内部能不能用某些指令。很多人写ST时习惯直接对数组做批量处理,离线编译能过,但一到多字操作数就出问题。手册给的边界是:指定操作数中多个字的首地址或末地址时,必须用AT设定或外部变量来指定变量,或者变量长度要与指令处理的数据长度相同。否则编译会报错,或者运行时读写超出预期。
什么时候退回梯形图?我的判断标准是三条:逻辑只在一个地方用、扫描周期余量很小、需要大量直接地址监控。这三条占两条以上,就不要硬封功能块。功能块适合“接口稳定、重复调用、内部逻辑可以黑匣子化”的场景,不适合“每个扫描周期都要盯每个地址”的场景。手册把应用指南放在规格后面,就是让你先判断适用性,再动手写。
3. ST语法与外部变量:从数据类型到库文件封装的五步操作
3.1 ST不是梯形图翻译:变量声明、赋值、条件与循环的边界
ST语言看起来像高级语言,但它在PLC里执行时仍然受扫描周期、变量类型和指令操作数限制。手册附录里的ST语法部分,重点不是教你写IF和FOR,而是让你知道哪些写法在功能块里安全。变量声明要先把输入、输出、内部变量分开,输入变量不要当临时变量反复写,输出变量不要在多个分支里重复赋值。赋值语句要注意类型匹配,INT和DINT混用、REAL和INT直接比较,离线可能只给警告,现场就可能出现数值截断。
条件语句和循环语句的边界更明显。FOR循环的上下界如果来自变量,循环次数在运行时才确定,手册对数组长度不固定的情况有专门提醒:数组元素数量必须大于或等于其它操作数中指定的长度,否则指令可能对超出元素数的部分执行读写。这个坑很隐蔽,因为编译不一定报错,运行时却可能改到别的变量。常见做法是循环边界用常量,数组长度也在变量定义里写死,确实要动态长度时,先在功能块内部做范围检查,再进入循环。
| ST元素 | 安全写法 | 容易出问题的地方 | 检查方式 |
|---|---|---|---|
| 变量声明 | 输入、输出、内部变量分区 | 输入变量被当临时变量改写 | 编译前看变量表,输入变量只读 |
| 赋值 | 类型一致,必要时显式转换 | INT与REAL混算导致截断 | 关键数值加转换函数并注释 |
| 条件 | 条件表达式只读变量 | 多分支重复写同一输出 | 每个输出只在一个分支赋值 |
| 循环 | 边界用常量或先做范围检查 | 动态长度导致越界读写 | 数组长度与循环上限对齐 |
3.2 数据类型和数组:长度固定与不固定时的手册要求
手册附录A把数据类型单独列出来,不是为了让你背表,而是因为功能块的输入输出变量、外部变量、数组都靠类型说话。BOOL用于状态,INT/DINT用于计数和长度,REAL用于模拟量缩放,WORD用于位组合,数组用于批量数据。类型选错,后面不是编译报错就是数值不对。比如模拟量缩放用INT一路算到底,中间结果溢出,现场表现就是数值跳变,查半天以为传感器坏了。
数组是功能块里最容易踩坑的类型。手册把情况分成两类:要由指令操作数处理的长度固定时,数组元素的数量必须与指令处理的元素数量相同,否则编译报错;长度不固定时,数组元素数量必须大于或等于其它操作数中指定的长度。更麻烦的是,如果另一个指定长度的操作数是变量,编译不会报错,只给警告,但指令仍可能对超出元素数的部分读写。这个警告不能忽略,尤其当数组后面还跟着别的变量时,越界写就是把别的变量改了。
下面这段ST代码是一个最小数组处理功能块,用固定长度数组和常量循环边界,避免长度不匹配。代码只表达思路,实际项目按手册的语法和指令支持调整。
FUNCTION_BLOCK FB_AvgScale VAR_INPUT Raw : ARRAY[0..7] OF INT; // 固定8点输入,长度与循环边界一致 Scale : REAL := 0.1; // 缩放系数,带默认值便于单实例调试 END_VAR VAR_OUTPUT Avg : REAL; // 平均后缩放结果 END_VAR VAR i : INT; // 循环变量 Sum : DINT; // 用DINT累加,降低INT溢出风险 END_VAR Sum := 0; FOR i := 0 TO 7 DO Sum := Sum + Raw[i]; // 循环上限与数组长度对齐 END_FOR; Avg := DINT_TO_REAL(Sum) / 8.0 * Scale; END_FUNCTION_BLOCK逻辑说明:输入数组固定8点,FOR循环从0到7,数组长度和循环边界一致,避免“数组10个元素、指令处理16个字”的越界。累加用DINT,最后转REAL再除以8.0,减少整数除法截断。参数说明:Raw是输入数组,Scale有默认值0.1,Avg是输出。实际使用时,如果Raw要接外部多字地址,不要直接把输入变量当指令操作数,按手册用带AT设定的内部数组变量转一层。
提示:看到“数组元素数量小于指令指定长度”的警告,不要点继续。先改数组长度或循环边界,再编译。
3.3 外部变量与AT设定:哪些地址不能直接注册为全局符号
外部变量这一章是这份ST编程中文手册里最容易被跳过、但现场最需要的部分。手册明确提醒:分配到基本I/O单元、特殊I/O单元和CPU总线单元的地址无法注册为全局符号,这些变量也无法被指定为外部变量。也就是说,不是所有地址都能直接当全局变量用。常见误用是把I/O地址直接注册成全局符号,离线看着能用,下载后数据不稳定,或者编译时直接报错。
AT设定是另一个关键。手册要求:指定操作数中多个字的首地址或末地址时,用AT设定或外部变量来指定变量,或者变量必须与指令处理的数据长度相同。实际做法是建一个内部数组变量,给它AT设定到实际地址,功能块内部只操作这个内部数组,不直接把输入变量接到多字指令上。这样做的代价是多一层变量,但换来的是边界可控。尤其是网络另一结点指定PLC地址时,手册建议用内部变量,别图省事直接拿输入变量当首目的字或首源字。
| 场景 | 手册要求 | 常见误用 | 处理方式 |
|---|---|---|---|
| 基本I/O、特殊I/O、CPU总线地址 | 不能直接注册为全局符号 | 直接把I/O地址当全局变量 | 用内部变量中转,按手册注册 |
| 多字首地址/末地址 | 用AT设定或外部变量 | 输入变量直接当指令操作数 | 建带AT设定的内部数组变量 |
| 网络另一结点地址 | 用内部变量 | 输入变量直接当SEND/RECV首字 | 内部变量承接,功能块内再处理 |
| 非布尔输入参数 | 数值前加&、#、+、-前缀 | 只写20,被当地址0020 | 输入数值前确认前缀 |
3.4 把功能块定义转成库文件:封装前必须做的三项检查
手册第1章提到“将功能块定义转换为库文件”,这一步不是点一下保存就完事。封装前我至少做三项检查。第一,接口检查:输入输出变量名是否稳定,类型是否固定,数组长度是否写死,默认值是否合理。第二,指令检查:功能块内部有没有用到手册限制里的指令,尤其是多字操作数和数组操作。第三,实例检查:开两个以上实例,分别给不同输入,离线编译并监控输出,确认实例之间不串数据。
库文件生成后,旧程序引用的是旧定义,新程序引用新定义,版本管理要靠命名和注释,不能靠记忆。常见做法是功能块名带版本后缀,比如FB_AvgScale_V1,接口变更就新建V2,不直接改V1。这样现场出问题,至少能通过实例名和版本号判断它用的是哪版逻辑。手册没有让你做版本管理,但功能块一旦复用,这就是必须补的工程习惯。
4. 编译、下载与在线编辑:按手册参数把边界条件逐项验一遍
4.1 编译前检查:操作数长度、数组元素和常量长度的硬规则
编译报错不可怕,可怕的是只给警告。手册在操作数指令注意事项里写得很细:指定多个字的首地址或末地址时,如果没有AT设定,或者变量长度与指令处理的数据长度不同,编译会报错。数组变量这块,长度固定时元素数量必须与指令处理数量相同;长度不固定时,数组元素数量必须大于或等于其它操作数指定长度。如果另一个指定长度的操作数是常量,编译会报错;如果是变量,编译不报错,但会给警告,运行时仍可能越界读写。
我一般把编译前检查做成一张表,逐项打勾,不靠眼睛扫。先看所有数组变量的定义长度,再看所有多字指令的操作数,最后看输入参数里的数值有没有加前缀。手册特别提醒:输入变量数据不是布尔格式,参数中只输入数值时,CIO区地址中的实际值会被略过,所以输入数值前必须加&、#、+、-前缀。这个点在新手写的功能块里出现频率很高,现场表现就是“我明明输入20,怎么变成地址0020了”。
| 检查项 | 手册规则 | 失败现象 | 处理 |
|---|---|---|---|
| 数组长度固定 | 元素数量与指令处理数量相同 | 编译报错 | 改数组长度或改指令长度 |
| 数组长度不固定 | 元素数量大于等于指定长度 | 警告,可能越界读写 | 加范围检查,数组留足余量 |
| 长度操作数为常量 | 不匹配时编译报错 | 编译不通过 | 常量与数组长度对齐 |
| 长度操作数为变量 | 不匹配时只警告 | 运行时改到别的变量 | 不依赖警告,手动核对边界 |
| 非布尔输入数值 | 加&、#、+、-前缀 | 数值被当地址 | 输入前确认前缀 |
注意:编译警告不是建议,是边界提示。尤其是数组长度和操作数长度相关的警告,现场越界读写往往就是从这里来的。
4.2 下载与上传:功能块任务、旧CPU和备份灯的三个限制
下载前先确认CPU单元支持功能块。手册写得很清楚:包含功能块的用户程序下载到不支持功能块的CPU单元时,所有实例都被视为非法指令,无法编辑或执行。这个不是“下载失败”那么简单,程序已经在CPU里,但实例跑不起来,现场表现就是设备不动、报警不清。下载前查CPU单元版本,比下载后查半天快得多。
上传也有边界。手册提到,包括功能块在内的程序可以用和标准程序相同的方法上传或下载,但包括功能块在内的任务无法在任务单元中下载,上传可以。这句话容易被忽略,实际做任务拆分时,如果要把含功能块的任务下到任务单元,就会卡住。常见做法是把功能块放在可下载的任务里,任务单元只放调度和简单逻辑,别把功能块任务硬塞进去。
在线编辑后还有备份问题。手册提醒:执行在线编辑后,CPU单元中的用户程序和参数区数据会备份在内置闪存中,备份时BKUP显示灯亮,灯亮时不要关闭CPU电源,否则数据不被备份。要在编程软件里看备份状态,可以在PLC属性的显示对话框里打开PLC存储器备份状态。这个细节平时没人注意,一旦在现场断电,程序版本就可能对不上。
4.3 在线编辑与强制监控:BKUP灯亮时别断电
在线编辑的便利性容易让人放松警惕。手册的安全注意事项里写得很直接:仅在确认周期时间延长不会造成不良影响后再进行在线编辑,否则输入信号可能无法读取。还在梯形图窗口监控导通状态和当前值,或在观察窗口监控当前值时,要先确认安全,因为误按快捷键执行强制设置/强制复位,连接到输出单元的设备可能动作,不管CPU处于什么模式。
我的做法是强制监控前先做输出隔离,至少确认三件事:输出设备是否处于安全状态、强制点是否只影响调试设备、现场是否有人靠近执行机构。在线编辑后先看BKUP灯,灯亮就等它灭,别急着断电。要在编程软件里看备份状态,按手册路径打开PLC存储器备份状态,确认备份完成再走。这个流程看起来繁琐,但比现场恢复程序省时间。
4.4 一张上机前检查表:从变量表到输出隔离
上机前检查表按顺序走:第一,变量表检查,输入输出类型、数组长度、AT设定、外部变量注册范围;第二,编译检查,警告清零,尤其是数组长度和操作数长度;第三,CPU版本检查,确认支持功能块;第四,下载范围检查,含功能块的任务不要下到任务单元;第五,在线编辑后备份检查,BKUP灯灭;第六,强制监控前输出隔离。六项里任何一项不清楚,就不要点下载。
| 顺序 | 检查动作 | 通过标准 | 不通过处理 |
|---|---|---|---|
| 1 | 变量表核对 | 类型、长度、AT设定与手册一致 | 改变量定义,不靠运行时试 |
| 2 | 编译警告清零 | 无数组长度、操作数长度警告 | 改长度或加范围检查 |
| 3 | CPU版本确认 | 在手册支持范围内 | 换CPU或退回不支持功能块的方案 |
| 4 | 下载范围确认 | 功能块任务不下任务单元 | 调整任务拆分 |
| 5 | 备份状态确认 | BKUP灯灭,状态显示完成 | 等备份完成再断电 |
| 6 | 输出隔离确认 | 强制监控不影响现场设备 | 断开输出或切换安全状态 |
5. 避坑与排查:数组长度、AT设定和备份灯亮时的五条血泪记录
5.1 五类高频翻车现场:现象、原因、解决
第一类,编译通过,下载后实例全部非法。现象是程序能下载,但功能块实例不执行,监控里显示非法指令。原因通常是把含功能块的程序下到了不支持功能块的旧CPU单元,手册明确说所有实例会被视为非法指令。解决是下载前查CPU单元版本,不支持就换支持功能块的CPU,或者把功能块逻辑退回梯形图实现。别在下载后反复重建实例,方向错了。
第二类,数组长度不匹配,运行时改到别的变量。现象是某个数值偶尔跳变,查传感器没问题,查程序发现数组后面的变量被改了。原因是数组元素数量小于指令操作数指定的长度,编译只给警告,运行时越界读写。解决是把数组长度和指令处理长度对齐,循环边界用常量,动态长度先做范围检查。手册里“数组元素数量必须大于或等于其它操作数指定长度”这句话,要当成硬规则。
第三类,输入参数只写数值,被当地址。现象是功能块输入20,实际读到的是地址0020里的值。原因是非布尔输入参数只写数值,没加&、#、+、-前缀。解决是按手册加前缀,输入前确认数据类型。这个坑在新手写的ST功能块里很常见,因为高级语言习惯直接写数值,PLC里数值和地址是两套东西。
第四类,BKUP灯亮时断电,备份丢失。现象是在线编辑后直接关电源,下次上电程序版本不对。原因是在线编辑后CPU单元把用户程序和参数区备份到内置闪存,备份时BKUP灯亮,断电会中断备份。解决是等BKUP灯灭,或在编程软件里查看PLC存储器备份状态,确认完成再断电。这个不是玄学,是手册写明的时序。
第五类,强制监控误触,输出设备动作。现象是监控时不小心按了强制设置/复位,设备突然动作。原因是在线监控时没有做输出隔离,快捷键直接改了存储器状态。解决是强制监控前确认安全,断开输出或让设备处于安全位置,关键调试双人复核。手册的安全注意事项把这条放在很前面,不是吓唬人。
| 现象 | 原因 | 解决 |
|---|---|---|
| 下载后实例非法 | CPU不支持功能块或版本不对 | 下载前查CPU版本,不支持就换方案 |
| 数值偶发跳变 | 数组越界读写 | 数组长度与指令长度对齐,循环边界用常量 |
| 输入20变成地址0020 | 非布尔输入未加前缀 | 加&、#、+、-前缀 |
| 断电后程序版本不对 | BKUP灯亮时断电 | 等备份完成,查看备份状态 |
| 监控时设备动作 | 强制设置/复位误触 | 输出隔离,双人复核 |
5.2 排查顺序:先版本、再长度、后时序
排查功能块问题,我按“先版本、再长度、后时序”走。先版本:CPU单元是否支持功能块,编程软件版本是否匹配,程序里有没有旧版功能块定义。再长度:数组长度、操作数长度、循环边界、AT设定范围,尤其是编译警告里带“长度”的条目。后时序:输入变量是成批经过参数到达输入变量的,算法执行前数值已经到位,如果要在指令执行时传值,要用内部变量或外部变量;输出变量写回参数也有时序。很多“逻辑明明对,结果就是不对”的问题,查到最后是变量更新时序。
这个顺序能避免一上来就改逻辑。功能块内部逻辑通常没那么容易错,错的多是边界和版本。手册把功能块规格、实例规格、限制、操作数注意事项分开讲,就是让你按层排查。先确认能不能跑,再确认长度对不对,最后确认时序合不合预期。
5.3 记录模板:把一次翻车变成下次的检查项
每次排查完,我记四行:现象、触发条件、根因、下次检查项。现象写“实例非法”不够,要写“下载后三个实例全部非法,监控显示非法指令”;触发条件写“换了旧CPU单元”;根因写“CPU不支持功能块”;下次检查项写“下载前查CPU版本并记录在检查表”。这样下次遇到类似现象,先翻记录,不用从零开始。
记录模板不用复杂,一张表就够。关键是把“手册里的哪条规则”写进去,比如“数组长度不固定时只警告,运行时越界读写”。下次看到警告,就知道不是小事。血泪经验的价值不在故事,在能不能变成下一次的动作。
6. 用一份最小验证工程吃透手册:从强制监控到回归检查的习惯
6.1 最小验证工程的四个检查点
最小验证工程不要大,只放一个功能块定义、两个实例、一个固定长度数组、一个带AT设定的内部数组。第一个检查点是版本:确认CPU单元支持功能块,编程软件版本和手册对应。第二个检查点是长度:固定数组长度与循环边界一致,AT设定数组的长度与指令操作数长度一致,编译警告清零。第三个检查点是时序:两个实例给不同输入,监控输出是否独立,输入变量是否在算法执行前完成更新。第四个检查点是备份:在线编辑后等BKUP灯灭,确认PLC存储器备份状态完成。
| 检查点 | 最小工程动作 | 通过标准 |
|---|---|---|
| 版本 | 查CPU支持功能块,查软件版本 | 下载后实例不报非法指令 |
| 长度 | 固定数组8点,循环0到7,AT数组长度对齐 | 编译无长度警告 |
| 时序 | 两个实例不同输入,监控输出 | 实例之间不串数据,输入按时更新 |
| 备份 | 在线编辑后看BKUP灯和备份状态 | 灯灭,状态完成再断电 |
6.2 把回归检查固化成下载前动作
最小工程跑通后,把四项检查固化成下载前动作:版本、长度、备份、输出隔离。每次改功能块接口,先跑最小工程,再进正式程序;每次下载前,先看CPU版本和编译警告;每次在线编辑后,先等BKUP灯灭;每次强制监控前,先做输出隔离。这套动作不花多少时间,但能挡住大部分现场翻车。
从那以后我每次把功能块下载到现场CPU前,都强制走一遍版本、长度、备份、输出隔离四项;这个习惯比多背几条ST语法更值。需要对照练的,直接拿这份ST编程中文手册按第2章的表建清单,别只收藏。希望帮到你。
本文还有配套的精品资源,点击获取