ISaGRAF 3.4老牌IEC 61131-3开发环境安装编程与迁移全攻略 简介ISaGRAF 3.4编程软件压缩包面向工业自动化控制系统的开发与调试工程师尤其适合基于IEC 61131-3标准构建PLC、运动控制或过程控制项目的团队。软件支持IL、ST、FBD、LD、SFC五种标准编程语言兼顾不同场景的编程习惯便于设计、仿真和排错。压缩包共176个文件大小5.74MB主要包含dll动态链接库、exe可执行文件、hlp帮助文档以及pia、bia等I/O配置文件并附有doc、dat等补充材料dll用于支撑运行环境exe提供主程序入口hlp便于随时查阅功能说明整体结构紧凑适合直接安装使用或作为离线资料查询。已有1414人学习浏览说明该版本在工业控制开发中具备一定关注度。包内提供中文版软件与帮助文档显著降低入门门槛同时涵盖编译器运行组件、诊断模块、可视化界面资源及项目管理相关文件可帮助用户直观感受3.4版本在性能优化、库扩展、硬件兼容与仿真测试等方面的改进适合需要跨平台编写控制逻辑或维护多设备项目的工程师参考学习。1. ISaGRAF 3.4在工控现场还能打的老牌 IEC 61131-3 集成开发环境从旧产线备份盘或项目移交U盘里翻出“ISaGRAF版本 3.4编程软件.zip”时很多工程师的第一反应是这玩意还能不能跑答案是可以的前提是摸清它的脾气。ISaGRAF 3.4是一套基于IEC 61131-3标准的PLC/DCS开发工具在火电辅控、水处理、油气输送以及一批国产DCS控制器上部署得不少。它一个Workbench里同时提供LD、FBD、ST、SFC、IL五种编程语言以POU、资源、任务三层结构组织整套逻辑和现在主流IDE的工程范式差别很大。这套笔记按解压、安装、授权、建工程、编译、仿真、下载这条完整链路展开适合正在维护旧控制柜、需要读懂并维护老逻辑、或者打算把老工程迁到新硬件平台的工程师。看成型的逻辑久了你会发现ISaGRAF像一套小但完整的黑匣子把它的变量表和任务模型理顺再古怪的旧逻辑也有迹可循。2. 理解ISaGRAF 3.4IEC 61131-3的工程组织与编程语言选择2.1 从POU、资源到任务ISaGRAF的程序模型ISaGRAF对程序的划分方式和通用PLC不太一样。它的最低复用单元是POUProgram Organization Unit程序组织单元分成三类程序型POU是顶层入口可以关联到任务被周期调度功能块型POU有记忆、有实例通常在内部声明自己的局部变量用多次实例化实现重复逻辑函数型POU没有静态记忆输入相同输出就相同适合做数学转换、限幅、查表这类不带状态的运算。POU内部按声明区、代码区组织。声明区写变量类型、初值、输入输出参数代码区用你选定的语言写算法。项目里允许不同POU混用不同语言同一个被调用的功能块也可以被不同语言的POU调用。这是ISaGRAF相对保守界面的一个优势它把语言选择完全放开而很多主流IDE在FBD块里嵌入其他语言时总要绕一层。下面是最小POU骨架用ST语言演示声明区和代码区的边界PROGRAM Heartbeat VAR BlinkCnt : INT : 0; Led : BOOL : FALSE; END_VAR BlinkCnt : BlinkCnt 1; IF BlinkCnt 1000 THEN BlinkCnt : 0; Led : NOT Led; END_IF;这种结构里VAR到END_VAR是声明区下面到END_PROGRAM之前是代码区。ISaGRAF对POU的命名和变量作用域有一套自己的规则POU名在整个工程里必须唯一功能块实例名也是全局标识这点跟C语言的文件级静态变量很像写多了自然明白它在管控什么。POU之上是全局变量表定义跨模块共享的信号、设备映射点、报警状态。全局变量分GLOBAL和LOCAL两类但我通常只用全局表保存跨POU的通信量模块内的状态全部放到功能块自己的局部变量里这对后续复用和仿真都有好处。再往上就是资源和任务。资源对应一个物理执行单元比如一个控制器CPU或一个冗余控制站的运算内核任务定义执行属性周期时间、触发条件、优先级。你在任务里挂哪些POU就决定了哪些逻辑会运行、多少毫秒来回一次。这一层很容易让人踩坑两个POU即使都放在同一任务里ISaGRAF也按它们在任务中的排列顺序逐条执行如果A POU的输出要作为B POU的输入而B排在A前面这一个扫描周期的值就是旧的产生一个周期的相位延迟在PID串级或顺序控制里表现特别明显。2.2 五种语言怎么选LD、FBD、ST、SFC、IL的适用边界ISaGRAF 3.4一套环境同时支持五种IEC 61131-3语言对做第三方控制器方案的人来说性价比很高。但从工程习惯角度我看到的旧项目分布基本是继电器联锁用LD模拟量调节和报警阈值用ST或FBD工艺步进用SFC老的进口程序翻译则残留IL片段。语言典型应用上手难度在ISaGRAF里的支撑LD继电器控制、电机启停、联锁回路低触点/线圈/置位复位完整FBD回路调节、逻辑组合、复杂运算中功能块库丰富可自建功能块ST数学计算、算法、数据处理中高类似Pascal支持IF/CASE/FOR/WHILESFC顺序控制、步进工艺中支持步、转换、并行分支IL底层逻辑迁移、翻译旧程序高指令集完整但日常少用把各自的边界讲一下。LD的优势是直观触点和线圈的串并联跟电气回路一一对应电工和调试人员都能直接读缺点是循环、数组、特殊运算表达费劲只能靠弥合逻辑块补齐。FBD优势是把算法变成块图调用PID、比较器、定时器、计数器这些库块拖进去连线就行既清晰又能作为系统组态图给甲方评审缺点是复杂状态机在图上会连成毛线团。ST的优势是接近高级语言能写循环、数组、字符串、结构体适合把算法集中在一个功能块里缺点是现场人员不一定人人愿意读代码。SFC适合描述“先做什么再做什么”的工艺序列允许并行分支和跳转在批次控制、清洗流程里特别好用缺点是它和变量时序的交互规则复杂新手容易把步间逻辑写漏。ISaGRAF里每个POU在新建时必须选语言但选完不是锁死的。右键切换语言可以只是ISaGRAF会提示有表达式无法无损转换。我从一个项目里见过LD转ST后留下一整段跳转指令堆在代码底部读起来像天书。所以语言选择尽量在POU规划阶段定下来而不是让项目组中途无理由换语言。2.3 编译与运行机制Workbench和Runtime是两台机器理解ISaGRAF的部署方式关键是把“开发环境”和“运行环境”拆开。Workbench是PC端IDERuntime是运行在DCS控制器、PLC或嵌入式板卡上的目标程序。你用Workbench写的POU经过编译后生成的不是目标CPU的机器码而是Runtime能解释执行的中间代码。这个设计属于虚拟机思路好处是控制器可以跑在不同CPU架构上只要Runtime移植过去同一套POU就能通用。编译产物一般分成两块一块是Runtime能解释执行的字节码另一块是变量符号与内存地址的映射表。下载时Runtime先接收字节码再按映射表分配内存地址。这也是为什么在线修改逻辑比离线下载受限制更多——Runtime的地址分配按原工程生成你在Workbench里改了变量表新旧映射对不上Runtime就要求完整下载或重启。这段尤其要提醒ISaGRAF 3.4和后续高版本之间的编译产物格式并不保证兼容。同一个POU源码可以带回但工程里带的任务、资源映射、I/O绑定是控制器厂商根据自己的Runtime生成的跨版本迁移时一般只迁移POU源码不要奢望把所有资源设置原样搬过去。我习惯把Workbench和Runtime想象成前台和后台两个角色调试时连的是后台改逻辑要同时照顾前台的周期与通信端口很多诡异现象就能解释通了。3. 把 ISaGRAF 3.4 装在旧Windows上环境准备与许可证处理3.1 先判断运行平台兼容性、虚拟机与驱动按我的经验ISaGRAF 3.4时代的主流通用系统是Windows 2000 Pro和Windows XP SP3部分修正版本能支撑Windows 7 32位。Windows 10/11上直接装有两条绕不过去的坎旧安装向导里嵌的VB运行库和COM组件没有兼容模式装到一半提示安装进程停止加密狗驱动不带新系统签名设备管理器里看得到叹号Workbench死都不认。因此工程上最稳妥的方式是开一台Windows 7 32位虚拟机或者用旧笔记本装XP当调试机。我一般用虚拟机方案虚拟机网络设置成桥接方便后面通过以太网下载到现场控制器USB设备控制器里要把加密狗透传给虚拟机否则许可证检测还是过不了。选定平台之后先把系统所有必要更新打完关闭自动更新还要关掉UAC。旧版Workbench安装时会往系统目录写文件UAC导致写入不完整后面会出现“启动报错找不到COM组件”这类问题。3.2 解压安装包结构确认与英文路径拿到zip第一件事不是双击Setup.exe而是先解压到纯英文路径。ISaGRAF 3.4的老式安装脚本在写注册表和安装路径时用的是长短文件名混合方式带中文或空格会在路径解析时截断。# 解压 ISaGRAF 3.4 编程软件 zip 包目标路径必须纯英文且不带空格 Expand-Archive -Path D:\downloads\ISaGRAF版本3.4编程软件.zip -DestinationPath C:\ISaGRAF34\pkg -Force # 查看前30个文件确认是否存在 Setup、Drivers、Doc 等目录 Get-ChildItem -Path C:\ISaGRAF34\pkg -Recurse -File | Select-Object -First 30 | Select-Object FullName展开后常见布局是Setup目录放安装程序Drivers目录放加密狗与通信驱动Doc目录放手册。检查Drivers目录时要注意驱动文件名特征看到HASP、Sentinel、KeyPro这类字眼代表的是不同硬件加密方案驱动要按具体芯片选不能随便装一个万能版。如果包里只有一个license.dat或一串字符串那就是软授权后面授权文件位置放对即可。安装入口一般是Setup.exe。如果系统报兼容性问题右键属性、兼容性、选择Windows XP SP2再加管理员运行。不要上来就用静默参数先跑一遍向导模式留意中间弹出的授权类型选项这步后续要记进移交说明。3.3 按顺序安装主程序与加密狗驱动安装顺序有一条血泪经验先装主程序再装加密狗驱动最后插狗启动。反过来装驱动和Workbench的注册表对应关系会错位导致Workbench启动时找不到狗。如果厂商提供的版本比较旧Setup.exe没做自动检测那就只能手工到控制面板里卸载重来比较伤时间。# 进入解压目录定位安装入口 Set-Location C:\ISaGRAF34\pkg # 列出目录下的可执行安装包 Get-ChildItem -Name -Filter *Setup*.exe # 运行安装向导并等待结束若当前PowerShell不是管理员请先右键以管理员身份重开 Start-Process -FilePath .\Setup.exe -WaitStart-Process会以当前用户权限启动如果系统UAC开启脚本不会自动弹提权框最稳妥的做法是在管理员PowerShell里重新执行。安装一路点Next到选安装组件时不建议全部装Workbench核心一定要装模拟器和帮助文档按需通信驱动与控制器型号对应不确定时把会出现的型号全部勾上后面换控制器就少补一次。3.4 授权文件放置与许可验证软授权方式下Workbench启动时会在固定几个位置搜索许可文件。我就吃过一次亏把license.dat放在安装根目录Workbench平时能打开可编译的时候提示no license。查了大半天发现这个发行版的3.4要求文件放在系统目录下。这个因打包方而异所以放授权文件前先看安装目录下是否有空的参考文件或readme说明。# 以常见方式放置授权文件到安装目录路径按实际安装盘符修改 Copy-Item C:\ISaGRAF34\pkg\license.dat -Destination C:\ISaGRAF34\Workbench\ -Force # 验证文件就位返回 True 才算成功 Test-Path C:\ISaGRAF34\Workbench\license.dat # 若Workbench依然提示授权异常检查系统目录是否存在 Test-Path C:\Windows\System32\license.dat这个命令只是常见做法具体放置位置要以包内说明为准。部署完成后先启动一次Workbench验证能正常进入主界面就说明授权基本没问题。还有一个小习惯安装完把驱动目录单独备份到交接U盘因为现场控制器换电脑后这包驱动往往是最后找不齐的东西。4. 在ISaGRAF Workbench中建立第一个PLC项目从变量表到仿真器4.1 新建工程与全局变量表定义我拿最简单的电机启停回路做示例给刚接触ISaGRAF的人演示时就常用这个几分钟能走通全流程。先启动WorkbenchFile、New Project输入项目名称选择目标类型。目标类型里最常用的是Simulator它让Workbench在一个模拟Runtime中跑所有逻辑不连真实控制器适合验证算法与逻辑正确性等你后面拿到真实控制器再到Project、Set Target里改类型逻辑本体完全不用动。新建工程后双击全局变量编辑器添加四个信号StartBtn、StopBtn、MotorRun、Fault数据类型全是BOOL初值设为FALSE。为了更接近现场我还会加两个TIME类型变量OnDelay和OffDelay分别作为启动延时和停机延时这样一上来就能验证定时逻辑的用法。变量名类型初值说明StartBtnBOOLFALSE启动按钮或DCS远程启动指令StopBtnBOOLFALSE停止按钮或DCS远程停止指令MotorRunBOOLFALSE电机运行状态输出FaultBOOLFALSE外部联锁故障信号OnDelayTIMET#0s启动延时OffDelayTIMET#0s停机延时ISaGRAF变量命名规则比较宽但我的建议是全部用小写字母开头单词间用大写分段禁止下划线开头的系统保留名。数据类型务必要在声明区对齐ISaGRAF的隐式类型转换很有限INT和REAL混用会在编译时报出类型不匹配声明写严谨能省去大量编译垃圾信息。4.2 编写启停逻辑ST版本与FBD等价实现双击新建程序型POU语言选ST进入代码区。以下ST代码做的事启动条件满足时置位运行停止条件或故障触发时复位运行带了一段软启动延时。在ISaGRAF的ST语法里IF-ELSIF结构支持多重条件最需要注意的就是优先级顺序。PROGRAM MotorControl VAR StartBtn : BOOL; StopBtn : BOOL; MotorRun : BOOL; Fault : BOOL; DelayCnt : TIME; END_VAR IF (StopBtn OR Fault) THEN MotorRun : FALSE; ELSIF (StartBtn AND NOT Fault) THEN IF DelayCnt T#3s THEN DelayCnt : DelayCnt T#100ms; (* 启动延时累积 *) ELSE MotorRun : TRUE; END_IF; ELSE DelayCnt : T#0s; END_IF;这段代码用下方延时替代了定时器块原理是在启动条件保持且无故障时每扫描周期把DelayCnt累加100ms时间到后置位MotorRun启动条件消失就清零。这里T#100ms是TIME类型字面量的IEC写法ISaGRAF统一用这种格式。把启动延时写进逻辑而不是用硬件继电器延时好处是调试时能在仿真器里精确改时间参数不用去现场拧螺丝。同样的逻辑用FBD表达就是拖入三个触点块、一个延时功能块、一个RS锁存块连线。FBD适合写给人看的组态图ST适合写给自己维护的算法。在ISaGRAF里同工程两种语言可以并存我把联锁逻辑写成FBD把PID和计算写成ST功能块然后在上层SFC的步进动作里调用这些功能块这是比较通用的分层方式。4.3 编译、下载到仿真器与变量监控写完逻辑后菜单找Build或CompileISaGRAF会在编译窗口给出一堆检查信息。看到Error就停看到Warning要分轻重比如未使用的变量不影响运行但疑似未初始化的变量要回头补。编译通过后目标类型选Simulator然后执行Download把中间代码推给模拟Runtime。# IDE内操作不是命令行这里给一个编译前检查变量声明的辅助脚本 $pouContent Get-Content -Path motor.pou -Encoding Default $inVar $false $pouContent | ForEach-Object { if ($_ -match ^VAR) { $inVar $true } if ($inVar -and $_ -match ^\s*([A-Za-z_]\w*)\s*:) { Write-Output $Matches[1] } if ($_ -match ^END_VAR) { $inVar $false } }这个脚本把POU文件里VAR区内的变量名全部打印出来核对一遍能提前发现拼写不一致。监控窗口里把StartBtn、MotorRun、Fault拖进去然后通过右键或强制对话框把StartBtn改为TRUE。观察运行输出MotorRun应在启动延时累积至3秒后变为TRUE再把Fault改成TRUEMotorRun应该立刻变回FALSE因为故障优先级最高。仿真这一步验证的是逻辑正确性到了真实控制器上还要验证I/O通道扫描、通信周期这些外部因素。仿真没过就直接下现场是我见过许多项目翻车的常见起点。5. ISaGRAF 3.4 使用过程中的避坑与常见问题排查5.1 现象Workbench启动后卡在初始化画面原因常见有三处加密狗驱动没装或硬件狗没被操作系统识别授权文件路径不对安装目录带中文导致COM组件注册失效。还有一个高频因素是安装时没关UAC关键注册表项写入不完整。解决先到设备管理器查看是否有带叹号的加密狗设备没有就重装Drivers目录下对应驱动有但启动卡把授权文件复制到系统目录或按说明指定位置依然不行把Workbench以管理员身份运行一次让它重新补写注册信息。这个问题基本就这三类按顺序排查不会错。5.2 现象编译报错“type mismatch”并且满屏都是原因多半是变量声明区里INT和REAL混着做运算或BOOL直接和INT比较。ISaGRAF的隐式类型转换范围很有限它选择严谨地拒绝而不是自动转换报错就会集中在表达式里。解决在ST里改用显式转换函数。ISaGRAF提供REAL_TO_INT、INT_TO_REAL等转换功能块赋值两侧类型统一后就干净了。另外检查功能块引脚类型PID块的P、I、D参数、偏差输入必须是REAL如果从INT变量直接接线就会报类型不匹配先转换再接。5.3 现象下载程序到控制器进度条到一半就超时原因连接层面看着没问题实际多半卡在任务配置和通信端口上。以太网方式最常踩的是PC网卡和控制器不在同一IP段或者现场设备有防火墙拦截了Workbench与Runtime之间的数据通信。解决先ping控制器IP通了再检查Workbench里的连接配置页确认端口和控制器侧一致。如果控制器侧没勾选远程编程口下载时它不会响应这个选项在不同控制器上叫法不一样常见的是Enable Remote Access。要现场改控制器参数通常得走就地操作面板把它打开后重新下载。5.4 现象下载成功但控制器里逻辑不执行输出灯毫无反应原因这是任务调度问题。POU没有绑定到资源里的任何任务编译器不报错但Runtime不知道何时执行这段程序自然没有输出。我在旧项目里多次见过新加的POU只建了资源忘了挂任务。解决打开资源编辑器建一个周期任务周期比如100ms把程序POU加入到该任务的任务列表中编译下载再观察。任务周期直接影响执行节奏开关量回路100ms足够高速计数、PID内环建议50ms或更低但任务越多CPU负担越大要按系统剩余算力定。5.5 现象在线修改逻辑后现场设备出现一次异常动作原因这属于最凶险的坑。在线修改触发Runtime热更新热更新过程往往先执行旧逻辑再装载新字节码某些输出软锁存被重新初始化或时序重排产生一个瞬间的错误状态。尤其是在用置位/复位指令的锁存逻辑上新变量初值会覆盖原运行状态。解决生产设备在线修改前先把关键输出打到强制状态明确输出值不会跳动再进行在线下载。修改逻辑尽量只增不删不要动已有POU的变量声明区把新增逻辑放在独立POU里下载。如果必须改声明就做好停机重启准备不要赌Runtime的热加载没有副作用。6. 把3.4的老项目迁到新环境导出与迁移技巧老项目迁到新环境最不该做的就是把整个工程文件夹原样拖过去双击打开。ISaGRAF各小版本的工程格式有差异直接开新版本可能打开后任务映射错乱。我常用的迁移流程是三步先从旧工程里把POU源码和全局变量表分别导出成文本和CSV再到新工程里重建资源、任务、POU最后手工核对I/O映射表再编译下载。导出动作在Workbench的菜单里完成整个过程本质是逐POU复制。复制之前先建一个文本归档目录把POU的声明区、代码区全部导出变量表导出为CSV这一步能让你在迁移后快速做语法级对比。如果变量数量大先用PowerShell按类型筛一遍把变量名映射成统一命名规范后再用到新工程里# 导出后的旧全局变量表CSV按类型拆分便于对照 $vars Import-Csv -Path global_vars_old.csv $vars | Where-Object { $_.Type -eq BOOL } | Select-Object -ExpandProperty Name | Out-File -FilePath bool_vars.txt -Encoding ascii迁移中最容易翻车的不是语法而是I/O映射和任务分配。旧工程里的位号地址是控制器固件按老映射表分配好的新工程重新生成映射后凡是涉及硬件I/O的变量都要到映射视图重新拉一次对应信号。忽略这一步编译、下载、在线都正常唯独设备不按预期动作排查起来比报错更折磨人。我自己迁移一个水处理项目时撞过一次墙老工程里把故障信号命名成Fault_Low_Level新工程规范要求用驼峰格式FaultLowLevel我用脚本批量替换了POU和变量表编译一把过结果现场联锁怎么都触发不了。查到最后是I/O映射表里那一列还对着旧信号名的偏移。从那以后迁移项目的规矩就两条先核对I/O映射表再核对任务绑定最后才轮到编译。你想把老控制方案当功能块库在新项目里复用也别忘了同步检查功能块的输入输出管脚和实际接入信号是否一致。希望这套流程能帮到你尤其是那些被旧现场遗留工程卡过脖子的工程师把ISaGRAF 3.4这份老资产重新变成真正看得懂、改得动、敢交付的东西。本文还有配套的精品资源点击获取