ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

汇川H5UEasy PLC指令手册:软元件、LiteST与运动控制通信排错

汇川H5UEasy PLC指令手册:软元件、LiteST与运动控制通信排错 简介这份手册面向电气工程师、软件工程师与系统工程师针对汇川H5U与Easy系列小型PLC的编程应用需求系统梳理了产品使用过程中涉及的指令体系与参考信息适合初次上手或需要查阅指令细节的自动化从业者。包内为1个PDF文件压缩包约25.98MB内容按前言、指令概要、软元件与变量一览表、版本变更记录、相关手册列表等章节组织便于按模块检索。指令部分覆盖LD语言与LiteST语言两套体系从词库构成、变量与操作符规则到基本指令、复杂应用指令及其示例逐条展开并配有错误代码列表与故障码更新说明。手册还给出位软元件、字软元件、特殊软元件及字元件位操作的定义与数据类型、初始化值并附2019年至2022年各版本的新增与修改指令记录如EIP通信、凸轮、轴组及LiteST表现等内容。目前已有4128人学习可作为日常编程查表与排错时随手翻检的案头参考。1. 先弄清软元件与执行顺序再翻《汇川H5UEasy系列PLC指令手册》的指令详解设备动作不对的时候多数人第一反应是怀疑指令写错了于是打开《汇川H5UEasy系列PLC指令手册》直接跳到第3章指令详解翻到 LDP 和 ANDP 那几页结果卡在更前面的问题上D0.8 到底动的是哪个寄存器、LiteST 的数组下标从 0 还是从 1 开始、32 位变量占了几个 D。这本手册的编排顺序其实给了一条更省时间的路径第1章指令概要和第2章指令速查表先吃透第3章的每条指令才会读得快。手册面向的是电气工程师、软件工程师和系统工程师。H5U 是紧凑型主机自带 16 路输入和 14 路输出Easy 系列是全场景紧凑型中小型控制器共 8 个机型覆盖严苛体积、多轴运控、温度控制、通信组网这些场景。手里是哪个机型直接决定你翻哪一页、哪些指令用得上。程序结构、软元件编号范围、支持的指令集合在不同机型之间有差别先确认型号再看指令能少走一整轮弯路。2. LD与LiteST双语言的触点指令软元件编号、变量声明与比较触点2.1 LD语言的指令构成操作码、操作数与执行修饰手册第1章把指令拆成两套语言来写LD 语言和 LiteST 语言。同一件事在两套语言里的写法不同操作数规则却是共用的。LD 语言每条指令的结构是「助记符 操作数 修饰后缀」助记符决定做什么操作数决定对谁做修饰后缀决定怎么执行。手册里每条指令都有「指令构成」小节把这三段分开列看那一小块比读整段文字说明快得多。操作数来源只有三类软元件X/Y/M/S/T/C/D/R 和特殊软元件、自定义变量、常数整型用 K/H浮点直接写小数。修饰后缀里最常用的是 P 和 D加 P 表示脉冲执行只在能流从断到通的那一个扫描周期执行加 D 表示 32 位双字处理占两个连续寄存器。MOV 和 DMOV、INC 和 INCP 就是同族指令的不同修饰版本。软元件的分工决定程序骨架先把这张底图记住。类别典型编号位宽主要用途输入X0 起1 位硬件输入映像H5U 主机 16 路输出Y0 起1 位硬件输出映像H5U 主机 14 路内部继电器M1 位中间逻辑、模式标志步进状态S1 位SFC 步进程序的状态位定时器/计数器T、C触点与当前值延时、计数数据寄存器D、R16/32 位参数、运算、通信映射特殊软元件SM、SD1/16 位系统状态、时钟、扫描周期提示X/Y 的点数、D/R 的编号范围、保持区怎么划分H5U 与 Easy 各机型并不相同实际能用多少以手册 1.1.3 节软元件和变量一览表为准程序里写了超范围编号在编译阶段就会报出来。字软元件还能按位取写成 D0.0 到 D0.F。这里有个容易踩的地方32 位数据占两个连续寄存器如果你把 DINT 或 REAL 变量分配到 D0它实际占用 D0 和 D1那么 D1 就不能再单独使用位操作 D0.8 到 D0.F 也等于在动 D1 的位。通信映射区旁边尤其容易撞车规划地址时把 32 位变量按偶数编号对齐能省掉后面大半排查时间。LiteST 多了一层声明。数据类型、初值、是否保持都在声明区写清楚编译后由系统分配地址写程序时关心变量名而不是寄存器号。VAR bStart : BOOL; (* 启动按钮 *) bStop : BOOL; (* 停止按钮 *) bRun : BOOL; (* 运行标志 *) nPulseCnt : DINT; (* 编码器脉冲计数32位 *) rLineSpeed : REAL; (* 线速度 m/min *) aRecipe : ARRAY[0..9] OF INT; (* 10 组配方参数 *) END_VAR bRun : (bStart OR bRun) AND NOT bStop; (* 起保停等价于梯形图的自锁 *)数组上下界在声明里显式写出ARRAY[0..9] 就是 10 个元素下标越界在运行时会出问题循环变量当索引时还要注意类型INT 索引做乘法容易溢出。结构体适合把一台设备的信号打包一台设备一个实例换机型只改实例数量不用重新数地址。TYPE ST_Cylinder : STRUCT bCmdExtend : BOOL; (* 伸出指令 *) bCmdRetract : BOOL; (* 缩回指令 *) bSwExtend : BOOL; (* 伸出到位 *) bSwRetract : BOOL; (* 缩回到位 *) bAlarm : BOOL; (* 动作超时报警 *) tTimeout : TIME; (* 超时时间 *) END_STRUCT END_TYPETYPE 与 END_TYPE 的具体位置、成员能不能带初值以手册 1.3.4 节为准。2.2 触点指令的取沿LD/LDI/LDP/LDF与AND/OR/MEP/MEF触点类指令解决两件事从哪里开始取条件以及怎么和前面的结果拼起来。LD/LDI 从母线开始取常开/常闭触点AND/ANDI 串联常开/常闭OR/ORI 并联常开/常闭。加 P/F 是取沿LDP 在触点接通的那一个上升沿成立一个扫描周期LDF 在断开沿成立一个周期ANDP/ANDF 把取沿和串联合并成一条指令。LD X0 (* 启动常开 *) OR M0 (* 自锁 *) ANI X1 (* 停止常闭低电平有效 *) OUT M0 (* 运行标志 *) OUT Y0 (* 运行输出 *) LDP X2 (* X2 上升沿只成立一个扫描周期 *) PLS M10 (* 输出一个扫描周期的脉冲 *) LD M10 INCP D0 (* 每次上升沿 D0 加一 *)ANDI 是串联常闭触点等价于「能流 AND NOT 触点」比先 LDI 再 AND 写得短。MEP/MEF 和前四个不是一类它们对「前面一整段逻辑块的结果」取沿所以接在 OR 块或括号之后用来抓组合条件的边沿比如「启动且气压正常」这个组合第一次成立时触发一次动作。注意边沿指令靠自身状态位记住上一周期的值。把它放进 CJ/LBL 跳转区间或者长时间不执行的程序块边沿会丢或者误触发跳转区间内尽量用普通触点。2.3 触点比较指令LD#/AND#/OR#三组与数据类型匹配比较触点把比较运算直接做成触点。手册 3.4.1 节把这类指令按数据类型分成三组LD#/AND#/OR# 一组FLDD#/FANDD#/FORD# 一组LDZ#/ANDZ#/ORZ# 一组。# 的位置放比较符、、、、、前面前缀决定它跟母线取、串联还是并联。三组分别对应不同的数据宽度和类型选哪一组取决于被比较的两个操作数本身是什么类型选错组编译能过、运行结果是错的这一条比指令名字更值得记。LD D0 K100 (* D0 大于 100 时接通 *) AND D10 K50 (* 且 D10 小于 50 *) OUT Y0 LD D20 D30 (* 两寄存器相等 *) OR D40 K0 OUT Y1用比较触点的好处是省掉一条比较指令和一个中间位能流在一行里判断完扫描周期更短。浮点比较要留意精度理论值 100.0 算出来可能是 99.99998习惯做法是写成区间判断比如大于 99.9 且小于 100.1。3.4.2 节的 LD*/AND* 是另一类把按位逻辑运算直接做成触点判断状态字的某一位时比「先 AND 再比较」两步写法清楚。哪一组用于哪种数据类型第2章指令速查表的触点运算分类里能一眼看全。3. 程序执行流控制OUT/SET/RST输出指令与CJ/CALL/FOR/STL流程指令3.1 输出控制指令OUT/SET/RST/ZSET/ZRST与双线圈问题输出类指令决定能流怎么落到软元件上。OUT 是线圈每个扫描周期都跟着能流刷新SET/RST 是置位复位动作之后一直保持到下一次被改变。这两类混用的后果就是双线圈同一个软元件在两个地方用 OUT程序从上往下扫描后面那条覆盖前面那条现象是「手动能动作、自动不动」或者反过来。规范的写法是同一个线圈只出现一次剩下的位置用 M 中转或者统一用 SET/RST。LD X0 ALT M0 (* 单键启停按一次置位再按一次复位 *) LD M0 OUT Y0 (* 输出跟随 M0 *) LD X3 ZRST M10 M20 (* 批量复位 M10~M20 *)ALT 用于单键启停这类场合做的是「每次接通翻转一次」。ZSET/ZRST 是区间批量置位/复位写区间时起点编号要小于等于终点区间里不要跨进专用软元件上电初始化里用一次 ZRST 清一批标志位比写几十条 RST 干净。指令行为保持特性典型场景OUT每周期跟随能流不保持普通线圈、指示灯SET / RST置位或复位后保持看软元件所在区报警锁存、模式切换PLS / PLF输出一个扫描周期脉冲不保持计数触发、单次动作ALT每次接通翻转不保持单键启停ZSET / ZRST区间批量置位/复位同各软元件上电初始化、批量清标志3.2 跳转与标号CJ/LBL区间的状态保持CJ 和 LBL 成对使用条件成立时跳过中间的指令段。跳过的区段里输出保持跳转前的状态不再刷新定时器停止累计边沿标志也不更新这正是最容易出问题的地方把需要持续刷新的逻辑放进跳转区条件切换瞬间会出现一个动作粘连或者丢步。跳转目标编号在同一程序里不能重复跳转也不能形成环。LD M100 (* 手动模式标志 *) CJ P10 (* 条件成立跳到标号 P10 *) LD X0 OUT Y0 (* 只有自动模式才执行这一段 *) LBL P10 LD X20 OUT Y1跳转区间内不要横跨 FOR/NEXT 循环和 EI/DI 中断控制区否则循环计数和中断状态都会乱。CJ 与 LBL 的标号写法以手册 3.2.2、3.2.3 两节的示例为准不同机型的指针编号范围不一样。3.3 子程序与中断控制CALL/SSRET、EI/DI与WDTCALL 调用子程序子程序末尾用 SSRET 返回条件调用可以把一段只在特定模式下执行的逻辑挪出主扫描。子程序里不要直接驱动主程序已经驱动的线圈参数尽量通过变量传递用 FC/FB 带引脚的形式比直接操作全局软元件好维护。EI/DI 是全局中断允许与禁止DI 期间中断程序不响应但输入仍在被扫描长时间 DI 会漏掉高速输入信号。LD M0 CALL P0 (* 条件调用子程序 P0 *) LD Y0 OUT Y10 LBL P0 (* 子程序入口 *) LD X10 MOV K100 D0 SSRET (* 子程序返回 *)WDT 是看门狗定时器复位指令用在单次扫描时间可能超限的场合比如大循环排序、大批量数据处理。做法是在长耗时循环里插入 WDT 让看门狗重新计时但这只是补救更稳的办法是把长任务拆到多次扫描里分片执行。3.4 FOR/NEXT循环与STL步进状态机FOR/NEXT 的循环体在一个扫描周期里连续执行 N 次N 大时扫描周期近似线性增长所以循环里不要放延时等待类逻辑也不要在循环里做通信收发。循环变量用整型NEXT 前不要用跳转指令跳出去。写数据处理时把循环次数控制在几十到几百的量级上千次就该考虑分片。SFC 步进用状态位 S 表达流程STL 进入某一步RET 结束步进程序OUTSTL 驱动该步的输出SETSTL 置位下一步RSTSTL 复位当前步或指定步。相比用一堆 M 标志写流程步进结构每一步的执行范围明确调试时看哪个 S 是 ON 就知道卡在哪一步。STL S0 LD M10 (* 启动条件 *) SETSTL S20 (* 进入步 S20 *) OUTSTL Y0 (* 该步驱动输出 *) RET STL S20 LD X5 (* 到位信号 *) SETSTL S21 RSTSTL S20 (* 复位当前步 *) OUTSTL Y1 RET步进程序里同一条输出尽量不要在两个步里都驱动需要跨步保持的输出用 SET 置位、在其他步 RST 复位。并行分支和选择分支的写法在第3.3 节有专门的图示复杂流程先按图示把分支结构画清再敲代码。4. MC_*运动控制与EIP通信指令轴参数、电子凸轮与批量数据映射4.1 轴单位与参数配置MC_SetAxisConfigPara、ENC_SetUnit、ENC_SetLineRotationMode运动控制指令报参数错误的十次里有七八次是单位没配。顺序上必须先配轴参数、再设单位、再使能最后才发运动指令反过来写轴要么不动要么走到离谱的位置。A11 版新增的 ENC_SetUnit 和 ENC_SetLineRotationMode 就是解决两个具体问题前者定义「1 个用户单位等于多少脉冲」后者决定总线编码器轴按直线还是旋转模式处理旋转轴过零点时是否连续。顺序配置内容相关指令检查点1轴类型、脉冲当量、减速比MC_SetAxisConfigPara电机一圈脉冲数与机械减速比2用户单位换算ENC_SetUnit1 用户单位对应多少脉冲3旋转或直线模式ENC_SetLineRotationMode旋转轴过零点是否连续4使能、回零使能类与回零类 MC 指令伺服使能信号、原点开关5位置与速度运动位置/速度类 MC 指令目标是否在软限位内单位换算可以按机械链算一遍。电机编码器 10000 脉冲一圈减速比 5:1同步轮 20 齿、节距 5mm负载转一圈移动 100mm负载转一圈需要电机转 5 圈也就是 50000 脉冲那么 1 用户单位取 1mm 时就是 500 脉冲。把 500 填进单位设置后面写目标位置直接写毫米数改机械结构时只改这一个参数。(* 轴参数配置骨架参数项与调用顺序以手册 MC_SetAxisConfigPara 一节为准 *) MC_SetAxisConfigPara( Axis : Axis_1, bExecute : bCfgTrig, (* 上升沿触发一次 *) bDone bCfgDone, bError bCfgErr, nErrorID nCfgErrID); (* 出错时拿这个编号查错误代码列表 *) (* 设完单位再使能使能成功后再发运动指令 *)4.2 速度叠加与位置触发MC_SetOverride、MC_FollowVelocity、MC_DigitalCamSwitchMC_SetOverride 是在已有运动规划上叠加一个速度倍率适合运行中换规格降速、对刀时微调速度。它在保持轨迹的前提下改速度所以不要把它当停止用也不要在回零过程中改倍率否则原点判断条件可能失效。MC_FollowVelocity 用于从动轴跟随主动轴速度追剪、收放卷这类场合常见使用前从动轴必须已经使能且处于可被控制的状态。MC_DigitalCamSwitch 是位置触发输出用轴的实际位置做比较替代定时器触发。定时器触发受扫描周期和速度波动影响同一位置在不同速度下触发点会漂位置触发把重复精度交给编码器分辨率高速段优势明显。(* 位置触发输出主轴到达设定位置时输出置位 *) MC_DigitalCamSwitch( Axis : Axis_Master, nPosition : nCamOnPos, (* 触发位置用户单位 *) bEnable : bCamEnable, bOut bCamOut, bError bCamErr, nErrorID nCamErrID); (* 凸轮表按角度写入数组避免一条条赋值 *) FOR nIdx : 0 TO 359 DO aCamTable[nIdx] : rCamData[nIdx]; (* 每度一个从轴位置 *) END_FOR;做电子凸轮时凸轮表相邻段的斜率要匹配衔接点速度不连续就会在拐点抖一下现象是从动轴在某个角度附近有异响。凸轮表点数多的时候用数组加循环写入比几百条赋值指令好改。4.3 EtherNet/IP通信与从站恢复ETC_RestartMaster与映射区规划EIP 通信相关指令是 A10 版新增的。隐式报文周期性地交换 I/O 数据落到固定映射区显式报文用于读写单个对象、做配置。映射区的规划有两原则一是留成连续块方便整块拷贝和监控二是和掉电保持区错开避免通信刷新把要保存的参数冲掉。掉站恢复用 ETC_RestartMaster重启前先把该从站相关的输出置零重启后再校验映射区数据是否有效不要在轴运动过程中重启主站。(* 通信映射区整块搬进设备结构体减少散落的地址引用 *) stDevice.bReady : bEipReady; (* 通信就绪标志 *) stDevice.nSpeed : nEipSpeedRaw; (* 原始值按协议缩放 *) (* Modbus RTU 读回的 32 位数据高低字顺序常与 PLC 相反 *) nLow : D100; nHigh : D101; nValue : nLow * 65536 nHigh; (* 重新拼成 32 位 *)高低字顺序不确定时先把两个寄存器都监控起来用手动改值的方式验证顺序再写进程序也可以直接用字交换类指令比自写乘加直观。4.4 数据处理类指令RAMP/DRAMP斜坡、SORTC排序与DECO/ENCO编解码RAMP/DRAMP 是 16 位与 32 位斜坡输出把阶跃给定变成斜线给定常用在变频器加减速给定、比例阀缓启动。斜坡时间参数与扫描周期无关程序里不用再手动加延时上升和下降时间可以分开设停机时的缓降就靠这个。排序类指令有 SORTC/DSORTC/SORTR/DSORTR 四支覆盖 16 位与 32 位、升序与降序的组合具体用哪一支看指令列表里的数据类型列。它常用于一组采集值取中值、或者按工位号排列配方。排序会占扫描周期几百个元素以上的表放到低优先级任务或者中断里做。DECO/DDECO 解码是「位号转位模式」把第 n 位置 1 展开成一个字ENCO/DENCO 编码反过来把只有一个 1 的字压成位号。工位号驱动工位指示灯这种需求用一条解码指令就够比写一串比较触点干净。位宽有限16 位版本只覆盖 16 个位位号超范围时结果是全 0这个现象容易被误判成指令没执行。5. FB/FC封装与在线排错把指令手册当调试手册用5.1 带状态用FB、纯计算用FC功能块 FB 带背景数据区内部状态跟着实例走函数 FC 没有状态输入输出一次算完。气缸控制、轴控、报警管理这类有中间状态的逻辑用 FB一个实例管一台设备多台设备复制实例即可。单位换算、限幅、比例缩放这类纯计算用 FC不占背景数据。手册 1.5.4 节讲 FB 设置初始值时提到一个常见现象实参分配在掉电保持区时实例第一次执行不会用新初值覆盖已保持的值调试时觉得「初值明明改了却没生效」多半是这里。1.5.3 节的授权功能块调用方式和普通 FB 一致但内部逻辑不可见出错只能看错误码和引脚输出做项目时把这类块的错误输出都接到报警字上。5.2 错误码、速查表反查与在线监控每条指令详解末尾都有错误代码小节故障码列表本身也在随版本更新A08、A09 两个版本都改过这一节手上 PDF 版本旧了会对不上号。轴类指令出错先读 nErrorID 再查表不要先怀疑机械总线类报错先看从站通信状态确认拓扑和电源之后再用 ETC_RestartMaster反复重启只会掩盖真正的问题。速查表反查是最实用的一招。第2章的两张表分工明确2.1 是 LD 和 LiteST 都能用的指令2.2 只有 LiteST 支持。用梯形图写不出某条指令时先查它是不是只列在 2.2 表里能省掉大量试错。现场排查时把两张速查表导出成表格按「功能分类」「指令名」「支持语言」三列建索引先按功能筛出候选指令再去看对应详解里的操作数和错误码比在 PDF 里翻页快得多。程序头注释里写上所用手册的版本号下次查错误码能直接判断手里的资料对不对得上。本文还有配套的精品资源点击获取
返回列表