简介: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.4:IEC 61131-3的工程组织与编程语言选择
2.1 从POU、资源到任务:ISaGRAF的程序模型
ISaGRAF对程序的划分方式和通用PLC不太一样。它的最低复用单元是POU(Program 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/WHILE |
| SFC | 顺序控制、步进工艺 | 中 | 支持步、转换、并行分支 |
| IL | 底层逻辑迁移、翻译旧程序 | 高 | 指令集完整,但日常少用 |
把各自的边界讲一下。LD的优势是直观,触点和线圈的串并联跟电气回路一一对应,电工和调试人员都能直接读;缺点是循环、数组、特殊运算表达费劲,只能靠弥合逻辑块补齐。FBD优势是把算法变成块图调用,PID、比较器、定时器、计数器这些库块拖进去连线就行,既清晰又能作为系统组态图给甲方评审;缺点是复杂状态机在图上会连成毛线团。ST的优势是接近高级语言,能写循环、数组、字符串、结构体,适合把算法集中在一个功能块里;缺点是现场人员不一定人人愿意读代码。SFC适合描述“先做什么再做什么”的工艺序列,允许并行分支和跳转,在批次控制、清洗流程里特别好用;缺点是它和变量时序的交互规则复杂,新手容易把步间逻辑写漏。
ISaGRAF里每个POU在新建时必须选语言,但选完不是锁死的。右键切换语言可以,只是ISaGRAF会提示有表达式无法无损转换。我从一个项目里见过LD转ST后留下一整段跳转指令堆在代码底部,读起来像天书。所以语言选择尽量在POU规划阶段定下来,而不是让项目组中途无理由换语言。
2.3 编译与运行机制:Workbench和Runtime是两台机器
理解ISaGRAF的部署方式,关键是把“开发环境”和“运行环境”拆开。Workbench是PC端IDE;Runtime是运行在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的人演示时就常用这个,几分钟能走通全流程。先启动Workbench,File、New Project,输入项目名称,选择目标类型。目标类型里最常用的是Simulator,它让Workbench在一个模拟Runtime中跑所有逻辑,不连真实控制器,适合验证算法与逻辑正确性;等你后面拿到真实控制器,再到Project、Set Target里改类型,逻辑本体完全不用动。
新建工程后,双击全局变量编辑器,添加四个信号:StartBtn、StopBtn、MotorRun、Fault,数据类型全是BOOL,初值设为FALSE。为了更接近现场,我还会加两个TIME类型变量,OnDelay和OffDelay,分别作为启动延时和停机延时,这样一上来就能验证定时逻辑的用法。
| 变量名 | 类型 | 初值 | 说明 |
|---|---|---|---|
| StartBtn | BOOL | FALSE | 启动按钮或DCS远程启动指令 |
| StopBtn | BOOL | FALSE | 停止按钮或DCS远程停止指令 |
| MotorRun | BOOL | FALSE | 电机运行状态输出 |
| Fault | BOOL | FALSE | 外部联锁故障信号 |
| OnDelay | TIME | T#0s | 启动延时 |
| OffDelay | TIME | T#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或Compile,ISaGRAF会在编译窗口给出一堆检查信息。看到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改成TRUE,MotorRun应该立刻变回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这份老资产重新变成真正看得懂、改得动、敢交付的东西。
本文还有配套的精品资源,点击获取