ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Linux上安装CODESYS全攻略:原生Runtime与Wine方案详解

Linux上安装CODESYS全攻略:原生Runtime与Wine方案详解 1. 为什么要在Linux上折腾CODESYS1.1 一个真实的需求场景先说个我自己的经历。前两年接了个小项目客户现场用的是某国产ARM工控板跑的是麒麟系统要求在上面跑一套软PLC做逻辑控制。预算有限不想额外买PLC硬件就想着能不能直接在Linux主机上把CODESYS跑起来。当时第一反应是“这玩意儿不是Windows专属吗”结果一查CODESYS官方确实有Linux版本但坑多到让人怀疑人生。这篇文章就是把我踩过的坑、试过的方案、最后跑通的路径完整梳理一遍。CODESYS在Linux上的安装核心就两条路一条是官方原生Linux版基于Runtime和IDE分离的架构另一条是通过Wine跑Windows版IDE。两条路各有各的适用场景选错了会浪费大量时间。适合谁看如果你手上有Linux工控机、国产化平台、ARM开发板或者单纯想在Ubuntu上学习CODESYS编程这篇内容能帮你少走至少两天的弯路。不需要你是Linux老手但基本的命令行操作得会比如cd、ls、chmod这些。1.2 先搞清楚CODESYS在Linux上的两种形态很多人一上来就搜“CODESYS Linux安装”然后被各种教程带偏。关键是要先理解CODESYS的产品结构CODESYS Development SystemIDE就是你写梯形图、ST语言的那个图形界面开发环境。官方只提供Windows版和部分Linux版比如CODESYS for Linux的IDE其实是基于Mono的但功能受限。CODESYS Control Runtime跑在目标设备上的运行时负责执行你下载的程序。这个有完整的Linux版本支持x86和ARM。所以“在Linux上安装CODESYS”这句话本身就有歧义。你是要在Linux上开发还是要在Linux上运行大部分工业场景是后者——在Windows上开发把程序下载到Linux Runtime上跑。但如果你连开发都想在Linux上完成那就得走Wine路线。我个人的建议是开发用Windows或Wine运行用原生Linux Runtime。这是最稳的组合。下面分别展开。2. 方案选型原生Runtime还是Wine跑IDE2.1 原生Linux Runtime的适用场景与限制CODESYS官方提供的Linux Runtime本质上是一个叫codesyscontrol的守护进程。它支持的标准架构包括x86_64和ARMarmv7、arm64。安装方式通常是一个.deb包或者.sh安装脚本。这个方案的优势很明显性能好、稳定、开机自启、支持实时性扩展需要配合PREEMPT_RT内核。但限制也很明显它只有运行时没有图形化开发界面。你没法在Linux Runtime上直接写代码必须通过另一台机器上的CODESYS IDE通过网络下载程序。适用场景工控机、边缘网关、ARM控制器、国产化替代项目。比如你手上有台飞腾或鲲鹏的机器想把它变成软PLC这就是正路。2.2 Wine方案的利弊分析Wine是在Linux上运行Windows程序的兼容层。用Wine跑CODESYS IDE的好处是你能在Linux桌面上直接用完整的CODESYS开发环境包括所有库、可视化编辑器、调试功能。坏处是稳定性看运气不同Wine版本、不同CODESYS版本、不同Linux发行版组合起来结果千差万别。我实测下来CODESYS 3.5 SP17以上版本在Wine 7.0上基本能跑但会遇到几个经典问题字体渲染错乱、串口/USB加密狗识别不了、在线调试时连接超时。如果你只是用来学习语法、写写逻辑Wine方案够用。如果要连真实设备调试建议还是老老实实装个Windows虚拟机。2.3 一张表看清两种方案怎么选对比维度原生Linux RuntimeWine跑Windows IDE图形界面无有完整IDE稳定性高中低依赖Wine版本性能原生实时性可调有性能损耗硬件支持x86/ARM官方支持仅x86调试便利性需远程连接本地直接调试适用场景生产环境运行学习、开发、测试安装难度中等较高坑多选型逻辑很简单生产环境跑Runtime开发环境用Wine或虚拟机。别想着用Wine跑生产环境的Runtime那是给自己找麻烦。3. 原生Linux Runtime安装实操3.1 环境准备与依赖检查以Ubuntu 20.04/22.04为例其他发行版命令略有差异。首先确认系统架构uname -m输出x86_64就是64位x86输出aarch64就是ARM64。这个信息决定了你下载哪个安装包。然后安装基础依赖。CODESYS Runtime依赖一些系统库缺了会报各种奇怪的错误sudo apt update sudo apt install -y libc6 libstdc6 libncurses5 libncursesw5 \ libusb-1.0-0 libssl1.1 libfontconfig1 libice6 libsm6注意Ubuntu 22.04默认没有libssl1.1需要手动下载安装。这是第一个坑很多人卡在这里。检查系统是否开启了实时内核可选生产环境建议uname -a | grep PREEMPT如果没有PREEMPT_RT字样说明是普通内核。普通内核也能跑但循环周期抖动会大一些大概在几百微秒到几毫秒之间。对大多数逻辑控制够用对运动控制就不行了。3.2 下载与安装CODESYS ControlCODESYS官网的下载页面需要注册账号找到“CODESYS Control for Linux SL”或“CODESYS Control for Linux ARM SL”。注意SL是Single License的意思还有Multi License版本。下载下来通常是一个.sh文件比如codesyscontrol_linux_4.7.0.0.sh。给它执行权限chmod x codesyscontrol_linux_4.7.0.0.sh sudo ./codesyscontrol_linux_4.7.0.0.sh安装脚本会问几个问题安装路径默认/opt/codesys、是否安装为服务选是、是否启动选是。一路回车即可。安装完成后检查服务状态sudo systemctl status codesyscontrol如果看到active (running)就说明Runtime起来了。默认监听端口是1217TCP这是CODESYS的网关端口。3.3 配置Runtime参数与开机自启Runtime的配置文件在/etc/CODESYSControl.cfg。几个关键参数[CmpSettings] ; 网关端口 GatewayPort1217 [CmpLog] ; 日志级别调试时设为0最详细 LogLevel2 [CmpSched] ; 循环周期单位微秒 CycleTime1000改完配置需要重启服务sudo systemctl restart codesyscontrol开机自启默认已经配好了可以用systemctl is-enabled codesyscontrol确认。如果显示enabled就没问题。实操心得第一次装完建议先用netstat -tlnp | grep 1217确认端口真的在监听。我遇到过防火墙没关导致端口不通的情况排查了半天。3.4 在Windows IDE上连接Linux Runtime这一步是在另一台Windows机器上操作。打开CODESYS IDE在设备树里右键“Device”选择“Add Device”然后扫描网络。如果Linux Runtime和Windows在同一网段应该能扫到。扫不到的话手动添加网关在“Gateway”上右键“Add Gateway”输入Linux机器的IP地址。然后就能看到Runtime设备了。连接成功后你可以把程序下载进去用IDE的在线调试功能监控变量。这就是标准的“Windows开发、Linux运行”工作流。4. Wine方案安装CODESYS IDE全流程4.1 Wine环境搭建与版本选择Wine的版本选择很关键。我试过Wine 6.0、7.0、8.0结论是Wine 7.0以上配合winetricks最稳。Ubuntu自带的Wine版本通常太老建议用官方源sudo dpkg --add-architecture i386 sudo mkdir -pm755 /etc/apt/keyrings sudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/jammy/winehq-jammy.sources sudo apt update sudo apt install --install-recommends winehq-stable装完后验证wine --version然后安装winetricks用来装CODESYS需要的Windows组件sudo apt install winetricks4.2 配置Wine前缀与必要组件不要直接用默认的~/.wine建议给CODESYS单独建一个前缀避免污染export WINEPREFIX~/.codesys_wine export WINEARCHwin64 winecfgwinecfg会弹出配置窗口把Windows版本设为Windows 10。然后安装必要组件winetricks -q dotnet48 vcrun2019 gdiplus riched20dotnet48是.NET Framework 4.8CODESYS的安装程序依赖它。这一步耗时较长可能十几分钟耐心等。注意dotnet48安装过程中可能弹窗报错忽略即可只要最后winetricks返回成功就行。4.3 安装CODESYS Development System下载CODESYS 3.5 SP17的Windows安装包.exe然后wine CODESYS_3.5_SP17.exe安装过程基本和Windows一样但有几个地方要留意安装路径不要有中文和空格建议用C:\CODESYS安装类型选“Complete”避免缺组件安装完成后不要立即启动先退出然后安装CODESYS的附加包比如Target支持包同样用wine运行。4.4 解决字体、串口与加密狗问题字体问题是最常见的。CODESYS界面里的中文可能显示成方块解决办法是复制Windows的字体cp /mnt/c/Windows/Fonts/simsun.ttc ~/.codesys_wine/drive_c/windows/Fonts/串口问题Wine默认能映射/dev/ttyUSB0为COM1但需要在winecfg的“Drives”里手动映射。加密狗问题比较麻烦USB加密狗在Wine下识别率不高建议用软授权或者网络授权。启动CODESYSWINEPREFIX~/.codesys_wine wine ~/.codesys_wine/drive_c/CODESYS/CODESYS.exe第一次启动会比较慢之后正常。5. 常见报错与排查速查表5.1 Runtime启动失败类问题报错信息原因解决方法libssl.so.1.1: cannot open缺libssl1.1手动下载deb安装Gateway not reachable防火墙拦截1217端口sudo ufw allow 1217License not found未激活授权导入授权文件或试用模式Service failed to start配置文件语法错误检查CODESYSControl.cfg5.2 Wine运行IDE类问题报错信息原因解决方法could not find the webview2 runtime缺WebView2winetricks webview2界面乱码缺中文字体复制simsun.ttc安装程序无法继续.NET未装好重装dotnet48在线调试超时Wine网络层问题改用原生Runtime调试独家避坑webview2 runtime这个报错在CODESYS 3.5 SP19之后特别常见因为新版IDE用了WebView2做可视化。解决办法是winetricks -q webview2但装完后可能需要重启Wine前缀。5.3 ARM平台的特殊处理ARM64上装Wine比较折腾因为Wine的ARM64支持还不完善。如果你在ARM工控机上想跑IDE建议直接用box86/box64配合Wine或者干脆用x86模拟。但生产环境还是推荐原生ARM Runtime别用Wine。麒麟系统上有个“麒麟Wine助手”可以简化Wine的安装配置但版本较老跑CODESYS可能有问题。我试过能装上但界面卡顿明显。6. 实操心得与后续扩展6.1 我踩过的三个大坑第一个坑是libssl版本。Ubuntu 22.04默认是libssl3但CODESYS Runtime编译时链接的是libssl1.1。解决办法是从Ubuntu 20.04的源里下载libssl1.1的deb包手动安装。这个坑卡了我整整一个下午。第二个坑是网关端口冲突。1217端口如果被其他程序占用Runtime起不来但日志里不一定明确报端口冲突。用netstat查一下最保险。第三个坑是Wine前缀污染。我一开始用默认的~/.wine装CODESYS结果把其他Windows程序的配置搞乱了。后来学乖了每个Windows程序单独一个前缀互不干扰。6.2 性能调优的几个方向如果你用原生Runtime做生产环境可以调这几个参数CycleTime默认1000微秒逻辑简单可以调到500复杂逻辑调到2000CPU亲和性用taskset把Runtime绑定到独立核心实时内核打PREEMPT_RT补丁抖动能从毫秒级降到微秒级日志级别生产环境设为2或3避免日志刷爆磁盘6.3 这套方案还能怎么扩展跑通基础安装后可以进一步做这些事用systemd配置Runtime的看门狗崩溃自动重启用rsync做程序备份用Prometheus采集Runtime的运行指标把多个Runtime组成分布式控制网络。如果是国产化项目还可以研究一下CODESYS对麒麟、统信UOS的官方支持情况有些版本已经做了适配。ARM64的Runtime在飞腾、鲲鹏上都有成功案例关键是选对安装包版本。最后分享一个小技巧CODESYS的授权文件可以放在U盘里Runtime启动时自动读取。这样换机器不用重新授权现场调试很方便。具体是在CODESYSControl.cfg里配置LicenseFilePath指向U盘挂载点。
返回列表