☰
GUTTA梯形图编辑器:轻量级离线PLC编程工具
2026/9/26 7:06:30 网站建设 项目流程

简介: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采用“先选类型、再填地址”模式:

  1. 点击工具栏|>(常开触点)图标;
  2. 在画布任意位置单击,弹出地址输入框;
  3. 必须输入符号表中已定义的名称(如START_PB),若输错或未定义,会显示红色警告框并拒绝绘制;
  4. 同理,放置线圈时选择()图标,输入MOTOR_RUN;
  5. 用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实现。正确做法:

  1. 定义符号TRIG_EDGE | M | %M0.0 | 上升沿触发;
  2. 在Network中先放|P|(上升沿触点),地址填START_PB,输出连TRIG_EDGE;
  3. 再放TON线圈,地址填TIMER_TOF1,预设值填20(2秒);
  4. 最后用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.0X0按钮盒SB1-1
MOTOR_RUN%Q0.0Y0接触器KM1线圈
TIMER_TON1T1—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——毕竟在现场,客户只认输出端子亮不亮,不听你解释“符号表少了个%”。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询