简介:GUTTA Ladder Editor 1.1 是一款面向工业自动化领域PLC工程师与电气控制初学者的梯形图编程工具,专为Cortex-M3架构PLC(如EC20、EK51、EKSTM32等系列)设计,解决梯形图可视化编辑、仿真调试及多平台程序部署的实际需求。资源包共68个文件,含44个.vcw工程示例(覆盖I/O、PWM、SPI、I2C、AD/DA、定时器、通信协议等典型工业控制场景)、3个可执行文件(GuttaLad.exe主程序、uninstall.exe卸载工具及仿真器)、8个运行依赖DLL(Qt/VC/MFC等)、1个CHM帮助文档与1个PDF更新说明,整体体积仅6.83MB,轻量易部署。已有1168人学习下载,适合需快速上手国产PLC开发、理解底层硬件适配逻辑及开展教学实验的技术人员。用户可直接运行工程示例、查阅中文帮助文档、调试图形化逻辑块,并基于真实硬件型号(如EC30-EK51)开展闭环控制验证,显著降低PLC编程入门门槛。
1. 这不是又一个PLC梯形图编辑器:GUTTA Ladder Editor 1.1 是专为现场调试工程师设计的轻量级离线编程工具,3秒启动、不依赖运行时环境、支持直接导出STL/IL/ASM三类底层指令——它解决的是“没装TIA Portal却要改一行逻辑”的真实翻车现场
你刚被叫到产线急修一台老式欧姆龙CP1H控制器,客户明确拒绝安装任何大型IDE(理由很实在:上位机是Win7嵌套虚拟机,连.NET Framework 4.8都报错);或者你在做国产PLC兼容性验证,需要快速把一段梯形图逻辑转成汇编级指令对照时序;又或者你只是想在咖啡馆用笔记本临时画个启保停回路,发给同事看逻辑是否闭环——这时候GUTTA Ladder Editor 1.1.zip 就不是“可选”,而是“唯一能立刻打开就干活”的那个压缩包。它不模拟CPU、不生成项目文件、不绑定许可证,整个程序本体仅2.3MB,解压即用,所有操作都在单个.exe里完成。它不替代TIA Portal或GX Works2,但当你面对“必须现在改、不能装软件、不能联网、不能重启PLC”的三重限制时,它就是那个能让你在5分钟内导出带注释的IL代码、贴进客户SCADA脚本里的黑匣子工具。适合PLC现场工程师、自动化集成商技术员、高职院校实训教师——尤其适合那些电脑里常年只装着Chrome和微信、连Visual Studio都不敢点开的务实派。
2. 从零加载梯形图:理解GUTTA的工程结构与符号表约束,为什么它不支持“拖拽式IO映射”而坚持手动声明
2.1 GUTTA的工程本质:无项目文件、纯内存会话 + 符号表驱动的指令流
GUTTA Ladder Editor 1.1 不创建.prj或.gutproj这类项目文件,它的“工程”完全驻留在内存中,关闭即销毁。这意味着你无法像在GX Developer中那样保存“完整项目状态”(含硬件组态、注释块、在线监控数据)。它的核心是两个强制前置步骤:符号表定义和网络(Network)初始化。
- 符号表(Symbol Table)必须在绘图前完成:点击菜单栏
Edit → Symbol Table,弹出窗口中逐行输入地址名 | 地址类型 | 地址值 | 注释,例如:START_PB | I | %I0.0 | 启动按钮 MOTOR_RUN | Q | %Q0.0 | 电机运行输出 TIMER_TON1 | T | T1 | 5秒延时定时器注意:地址类型仅支持
I(输入)、Q(输出)、M(内部继电器)、T(定时器)、C(计数器)、D(数据寄存器),不支持DB块、结构体或指针。地址值必须严格遵循IEC 61131-3标准格式(如%I0.0,T1,C10),GUTTA不会自动补全或校验物理地址合法性——这是它轻量化的代价,也是避坑起点。
2.2 绘制第一个网络:用“触点+线圈”构建基础逻辑链,关键在于地址引用必须100%匹配符号表
打开File → New Network,空白画布出现。此时不能直接拖拽元件——GUTTA采用“先选类型、再填地址”模式:
- 点击工具栏
|>(常开触点)图标; - 在画布任意位置单击,弹出地址输入框;
- 必须输入符号表中已定义的名称(如
START_PB),若输错或未定义,会显示红色警告框并拒绝绘制; - 同理,放置线圈时选择
()图标,输入MOTOR_RUN; - 用
F键(或右键菜单)添加垂直母线,用Ctrl+Click拖拽连线。
# 这不是GUTTA的代码,而是它底层生成的IL指令示意(导出后可见) // Network 1: 启保停回路 LD START_PB // 加载启动按钮状态 OR MOTOR_RUN // 或上自锁触点 ANDN STOP_PB // 与非停止按钮(需在符号表中定义STOP_PB) ST MOTOR_RUN // 存储至输出线圈逻辑说明:GUTTA将每个Network视为独立的IL指令段,不支持跨Network的隐式跳转或标签调用。所有地址引用必须在当前Network内显式声明,且大小写敏感(
motor_run≠MOTOR_RUN)。参数说明:LD(Load)、OR、ANDN(And Not)、ST(Store)是GUTTA硬编码的IL指令集,不可增删或重命名——这是它兼容性保障的根基,也是你后续调试时读取反汇编的依据。
2.3 导出为可执行指令:STL/IL/ASM三格式差异与适用场景选择
GUTTA支持三种导出格式,对应不同下游需求:
- STL(Statement List):最接近PLC原生指令,适合粘贴进西门子S7系列或部分国产PLC的文本编辑器;
- IL(Instruction List):IEC 61131-3标准格式,通用性强,但部分老PLC需手动替换
LD为A、ST为=; - ASM(Assembly-like):GUTTA自定义汇编风格,含详细注释和地址映射,专用于教学分析或逆向验证。
导出操作:File → Export → Select Format → Save As。生成的文件是纯文本,无BOM头,UTF-8编码。
关键参数:导出时勾选
Include Symbol Comments可在每行指令后追加// START_PB类注释;勾选Optimize Jumps会合并连续LD指令——但慎用,某些PLC固件对优化后指令长度敏感。
3. 定时器与计数器实战:TON/TOF/CTU/CTD的配置陷阱与时间基准硬编码机制
3.1 TON定时器:不是填入“5s”就能用,必须手动计算时基脉冲数
GUTTA不提供图形化时间输入框(如“5.0s”),所有定时器时间值必须以时基脉冲数填写。其默认时基为100ms(即T1-T99对应100ms,T100-T199对应10ms,T200-T255对应1ms,此规则与欧姆龙CP系列一致)。
例如:要实现5秒延时,需在符号表中定义:
TIMER_TON1 | T | T1 | 50 // 50 × 100ms = 5000ms原因:GUTTA将定时器地址(如
T1)与预设值(50)绑定,导出时直接生成TON T1, 50指令。若误填5,实际只有500ms——这是新手最常翻车的点。
3.2 TOF断电延时:必须配合上升沿触发,否则逻辑失效
TOF在GUTTA中无独立图标,需用ED(Edge Detection)指令配合TON实现。正确做法:
- 定义符号
TRIG_EDGE | M | %M0.0 | 上升沿触发; - 在Network中先放
|P|(上升沿触点),地址填START_PB,输出连TRIG_EDGE; - 再放
TON线圈,地址填TIMER_TOF1,预设值填20(2秒); - 最后用
TRIG_EDGE常闭触点控制主输出。
# 导出IL片段示意 LD START_PB EU // 上升沿检测(GUTTA用EU指令表示) ST TRIG_EDGE LD TRIG_EDGE TON TIMER_TOF1, 20 // 20×100ms=2s LD TIMER_TOF1.Q // 定时器完成位 ANDN START_PB // 断电后保持输出 ST MOTOR_RUN参数说明:
EU(Edge Up)是GUTTA内置的边沿检测指令,不可省略;TIMER_TOF1.Q是定时器完成位,GUTTA不生成.IN或.ET等扩展属性——这意味着你无法在GUTTA内读取实时剩余时间,仅能使用Q位。
3.3 CTU/CTD计数器:复位逻辑必须显式连接,无自动清零
计数器无“复位端子”图标,需用常闭触点串联在计数输入前:
CTU C1, 10:计数器C1,预设值10;- 在
C1线圈前串接|/|(常闭触点),地址填RESET_BTN(需在符号表中定义); - 当
RESET_BTN为ON时,常闭断开,计数暂停且当前值保持;当RESET_BTN为OFF时,常闭闭合,计数继续。
注意:GUTTA不支持
R(Reset)指令单独复位,也不支持CTU指令的R参数。若需清零,必须用LD RESET_BTN; RST C1指令——但这超出GUTTA图形界面能力,需导出后手动编辑IL文件。
4. 避坑:五个让现场工程师当场重启电脑的典型问题与血泪解决方案
4.1 现象:符号表定义了%Q0.0,但绘图时输入MOTOR_RUN仍报“Address not found”
原因:符号表中地址值列填写了Q0.0(缺%前缀),而GUTTA严格要求IEC格式,Q0.0会被解析为变量名而非物理地址。
解决:检查符号表,确保所有地址值以%开头(%I0.0,%Q0.0,%M100),且类型列与地址值匹配(I对应%Ixx.x,Q对应%Qxx.x)。
4.2 现象:导出的IL文件在PLC下载时报“Invalid instruction at line 3”
原因:GUTTA导出的IL默认使用LD/ST指令,但部分国产PLC(如汇川H5U)要求A/=指令,且不识别TON而需写TMR。
解决:用文本编辑器全局替换:LD → A,ST → =,TON → TMR,CTU → CNT;同时确认预设值单位(H5U的TMR预设值为BCD码,需将十进制50转为十六进制32H)。
4.3 现象:定时器T1动作延迟远超设定值(实测10秒才触发)
原因:符号表中将T1的类型误设为M(内部继电器)而非T(定时器),导致GUTTA将其当作普通位处理,不生成TON指令。
解决:删除错误符号,重新添加,类型列务必选T;导出后检查IL文件是否含TON或TOF关键字。
4.4 现象:多个Network导出后指令顺序混乱,逻辑执行错位
原因:GUTTA按Network创建顺序导出,但Network编号(Network 1, Network 2…)不等于执行顺序。若Network 2逻辑需先于Network 1执行,GUTTA不会自动重排。
解决:在导出前,用Edit → Move Network Up/Down调整Network顺序;或导出后手动剪切IL段落,按PLC扫描周期要求重排。
4.5 现象:中文注释导出后显示为乱码(如“启动按钮”变“å¯å¨æé®”)
原因:GUTTA内部使用ANSI编码读取符号表,而Windows记事本默认UTF-8保存。
解决:用Notepad++打开符号表CSV,编码→转为ANSI,保存;或在GUTTA中避免中文注释,改用英文缩写(START_PB比启动按钮更可靠)。
5. 深度验证技巧:用GUTTA反向生成“最小可运行PLC程序”,通过三步交叉校验确保逻辑零误差
5.1 第一步:导出IL后,用Python脚本做语法树解析,捕获隐式逻辑缺陷
GUTTA不校验逻辑闭环(如线圈未被任何触点驱动),需人工或脚本验证。我常用以下Python片段扫描未驱动线圈:
# check_coil_usage.py - 验证IL文件中所有ST指令的源是否被LD/AND/OR覆盖 import re with open("export.il", "r", encoding="utf-8") as f: lines = f.readlines() # 提取所有ST目标(如 ST MOTOR_RUN) st_targets = set() for line in lines: match = re.search(r"ST\s+([A-Za-z_][A-Za-z0-9_]*)", line) if match: st_targets.add(match.group(1).strip()) # 提取所有LD/AND/OR源(如 LD START_PB, AND MOTOR_RUN) sources = set() for line in lines: for op in ["LD", "AND", "OR", "ANDN", "ORN"]: match = re.search(f"{op}\s+([A-Za-z_][A-Za-z0-9_]*)", line) if match: sources.add(match.group(1).strip()) # 找出未被驱动的线圈 unconnected = st_targets - sources if unconnected: print(f"⚠️ 未连接线圈: {unconnected}") # 如 {'MOTOR_RUN'} 表示该线圈无输入逻辑说明:此脚本不验证时序或定时器逻辑,只检查“是否有至少一个触点路径驱动该线圈”。参数说明:正则表达式
[A-Za-z_][A-Za-z0-9_]*匹配合法符号名,排除%I0.0等物理地址(因GUTTA导出时已转换为符号名)。
5.2 第二步:用Excel建立地址映射表,强制关联符号名与PLC物理地址
GUTTA不管理硬件IO分配,易导致符号名与实际端子错位。我坚持用Excel维护三列映射表:
| 符号名 | PLC地址 | 端子号 | 备注 |
|---|---|---|---|
| START_PB | %I0.0 | X0 | 按钮盒SB1-1 |
| MOTOR_RUN | %Q0.0 | Y0 | 接触器KM1线圈 |
| TIMER_TON1 | T1 | — | 100ms时基 |
关键动作:每次修改符号表后,同步更新此表;交付客户前,打印此表贴在电柜内侧——这是防止“改完逻辑却接错线”的后悔药。
5.3 第三步:在真实PLC上做“指令级单步注入”,用GUTTA导出的ASM验证执行路径
将GUTTA导出的ASM文件(含注释版)导入PLC调试软件(如CX-Programmer的Monitor模式),逐行比对:
- 观察
LD START_PB执行时,%I0.0状态是否实时变化; - 在
TON T1, 50行暂停,用万用表测T1.Q输出延时是否精确5秒; - 若偏差>±100ms,立即检查PLC系统时钟设置(GUTTA假设PLC时基为100ms,但某些固件需在系统块中启用“高速定时器”)。
从那以后我每次用GUTTA画完梯形图,都强制走一遍这三步:Python扫语法、Excel对地址、PLC单步验时序。不是因为信不过GUTTA,而是信不过自己手抖输错的%I0.0和%Q0.0——毕竟在现场,客户只认输出端子亮不亮,不听你解释“符号表少了个%”。希望帮到你。
本文还有配套的精品资源,点击获取