CODESYS 2.3.9.47老版本实用指南:安装、编程与避坑

发布时间:2026/10/31 1:04:28
CODESYS 2.3.9.47老版本实用指南:安装、编程与避坑

简介:对于需要维护旧款设备或兼容遗留系统的工控工程师而言,特别是设备维护人员,CODESYS 2.3.9.47是一份难得可用的老版PLC编程工具完整安装包。虽然软件已迭代至V3.x,但许多工厂在用程序仍依赖2.3系列,旧版安装包越来越难以寻找,这份资源正好补上缺口。压缩包共348个文件,大小283.27MB,既有可执行程序、动态链接库和系统驱动等运行组件,也包含130个lib库文件、40个PDF技术文档以及界面资源和安装配置脚本,可以满足离线部署、查阅技术手册、调试运行参数等多方面的实际需求。目前已有557人浏览学习,说明该版本在工控领域仍有使用价值。资源内还附有安装说明与引导文件,读者可据此在旧版集成开发环境中完成PLC程序编写、软PLC配置或老项目迁移,节约大量寻找旧版本的时间,尤其适合设备维护与项目移植场景。

1. CODESYS 2.3.9.47 为什么还在被翻出来:老版本的价值和适用边界

做设备维护和产线改造的人,对 CODESYS 2.3.9.47 应该不陌生。别小看这个老版本,你现在手头那台跑得好好的老设备,PLC 程序大概率就是它写的;国产不少品牌的 PLC 内核也来自这一代 CODESYS,比如汇川部分老型号,工程一换版本就编译不过去。新版 3.5 功能强,但工程文件不向下兼容,双击打开直接报工程格式错误,这时候你就知道 2.3.9.47 这种老版本不是怀旧,是刚需。这份资源解决的是老工程的打开、修改、上下载和备份问题,适合三类人:接二手产线的调试工程师、做老旧设备改造的电气人员、以及想搞明白 2.3 工程结构的学生。新版装得再漂亮,也顶不上老版本能把现场救回来的那一下。

2. 安装与运行:环境先备好,三步装完,没有授权狗也能学

2.1 环境要求:老版本不是哪里都能装

CODESYS 2.3.9.47 发布年代早,设计时主要面向 Windows 2000 和 XP,到了 Win7 时代已经有点吃力。我拆过不少这类老安装包,踩得最多的坑不是软件本身,而是操作系统不买账。下面这张表是我实测下来的结论,直接照着核对就行:

系统能否安装实际表现与备注
Windows XP SP3很稳原生支持,跑软 PLC 和在线监视都正常
Windows 7 32 位稳定安装后需要以管理员身份运行
Windows 7 64 位可用网关服务偶尔起不来,右键管理员运行
Windows 10 / 11碰运气装上能用,但 USB 驱动和授权服务容易出问题

如果你只有 Win10/Win11 的电脑,不用急着放弃。右键安装包,选“属性 → 兼容性”,把兼容模式设成 Windows 7,再勾选“以管理员身份运行此程序”,成功率会高很多。另外,CODESYS 2.3 安装路径别带中文,C:\CODESYS 这种经典路径最省事,后面你就会知道这一条能避开多少坑。

2.2 安装步骤:不要一路 Next 到底

老版本安装包比新版简单,但别无脑点下一步。有个关键环节在安装类型选择界面,默认是“典型安装”,我这里强烈建议选手动安装并勾选完整组件。原因很简单:2.3 的组件之间耦合很深,缺了 Target 文件后,后面新建工程时下拉列表里根本找不到对应 PLC 型号。

我一般按下面这几步走:

# 第一步:解压安装包 # 注意解压路径不要有中文和空格,C:\Temp 就行 C:\Temp\CODESYS_2.3.9.47_Setup.exe # 第二步:进入安装界面后选择 Change -> Manual # 在组件列表里把以下三类全部勾上: # - Programming System(编程系统主程序) # - Target Files(目标设备描述文件,按你手头 PLC 品牌勾选) # - Gateway Server(网关服务,在线连接和远程下载都要靠它) # 第三步:安装完成后先不要重启电脑 # 进安装目录确认以下关键文件存在: C:\CODESYS\CODESYS.exe C:\CODESYS\Gateway\Gateway.exe

第二步勾选组件时,Target Files 很关键但最容易漏。你是哪家的 PLC,就勾哪家的 Target;不确定的话宁可全勾,横竖也就几百兆空间。装了错误的 Target 最多是列表里多几个用不到的型号,不装 Target 则完全没法建工程。安装包解压后如果看到 .target 文件,可以手动拷到安装目录下的 Target 文件夹里,这种方式在 2.3 里也是官方支持的做法。

2.3 授权模式:软授权、硬狗和试运行的区别

CODESYS 2.3 的授权是新手最容易懵的地方。装完之后打开软件,看起来一切正常,但下载程序到软 PLC 时蹦出一个授权提示,很多人这时候以为是安装包坏了,其实不是,是授权模式没搞清楚。

老版本授权分三种:硬狗授权、软授权和试运行模式。硬狗就是插在 USB 口上的加密狗,工控机上常见;软授权是厂家分配一个授权码,绑定这台电脑的硬件信息;试运行模式则不需要任何授权,直接能跑,但一般有时长限制,常见是 2 小时,而且部分高级指令会被屏蔽。

# 查看当前授权状态的方法: # 打开 CODESYS,菜单栏 Help -> About # 在弹出的窗口里找到 License 相关行,看状态: # - Dongle: 表示已识别硬狗 # - Soft: 表示软授权已激活 # - Trial: 表示处于试运行模式

试运行模式不等于不能用。学习编程、写逻辑、做离线仿真,试运行模式完全够用。真正限制你的是在线控制真实设备时,部分厂商 Target 会校验授权码,这种情况下程序能编译,但 PLC 运行不了。如果你是给现场设备做维护,建议先确认原设备是否有授权文件;如果只是个人学习或实验室验证,试运行模式就是很好的入口,不用因为没授权就放弃整个资源。

3. 建工程与写逻辑:从空工程到带故障复位的电机启停

3.1 新建工程:项目树里藏着的结构

第一次打开 2.3,左侧项目树和 3.x 长得完全不一样。别急着写代码,先理解 2.3 工程树的四层结构:POU 程序组织单元、任务配置、资源、库管理器。

POU 是放程序和功能块的地方,对应 3.5 里的 POUs 文件夹;任务配置决定 PLC 的扫描周期和任务优先级,老版本里这块位置藏得深,在 Resources 选项卡下面;资源里放的是全局变量、IO 映射和通信配置;库管理器负责挂载标准库和第三方库,新工程默认挂 Standard.lib。

新建工程时弹出一个 PLC 型号选择窗口,如果你的 Target 文件没装全,这个列表是空的。正确姿势是先在“PLC Configuration”里确认目标平台,再建 POU。我一般习惯先建一个空工程,编译一遍确认环境没问题,再往下加逻辑。这一步能提前暴露很多环境问题,比等程序写一半再报错强多了。

3.2 一个可复现的 ST 例子:电机启停带故障锁存与复位

建好工程后在 POU 下新建一个程序,语言选 ST,开始写一个实际产线上常见的逻辑:按钮启动、按钮停止、热继故障锁存、故障复位,外加运行计时。这段代码逻辑很简单,但覆盖了启保停电路、锁存、复位三个经典套路,新老版本通用。

PROGRAM PLC_PRG VAR bStart : BOOL := FALSE; (* 启动按钮,常开触点 *) bStop : BOOL := FALSE; (* 停止按钮,常闭触点 *) bReset : BOOL := FALSE; (* 故障复位按钮 *) bOverLoad : BOOL := FALSE; (* 热继电器反馈,故障时为 TRUE *) bFaultMem : BOOL := FALSE; (* 故障锁存内部变量 *) bMotorRun : BOOL := FALSE; (* 电机运行输出 *) iTick : INT := 0; (* 任务周期计数器 *) iRunSeconds : INT := 0; (* 累计运行秒数 *) END_VAR
(* 过载信号锁存:一旦热继动作,就记住故障状态 *) IF bOverLoad THEN bFaultMem := TRUE; END_IF; (* 启保停逻辑:启动且电机未运行、且无故障时置位运行 *) IF bStart AND NOT bMotorRun AND NOT bFaultMem THEN bMotorRun := TRUE; END_IF; (* 停止或故障锁存时,断开运行输出 *) IF bStop OR bFaultMem THEN bMotorRun := FALSE; END_IF; (* 复位按钮:解除故障锁存 *) IF bReset AND NOT bStart THEN bFaultMem := FALSE; END_IF; (* 运行计时:假定任务周期 10ms,100 个周期为 1 秒 *) IF bMotorRun THEN iTick := iTick + 1; IF iTick >= 100 THEN iTick := 0; iRunSeconds := iRunSeconds + 1; END_IF; ELSE iTick := 0; iRunSeconds := 0; END_IF;

这段代码有几个地方需要点透。bStop 用的是常闭触点语义,你在梯形图里看到的停止按钮常闭输入,到 ST 里就是这个逻辑关系;故障锁存采用了“过载置位、复位按钮清零”的方式,和实际接触器回路的行为一致。运行计时的实现依赖任务周期,如果后面把任务周期改成 20ms,100 个周期就是 2 秒,所以任务周期的设置和程序逻辑强相关,这是很多人容易忽略的。参数上,bReset 需要同时检测 NOT bStart,防止启动按钮按下时误复位,这是老工程师总结出来的细节。

3.3 编译、登录和下载:在线调试的完整动作

写好代码后,点菜单栏的“编译”按钮,消息窗口弹出编译结果。编译无误后,进入在线调试流程。先点“登录”,再点“下载”,把程序灌入软 PLC 或真实 PLC。这里有个老版本特有的习惯:2.3 的在线模式是显式切换的,不像 3.5 那么顺滑,登录和下载是两个独立动作,新手容易只点了登录忘了下载,导致一直在看空程序。

下载成功后进入在线监视模式。在 ST 编辑器里,变量边上会出现小圆圈,绿色表示 TRUE,空心表示 FALSE。右键变量可以强制置位或复位,这个操作在现场调试时极其常用。比如测试故障锁存逻辑,直接把 bOverLoad 强制为 TRUE,看 bFaultMem 会不会锁存,bMotorRun 会不会断开。强制操作完一定要复位,不然程序会一直在你强制的状态里跑,现场翻车往往就是这么来的。

4. 通信、运动控制与网口 MAC:把老 PLC 接进新系统

4.1 Modbus RTU 配置:串口参数、从站映射和几个常见误区

老设备最常遇到的通信需求就是 Modbus RTU。变频器、温控表、智能仪表,基本都是走这条路。2.3 的 Modbus 配置和 3.5 差别很大,它不在“设备树”里配置,而是在 PLC Configuration 里挂从站。

参数推荐值说明
波特率9600大部分老仪表默认值
数据位8Modbus RTU 固定 8 位
校验位无/偶校验从站手册为准,无校验时停止位为 2
停止位1 或 2与校验位搭配调整
从站地址1~2470 为广播地址,不要分配给现场设备
功能码03/04 读寄存器,06 写单寄存器根据仪表手册选择

配置完成后,读写寄存器不是直接访问地址,而是通过映射区搬移。2.3 里常见做法是把读写的数据放到一个全局数据块,再用循环或固定功能块搬移。这一步极其容易出问题,很多人把 Modbus 调试不通归咎于线接错了,其实多半是映射地址算错了。有个实用技巧:先用串口调试助手单独测从站,确认报文能通再填配置,能省一多半排查时间。

4.2 SoftMotion 与六轴控制:老版本能做什么、边界在哪

搜索记录里很多人找 CODESYS 添加 SoftMotionLight 和 SoftMotion 的操作,还有一个追问是 CODESYS 控制六轴机器人。这里必须把老版本的边界讲清楚,避免你下了资源才发现做不到想要的效果。

2.3 时代的 SoftMotion 是一个独立扩展包,SoftMotionLight 是精简版,适合脉冲轴、步进、简易伺服的位置控制。装完后轴配置出现在 Resources 下面,通过一组功能块控制使能、点动、绝对定位、相对定位。这类应用不涉及轨迹插补,就是给定目标位置和速度。

六轴机器人控制是另一个量级。六轴联动需要实时插补、正逆解计算、轨迹规划,2.3 的 SoftMotion 完整版支持部分功能,但配置复杂度很高,而且对 PLC 的扫描周期和 CPU 性能要求苛刻。我的建议很直接:如果是做六轴机器人,老版本不是优选,除非是已有的成熟项目做维护;如果是普通两轴、三轴点位运动,SoftMotionLight 反而比新版轻量,部署快,适合小型专机设备。

4.3 读取网口 MAC 地址:一个现场常找的功能

“CODESYS 读取 PLC 网口 MAC 地址”这个需求,在设备管理中经常出现,尤其是网关绑定、IP 绑定、授权管理这些场景。2.3 里读取 MAC 不是直接拖一个功能块了事,不同厂商封装差异很大。你用的是汇川的 PLC,大概率可以在库管理器里找到厂商提供的系统功能块;如果用的通用 CODESYS 内核,则要看系统库版本。

(* 老版本读取网口 MAC 的参考写法 *) VAR sMacAddr : STRING(17); (* 存放 MAC 地址字符串 *) bReadDone : BOOL := FALSE; END_VAR (* 调用系统库或厂商库的 MAC 读取函数 *) sMacAddr := "MAC_GET()"; (* 实际函数名以库管理器引用的版本为准 *)

上面的代码只是一个占位示意,因为老版本的库命名混乱,不同版本函数名不统一。现场中最靠谱的确认方法是:在 PLC 上插网线连电脑,用抓包或路由器后台的 DHCP 客户端列表,直接看设备的 MAC 地址。程序里读 MAC 用于绑定授权确实可以,但不要指望有一个全民通用的标准函数,这属于老版本的隐藏坑。

5. 避坑指南:老 CODESYS 的五个高频翻车点

<###5.1 模板化章名 示例:编译报错、连不上 PLC、乱码、看门狗、文件打不开

写这一章的动机很简单:同一个坑,我不希望你再踩一遍。下面五条是拆老版本资源和实际调试时最常遇到的,每条按“现象 → 原因 → 解决”写清楚。

5.1 编译报错“Unknown Type”:库版本对不上

现象:打开一个拿到的老工程,编译时提示 Unknown Type 或数据类型找不到,跳转到一个库文件的灰色区域。

原因:2.3 工程引用的是特定库版本,你的安装环境库版本和工程不匹配。老版本库管理器不会自动升级库,也不会给出温和提示。

解决:打开库管理器,逐个检查黄色感叹号的库,移除引用后换用当前环境能找到的同名库,重新编译。如果提示的是系统库,优先找安装包里自带的 .lib 文件手动添加。这条解决后,大部分工程能起死回生。

5.2 登录 PLC 超时:网关和通道设置不对

现象:点击登录后长时间转圈,最终弹出 Timeout 或 Connection Error。和 PLC 直连网线,Ping 也通。

原因:2.3 的在线通道默认不走 TCP/IP,而是走它自己的网关服务;网关服务没启动,或通道配置里没添加对应 PLC 的通信设置。这是最简单也最容易漏的环节。

解决:先把安装目录下的 Gateway.exe 以管理员身份启动,再去在线设置里添加通道,选 TCP/IP,填 PLC 的 IP 地址和端口,新版本默认 1217,老版本可能不同,要以第一次打开“通道诊断”时自动带出的地址为准。如果是串口连接,检查 USB 转串口驱动,老版本对 CH340、CP2102 的识别不如新版本稳定,驱动版本不要太新,用稳定的旧版驱动反而没事。

5.3 中文注释乱码:字符集兼容性

现象:从老设备备份出来的工程,里面中文注释显示为乱码,部分中文字符串在界面上变成问号。

原因:2.3 版本时代字符集不统一,有的工程是 GB2312 环境写的,换到新系统后代码页变了,中文注释就烂了。

解决:变量名和注释尽量用英文是最彻底的方案。如果必须显示中文,在安装时把系统区域语言设置为中文(简体),用 Windows 自带的“更改区域设置”里的 Beta 版 UTF-8 选项要慎开,开了反而可能加剧乱码。已经乱码的文本,没后悔药,只能对照原工程手动修复。

5.4 程序跑一段时间停机,看门狗报警

现象:设备运行几小时或几天后突然停机,故障灯闪烁,在线查看时 CPU 状态显示 Watchdog Timeout。

原因:任务周期设得太短,或者程序里有大量浮点运算导致单周期扫描时间超限。老版本 PLC 的 CPU 能力有限,按新版本的资源占用习惯写代码,触发看门狗是迟早的事。

解决:把任务周期从默认的 1ms 或 5ms 改成 10ms 或 20ms;浮点运算改用整数运算替代;循环里避免太长的跳转和大量的数组复制。改完任务周期,重新下载程序并复位看门狗,继续观察。

5.5 工程文件双击打不开:文件关联和路径问题

现象:双击 .pro 文件没有反应,或者提示“工程不能加载”,但在 IDE 里通过“打开工程”菜单就能正常打开。

原因:文件关联被破坏,或者工程路径包含中文、空格,老版本对路径的解析脆弱到令人无奈。这个问题在 Win7 以上系统尤其明显。

解决:直接把 .pro 文件拖拽到已打开的 CODESYS 窗口,这是最快的方式。长期用的话,桌面上建一个英文路径的文件夹,存放所有工程备份,从根上消灭路径问题。

6. 老工程搬到新电脑:库打包、版本校验与归档习惯

每次换电脑维护老设备,最怕的不是重新装系统,而是装完软件后打开工程发现库缺胳膊少腿。所以我把这套流程固定下来,每次必然强制走一遍。第一个动作是在原电脑上把工程用到的库文件打包带走。在库管理器里逐个找到库条目,确认版本号,把对应 .lib 文件复制出来,和工程文件放在同一个备份目录下。.lib 是二进制库,.project 是源工程,两个都要带,缺一个后边都可能拆不开。

第二个动作是记录版本信息。我的习惯是建一个 version.txt,写清楚 CODESYS 版本、每个库的版本号、PLC 型号和固件版本。不要相信序列号,老版本库升级频繁,不记录版本,三个月后你自己都说不清。

# 在新电脑上校验库文件与原始文件是否一致 # Windows 下用 certutil,Linux 下用 md5sum certutil -hashfile C:\Backup\MyLib.lib MD5

第三个动作是按设备名建归档目录。每个老工程对应一个设备,目录里放工程文件、库文件、version.txt、屏程序、接线图五样东西。这套方法帮我解决过不少“客户要一年前的程序看下当时配置”的临时请求。从那以后我每次接手老设备,第一件事不是看程序,而是先确认库版本和 PLC 固件版本,再决定能不能正常打开。希望帮到你。

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