简介面向PLC编程初学者与自动化工程师的ST语言入门资料聚焦汇川H5U系列控制器在AutoShop环境下的结构化文本编程实践帮助读者跨越梯形图思维、建立清晰的文本化控制逻辑。内容围绕工程创建、ST子程序与FB/FC插入、变量声明两种方式、字元件类型定义如D0:D表示DINT、D0:E表示浮点型展开并系统讲解IF、CASE…OF、WHILE…DO、REPEAT、FOR、EXIT、RETURN等流程控制指令的语法与执行逻辑附死循环防范提示同时延伸至R_TRIG/F_TRIG边沿触发及基本轴控指令清单。资源包仅含1个PDF文件大小约1.21MB篇幅精简、便于随查随用。已有2055人学习适合作为手边速查手册配合实际硬件调试快速上手ST程序编写。1. 第一次打开 ST 编程界面先别慌它到底是什么很多刚接触 PLC 编程的朋友第一次在软件里看到满屏英文关键字和分号第一反应是“这玩意儿我肯定学不会”。其实换个角度想你平时用梯形图搭的那些触点、线圈本质上是在画一张“电流怎么走”的图而 STStructured Text结构化文本只是换了一种写法——用接近日常逻辑的文字把“先判断什么、再执行什么、循环几次”一条条写出来。它属于 IEC 61131-3 标准里的一种高级编程语言结构清晰、贴近高级语言写复杂运算和流程控制时比梯形图省事得多。这份《H5U-ST 简易编程手册》就是带你从新建工程、定义变量到写出第一个 IF 判断和 FOR 循环的入门地图。零基础也能跟不需要你先精通梯形图只要知道“程序就是按顺序执行的一串指令”就够了。2. 为什么值得学 ST先搞懂它能帮你省什么事2.1 梯形图画不动的时候ST 就是那条出路先说一个新手最容易有共鸣的场景你要写一段“根据 8 个传感器的状态组合决定 20 种不同输出”的逻辑。用梯形图你得画一大片并联串联改一个条件就要重新理线用 ST一个CASE语句列下来谁对应谁一目了然。这不是说梯形图不好而是两种工具各有主场——梯形图直观、适合电气背景的人快速上手ST 紧凑、适合处理判断多、计算多、循环多的逻辑。手册里专门列了 IF、CASE、WHILE、REPEAT、FOR 这一整套流程控制指令说明它面向的就是“逻辑复杂到梯形图开始吃力”的场合。你不需要一上来就抛弃梯形图但学会 ST等于多了一把在复杂场景下不抓瞎的钥匙。2.2 它和你已经会的东西是通的不是从零重来很多人怕 ST是觉得要重新学一门语言。其实手册里写得很清楚变量声明与梯形图编程保持一致不区分大小写内部库与外部库也和原梯形图保持一致。也就是说你原来在变量表里定义的那些元件在 ST 里照样能用只是写法从“拖触点”变成了“敲名字”。比如 D 元件你在程序里写D0默认就是 16 位整型想让它当 32 位整数用写成D0:D想当浮点数用写成D0:E。这种“加个后缀换类型”的设计对新手特别友好——不用记一堆类型关键字先把手头的元件用起来再说。我第一次学的时候就是靠这个后缀规则五分钟内把第一个赋值语句跑通了那种“原来没那么玄”的感觉比看十页理论都管用。2.3 第一个例子怎么跑从新建工程到一行赋值光说不动手等于没学。下面这条路径是手册里“工程创建”部分的浓缩版照着走一遍你就能看到自己的第一段 ST 代码。第一步打开编程软件点击新建工程在编辑器列表里把编程语言选成 ST。新建完成后默认程序页面就是文本编辑模式。这里有个细节值得知道即使你建的是梯形图工程也可以右键程序页、插入子程序类型选结构化文本 STFB/FC 同理。也就是说ST 不是孤立存在的它可以嵌在你已有的工程里哪段逻辑适合文本写就放哪段。第二步在程序编辑区敲下你的第一行// 第一个 ST 例子给一个变量赋值并做简单判断 a : 100; // 把常数 100 赋给变量 a IF a 50 THEN // 判断 a 是否大于 50 b : TRUE; // 条件成立b 置为 TRUE ELSE b : FALSE; // 条件不成立b 置为 FALSE END_IF;这段代码的逻辑很直白先给a一个值再判断它大不大于 50根据结果给b赋值。:是赋值符号不是数学里的等号读作“把右边的值放进左边”IF ... THEN ... ELSE ... END_IF是一个完整的条件块END_IF后面的分号别漏。变量a、b你可以直接在程序里敲出来然后按回车键或者用鼠标点一下程序块外面的区域软件会自动弹出变量定义框让你声明——这是手册里明确写的两种定义方式之一另一种是提前在变量表里声明好。新手建议先用“边写边弹框”的方式写到哪里定义到哪里不容易乱。第三步编译。如果变量类型没冲突、语法没漏分号编译就能过。这时候你已经完成了一个最小可运行单元接下来所有复杂逻辑都是在这个骨架上加判断、加循环。提示输入指令名时支持联想敲完左括号再按 TAB 键能快速补全引脚。如果某个引脚后面显示???说明它是必填参数不能空着。3. 新手最先要掌握的三个基本功变量、判断、循环3.1 变量和类型先弄明白 D0、D0:D、D0:E 的区别ST 里所有操作都围绕变量转而新手最容易卡住的就是“类型”两个字。手册给了一个非常实用的简化规则以 D 元件为例D0默认是 16 位整型想要 32 位整数DINT写D0:D想要浮点型写D0:ERW 元件同理。你可以把它理解成“同一个抽屉贴不同标签决定里面放多大的东西”。为什么要在意这个因为如果你把一个浮点数塞进默认的 16 位整型里小数部分会丢算出来的结果和你手算对不上这种 bug 最难查。入门阶段记住一条就够做整数计数用默认写法做带小数的运算比如速度、位置换算就用:E后缀。变量名不区分大小写MotorOn和motoron是同一个但建议你从一开始就保持一种写法习惯后面程序长了不容易看花眼。3.2 条件判断IF 和 CASE 怎么选判断逻辑是 ST 用得最多的地方。手册里给了两个核心指令IF 和 CASE。IF 适合“条件有先后、有层次”的场景语法是IF 布尔表达式 THEN ... ELSIF ... THEN ... END_IF可以一层层往下判。CASE 适合“一个变量对应多个固定值”的场景语法是CASE Var1 OF value1: ... value2: ... ELSE ... END_CASE注意条件变量只能是整数。举个对比例子你要根据一个模式变量决定设备行为模式只有 1、2、3 三种用 CASE 就比写三个 IF 清爽但如果你的判断是“温度高于 80 且压力低于 5 才报警”这种组合条件就用 IF。新手常犯的错是拿 CASE 去判断浮点数或字符串编译直接报错——记住它只认整数。写 CASE 时每个分支末尾别忘了处理“其他情况”的 ELSE否则某个没列到的值进来程序行为就不确定了。3.3 循环FOR 管次数WHILE 管条件REPEAT 至少跑一次循环是 ST 相对梯形图最省事的地方。手册列了三种FOR、WHILE、REPEAT外加一个 EXIT 用来提前跳出。FOR 适合“我知道要循环几次”语法是FOR INT_Var : INIT_VALUE TO END_VALUE BY 步长 DO ... END_FOR步长不写默认是 1计数器是整数类型初始值大于结束值时循环体一次都不执行。WHILE 适合“只要条件满足就一直转”条件在循环体之前检查第一次就不满足就一次都不跑。REPEAT 则是先执行再检查所以循环体至少执行一次。三者怎么记我的血泪经验是数次数用 FOR等状态用 WHILE必须做一次再判断用 REPEAT。不管用哪个都要在脑子里过一遍“这个条件会不会永远成立”因为死循环会让程序卡死手册里专门用一整节讲死循环检测和报错说明这是新手翻车高发区。// 循环示例把数组前 10 个元素累加 sum : 0; FOR i : 0 TO 9 DO sum : sum data[i]; // 每次把当前元素加到 sum 上 END_FOR;这段代码里i是计数器从 0 走到 9共执行 10 次data[i]是数组取值sum累加结果。注意数组下标这里用的是常量范围手册在“数组下标注意事项”里明确提醒下标不能是软元件、不能是表达式、FB/FC 里不能是全局变量入门阶段先用常量下标最稳。4. 避坑指南新手最容易踩的五个坑4.1 现象程序编译过了但运行结果和手算对不上原因多半出在类型上。比如你把一个带小数的计算结果赋给了默认 16 位整型的 D 元件小数被截掉或者两个整数相除你期待得到小数结果只拿到整数部分。解决方法是涉及小数运算的变量定义时用:E后缀声明成浮点型除法前先确认两边类型必要时用显式转换手册里列了INT_TO_REAL、DINT_TO_REAL这类转换写法别指望它自动帮你转。4.2 现象循环一跑程序就卡住不响应原因基本就是死循环。WHILE 的条件永远为真或者 REPEAT 的 UNTIL 条件永远不成立循环体就出不来。手册里提到死循环会触发报警并停止运行数码管会有对应错误码提示。解决办法不是等它报错而是写循环时先问自己“什么情况下这个条件会变假”确保循环体里有能改变条件的语句实在需要中途退出用 EXIT 指令。4.3 现象数组访问报错或者取到的值莫名其妙原因是对数组下标的限制没吃透。手册明确列了五条常量下标不能超出数组大小、下标不能是软元件、FB/FC 中下标不能是全局变量、下标不能是表达式、复杂结构变量里不允许出现两个数组下标。新手最容易犯的是拿一个变量当动态下标结果编译或运行报错。入门阶段老老实实用常量下标等熟悉了再研究变量下标的合法用法。4.4 现象FB/FC 调用时编译报错说参数没给原因是没分清 FB 和 FC 的引脚规则。手册写得很清楚FB 的输入参数除了轴参数是必须的其他引脚可以不输入包括输出FC 的输入参数引脚必须输入否则编译报错输出参数可以为空。另外嵌套层数也有限制FB、FC 嵌套不能超过 8 层子程序嵌套不能超过 6 层。解决办法是调用时先按 TAB 键把引脚补全看到???的必填项就老老实实填上别想着跳过。4.5 现象在线修改时改不动或者改完行为不对原因是对在线修改的范围不清楚。手册列了限制不支持增删程序文件、不支持重命名、不支持修改程序文件属性、不支持加解密子程序、不支持修改配置全局变量支持增删和改名改注释但其他特性不能动FB/FC 局部变量里 IN/INOUT/OUT 类型不支持增删改Var 类型可以。新手在线改程序前先确认自己要改的东西在不在允许范围内不然改半天发现保存不了白忙一场。5. 下一步学什么从会写一行到能搭一个小逻辑走到这里你已经能新建 ST 工程、定义变量、写 IF 判断和 FOR 循环也知道了几个高频坑在哪。接下来别急着啃那一长串轴控指令和通讯指令那些是等你有了具体项目再按需查手册的内容。入门阶段真正该做的是把“小逻辑”写熟比如用 CASE 写一个三段式状态机用 WHILE 写一个“等待某个条件成立再继续”的流程用 R_TRIG 抓一个上升沿。手册里提到 R_TRIG/F_TRIG 的用法是在功能块实例表里新建实例然后在 ST 页里调用r_trig_ins(CLK : , Q );这种“实例化再调用”的写法是后面用所有 FB 的通用套路早点练熟不吃亏。学习路径我建议按这个顺序走第一周只碰变量、赋值、IF、CASE每天写一个小判断逻辑并编译通过第二周加循环重点练 FOR 和 WHILE每写一个循环都强制自己说出退出条件第三周开始碰 FB/FC 的调用和引脚填写理解“必填”和“可选”的区别之后再去看定时器指令TPR、TONR 这些和沿触发最后才碰轴控和通讯。这个顺序不是官方规定是我自己踩过坑之后觉得最不容易劝退的走法——一上来就看几十条 MC_ 开头的指令很容易还没入门就先放弃。阶段重点内容判断自己过关的标准第一周变量、赋值、IF、CASE能独立写出三路分支判断并编译通过第二周FOR、WHILE、REPEAT、EXIT能说清每个循环的退出条件不写出死循环第三周FB/FC 调用、引脚填写、沿触发能正确填完必填引脚理解???的含义第四周定时器、字符串、类型转换能组合两个以上指令完成一个小流程还有一个小技巧值得单独说善用鼠标悬浮提示。手册里写了鼠标停在变量上会显示变量名、类型、注释停在 FB/FC/指令上会显示函数名、类型、注释和引脚说明。这个功能对新手特别有用因为你不用来回翻手册查某个引脚是干嘛的停一下就有答案。我从那以后每次写不熟悉的指令都先悬浮看一眼引脚再下手省了大量编译报错来回改的时间。另外注释别偷懒单行用//多行用(* ... *)写的时候多花十秒回头查的时候少花十分钟。最后给你一个能立刻动手的小任务新建一个 ST 工程定义两个整型变量和一个浮点变量用 IF 判断第一个变量大于第二个时把浮点变量置为 1.5否则置为 0.5编译通过后在线看一下结果。跑通这个你就已经跨过了“ST 到底能不能学会”这道心理门槛。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?