这年头做工业自动化,只要沾上“非标设备”、“上位机通讯”、“运动控制”这几个词,CODESYS基本就绕不开了。而PCAN这个USB转CAN的小盒子,更是调试现场最常见的“救火队员”。我最早用CODESYS那会儿,被驱动安装、设备识别、CANopen主从站配置折腾了整整一个周末,尤其是PCAN驱动装完但CODESYS死活认不出设备,那种挫败感相信不少兄弟都懂。
这套组合看着简单,实际上从驱动层到应用层,中间全是坑。我这篇就把自己实际跑通全流程的经验、踩过的雷、以及最后收尾的排查技巧一次性交代清楚,从驱动安装一直写到CAN通讯测试跑通,纯实操向,没有废话,照着抄就行。
1. 方案选型与整体设计思路
1.1 为什么偏偏是CODESYS+PCAN
说句实在话,CODESYS能火起来不是没道理的。它基本就是一个基于IEC 61131-3标准的万能PLC编程环境,不分品牌,只要你买的核心板或者PLC支持CODESYS Runtime,就能用同一套逻辑去开发。更狠的是,Visual Studio风格的IDE,写ST语言、CFC、梯形图都很顺手,调试体验比传统日系PLC那套老古董界面好太多了。
但CODESYS本身不带物理CAN口,它只是个软件平台。这时候就得靠外部硬件把CAN报文接进来。市面上的选择无非就几种:PLC板载CAN控制器、以太网转CAN网关、USB转CAN分析仪。这其中PCAN(PEAK品牌)几乎是工控圈的默认选项,驱动成熟、文档齐全、价格在进口工具里也算厚道。我选它的核心原因就三条:
- 驱动稳定,Windows下识别率极高,几乎不挑系统版本。
- 自带的PCAN-View软件可以直接监控总线数据,调试单人就能干。
- CODESYS官方库和兼容列表里明确支持PCAN硬件,原生驱动对接,省去自己写底层协议的麻烦。
这套组合的适用人群很明确:搞非标设备的电气工程师、上位机开发转做PLC的软件工程师、还有做设备联调售后的人。只要你的设备需要和伺服驱动器、变频器、传感器走CANopen或CAN自定义协议,这玩意儿基本是标配。
1.2 整体链路设计与接线规划
在动软件之前,先把物理拓扑想清楚。我调试时的标准链路是这样的:
PC(CODESYS开发环境 + PCAN-View) | | USB | PCAN-USB适配器 | | CAN_H / CAN_L / GND | 目标设备(伺服驱动器 / 控制器 / 从站模块)这里有个新手的致命坑:CAN总线两端必须接120欧终端电阻,但如果你只是把PCAN和单个设备点对点调试,PCAN-USB适配器内部其实已经集成终端电阻了,默认是开启的,这点和串口不一样,别想当然地再外接一个并联电阻上去,那样整条总线的差分阻抗就错了,通讯能通才怪。
接线的时候一定坚持用双绞线,CAN_H和CAN_L拧在一起,屏蔽层单端接地。我见过太多人为了图省事拿普通跳线随便插,结果波特率稍微高一点(500k以上)就开始丢帧,查半天查不出原因。
1.3 软硬件完整清单
这套方案需要用到的工具和软件,我列一个自己的常备清单:
| 类别 | 具体项目 | 备注 |
|---|---|---|
| 硬件 | PCAN-USB(PCAN-USB Pro更佳) | Pro带电气隔离,现场干扰大的场合建议直接上 |
| 硬件 | 目标PLC/控制器 | 带CAN接口,支持CODESYS Runtime即可 |
| 软件 | CODESYS Development System V3 | 我用的是V3.5 SP19版本,太老的版本对CODESYS网关支持差 |
| 软件 | PEAK PCAN Driver | 版本必须和操作系统匹配 |
| 软件 | PCAN-View | 驱动包自带,用来做总线监控和报文发送自测 |
| 软件 | EDS文件 | 从站设备的设备描述文件,从供应商官网下载或找厂家要 |
| 工具 | USB线、双绞线若干、直尺/剥线钳、120欧电阻备用 | 总线上如果有多设备,终端电阻得手动确认 |
这一套准备齐了,后面的流程就能走通。缺一样,大概率中途卡壳。比如EDS文件没有,CODESYS里加从站设备的时候直接报错,这事儿我遇到不止一次。
2. PCAN驱动安装:最容易翻车的环节
2.1 驱动版本选择与下载方式
PCAN驱动这块,官网下载页面看起来简单,其实暗藏玄机。它分了好几个版本:一个是直接用PEAK官网Driver Install包,另一个是Windows Update在线驱动。我强烈建议手动下载离线安装包,别偷懒走系统自动更新,因为PEAK的驱动和系统自动匹配偶尔会给你装成通用USBCAN驱动,导致设备管理器显示正常,但CODESYS就是找不到硬件。
具体下载路径是这样的:
- 打开PEAK官方网站,找到产品下载页面。
- 根据系统位数选对应驱动,64位选x64,老电脑32位就选x86。
- 下载下来是一个可执行文件,双击安装。
安装过程全程默认下一步就行。但装完之后,我习惯做一步额外操作:打开设备管理器,把“PEAK PCAN-USB”这个名字确认一下。如果看到的是带黄色感叹号的“USB串行设备”,那就是驱动没装对,先卸载再重装。
注意:如果电脑上之前装过旧版PCAN驱动,新版覆盖安装前最好先在控制面板里卸载干净。我踩过一次坑,装完新驱动PCAN-View还显示旧版本号,排查半天发现是双版本冲突。
2.2 64位系统与驱动签名问题处理
这里要单独说一个Windows 10/11 64位系统下的经典问题——驱动签名。PEAK的驱动本身是经过了微软签名的,正常情况下不会触发签名强制。但如果你用的是精简版GHOST系统,或者自己手动关闭了驱动签名保护,那安装过程中就可能遇到“系统找不到指定的文件”或者“设备无法启动”的报错。
解决办法是我在实际调试中试出来的,两步走:
- 进入Windows“恢复”菜单的高级启动选项,选择“禁用驱动程序强制签名”。
- 重启后,插上PCAN设备,在设备管理器里手动更新驱动,指向刚才解压的驱动目录,不要让它自动搜索。
这个状态下安装成功的PCAN,在设备管理器里的显示名是“PCAN-USB”,不是一串看不懂的代码。如果名字对不上,大概率是签名问题没解决,或者USB口供电不足——没错,供电不足也会导致驱动安装失败,尤其是PCAN-USB不带外部供电,插在前置USB口经常出这个问题,换个机箱后面板的口就好了。
2.3 安装验证与PCAN-View基础自测
驱动装完别急着打开CODESYS,先用PEAK自带的PCAN-View确认硬件是活的。这一步能把你后面的调试时间缩短一半。
打开PCAN-View,界面会弹出一个硬件选择对话框,默认会识别到你的PCAN-USB设备。重点来了,这里要选择一个通讯参数:
- 波特率:先选500 kBit/s,这是大部分CANopen设备的默认速率。
- 模式:选“ACTIVE”模式,允许报文收发。
进去之后看界面左下角的状态栏,正常情况显示“BUSACTIVE”,代表总线激活状态。如果显示“BUSERROR”,说明总线上有问题,最常见的是没接终端电阻,或者CAN_H和CAN_L接反了。
PCAN-View里做一个简单的回环测试:
- 将PCAN的CAN_H和CAN_L直接短接(不是接终端电阻,是短接在一起)。
- 在PCAN-View发送窗口发一条标准帧,ID随便填,比如0x100,数据8个字节全FF。
- 如果总线上能看到自己发出去的这条报文回显,说明收发通道是好的。
这个测试过了,才能证明USB-CAN硬件链路是通的,后面进CODESYS调试才有的放矢。
2.4 多硬件场景下的设备编号与冲突处理
调试间桌面上一堆USB设备是很正常的事。PCAN设备如果和另一个PCAN或者类似USBCAN设备同时插电脑上,设备管理器里可能会区分不出哪个是哪个。PCAN驱动提供了“PEAK PCAN-USB”的多个实例编号,在PCAN-View里能看到类似PCAN-USB:1/2的显示。
但在CODESYS里,它不一定按你插入的顺序识别设备。我的经验是固定USB口使用。比如PCAN永远插在主机后置的第二个USB口,这样每次识别到的硬件通道号都是一致的。如果你非要热插拔换口子,通道号变了,CODESYS工程里配置的PCAN设备就找不到了,最容易引发这类问题——连接不上硬件。
另一个处理经验是:CODESYS工程里配置了PCAN设备但连不上时,先把PCAN-View关掉。因为这个软件会独占PCAN设备的访问权,CODESYS那边怎么试都连不上。这不算BUG,但确实坑了不少人。
3. CODESYS环境配置与工程搭建
3.1 CODESYS版本选择与CANopen功能包安装
CODESYS的版本百花齐放,不同厂家的PLC定制版也是五花八门,但核心逻辑一样。这里我以标准版CODESYS V3.5 SP19为例。装完主程序后,第一件事不是新建工程,而是确认CANopen功能包有没有装。
操作方法:
- 在CODESYS菜单栏选“Tools”——“Package Manager”。
- 看列表里有没有“CODESYS CANopen Master”和“CODESYS CANopen Slave”这两个功能包。
- 没有的话,在“CODESYS Store”里搜索下载安装,或者从官方安装包的光盘镜像里补装。
这个步骤很多人忽略,结果编程环境里连CANopen设备类型都找不到,以为是软件坏了。我当时就因为这个差点重装了整个CODESYS。
核心提示:CODESYS的环境搭建,缺的不是主程序,而是功能包。CANopen从站、PLCopen运动控制、Modbus TCP都是独立安装的,别以为主程序装了就万事大吉。
3.2 PLC侧IP配置与实时网卡绑定
这一步在标题里看起来跟PCAN关系不大,但在实际项目里是联调前的关键一环。CODESYS用以太网连接PLC进行下载和在线监控,如果PLC的IP和电脑不在同一网段,连工程都下载不进去,更别提后面搞CAN了。
PLC的IP修改方式不同品牌略有差异,但CODESYS Runtime基本都支持通过USB或以太网自动扫描发现设备。我的建议是先在CODESYS里通过“Scan Network”找到你的PLC,然后固定它的IP地址和你的电脑网卡在同一段,比如PLC设为IP即192.168.1.10,电脑网卡设为192.168.1.20,掩码255.255.255.0。
这里有个和实时性相关的坑:CODESYS的软PLC是跑在Windows上的,它默认绑定的以太网适配器必须是“Ethernet”而不是“WLAN无线网卡”。如果你用Wi-Fi连接PLC,在线带宽和时延会让程序下载变得极其不稳定,甚至可能因为网络中断导致PLC运行状态丢失。务必用有线网线直连,并把PLC的IP固定下来。
3.3 在工程中添加PCAN设备与CANopen主站
这一步是整个配置流程的核心,也是出错最多的环节。我在CODESYS里添加PCAN设备的完整操作步骤是这样:
- 新建标准工程后,在左侧设备树中选中你的PLC节点。
- 右键选择“Add Device”,在弹出的设备列表中搜索“CAN”。
- 找到“CANopen Master”或者“PCAN”相关的设备条目,选“CANopen Master”后点击添加。
添加完成后,还需要添加一个硬件映射。设备树里会出现一个CANopen Master节点,双击它,在参数区可以看到“Interface”选项,这里要选择你的PCAN硬件通道。如果你前面驱动装好了,这里下拉菜单里会直接出现PCAN-USB选项。如果这里是灰色的或者空白的,直接说明PCAN驱动没装好,或者PCAN硬件被占用,回第2章重新排查。
主站加好之后,加从站设备。右键CANopen Master下的“CANopen Bus”,选择“Add Device”,然后点击“EDS文件导入”。
- 选择从供应商那里拿到的EDS文件。
- CODESYS会自动解析文件,在设备列表里显示出从站节点。
- 设置从站节点ID、PDO映射参数。
EDS文件导入失败这种事,十次里能遇到三次。常见的报错是“Invalid EDS File”,可能是EDS版本和CANopen协议版本不匹配,或者在PDF转换时编码损坏。这时候找个文本编辑器打开EDS文件,检查[DeviceInfo]部分有没有乱的编码。正常EDS文件开头会有标准化的节点信息段,如果全是乱码,基本可以判定是文件编码问题,找厂家重新要一份UTF-8编码的。
3.4 变量映射与PDO报文规划
CANopen建好主从站后,还不能直接通讯,要把PLC里的过程变量和CANopen的PDO映射起来。这步是真正考验理解力的地方。
PDO这个概念说通俗点,就是CANopen里传输实时数据的“快车道”。它分TPDO(发送)和RPDO(接收),每个PDO可以带8字节数据,对应你的转速指令、位置反馈、状态字这些实时量。
我习惯的做法是这样的:
- 在从站设备的PDO映射表里,把关键的控制字映射到RPDO1,把状态字映射到TPDO1。
- 在主站的设备树里,双击对应的PDO,把它映射到PLC的全局变量地址,比如%MW0、%MD2这些。记得数据类型要对齐,16位和32位的别混。
做完这些,在CODESYS里编译工程,如果不报错,说明映射逻辑没问题。接下来才能进入真正考验人的通讯测试环节。
4. CAN通讯测试全流程:从自检到联调
4.1 单机自检:硬件自动回环测试
在正式和从站设备对接之前,我强烈建议先做一次纯硬件自检,排除PCAN设备本身的问题。操作如下:
- 拔掉PCAN和外部设备的连接线。
- 找一段短线,把PCAN的CAN_H和CAN_L短接起来。
- 打开PCAN-View,发送一条标准帧,ID取0x100,数据长度8,数据值可以设为0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08。
- 观察接收窗口是否出现这条帧。
能收到回显,说明PCAN的收发电路是好的。这条测试同时能验证波特率设置是否正确,如果短接状态下发不出回显,大概率是波特率匹配不上或者硬件故障。
这里有个细节说一下:回环测试时PCAN-View左下角状态必须是ACTIVE,如果出现“BUSERROR”,多半是短接没短好或者设备本身有故障,校准一下接线多试几次。
4.2 与从站设备直连:PCAN-View验证从站心跳
硬件自检通过后,PCAN不短接了,把PCAN连到你要调试的伺服驱动器或者从站控制器的CAN口上。此时我们不急着上CODESYS,先用PCAN-View监听总线。
正常情况下,如果从站设备上电且参数正确,它会在总线上周期性发送心跳报文(Heartbeat)或节点守护报文。CANopen协议规定了心跳周期,常见的是100ms到1000ms之间。PCAN-View里能看到类似0x700+节点ID的报文,比如从站节点ID是3,那么心跳报文的COB-ID就是0x703。
如果PCAN-View里完全看不到任何报文,别急着怀疑从站坏了,检查顺序如下:
- 从站设备供电是否正常。
- 波特率是否匹配(设备和PCAN是否都设置成500k)。
- 节点ID是否设置正确。
- CAN接线极性是否接反(CAN_H和CAN_L反了是听不到心跳的)。
- 终端电阻是否到位。
心跳能看到,说明从站的CANopen协议栈是活的,这时候再打开CODESYS去控制它,才是正确的调试节奏。我见过不少同事跳过这一步,直接从CODESYS里连从站,连不上就一脸懵,其实总线上一根线松了,从站压根没上线。
4.3 CODESYS在线控制与主站配置实测
PCAN-View确认总线正常后,回到CODESYS工程。此时流程是这样:
- 先把PCAN-View关闭,释放设备占用。
- 在CODESYS里编译工程。
- 点击登录(Login),将程序下载到PLC。
- 切换到运行状态(Run)。
此时观察设备树里CANopen Master的状态,正常应该显示“Operational”或“OP”,这代表主站已经从PRE-OPERATIONAL状态切换到了运行状态。从站设备的状态可以通过CANopen主站的诊断界面查看,正常也是“Operational”。
如果状态切不过去,卡在“Pre-Operational”,排查重点在从站节点配置:
- 检查从站节点ID是否与EDS文件设置一致。
- PDO映射是否超出了从站支持的范围。
- 检查主站启动参数,特别是“Start-up Behavior”是否配置为自动启动。
全流程跑通后,做一个验证动作:在CODESYS在线监控里给主站TPDO对应的变量赋值,比如给一个16位的控制字赋值0x0006,然后在PCAN-View(重新打开,选择同一通道)观察总线上是否出现了对应的PDO帧。如果CODESYS和PCAN-View能同时挂在一个通道上工作——有些老版本驱动是不支持的,但PCAN驱动默认支持多应用共享——你就能看到报文实时从CODESYS发出来。这个现象一旦出现,整条链路就通了。
4.4 常见问题速查表
我把这几年调试CODESYS+PCAN遇到的典型问题汇总成了一个表格,每个问题都是实际发生过的,拿去对照排查效率极高:
| 现象 | 可能原因 | 解决措施 |
|---|---|---|
| PCAN-View里看不到设备 | 驱动未装好;USB供电不足 | 重装驱动;换后置USB口 |
| CODESYS设备列表中没有PCAN选项 | CODESYS版本过旧;未安装CANopen功能包 | 升级CODESYS;补装功能包 |
| 总线状态BUSERROR | CAN_H/CAN_L接反;缺少终端电阻 | 检查接线;确认终端电阻接入 |
| 从站没有心跳 | 波特率不匹配;节点ID冲突;从站未上电 | 统一波特率;核对节点ID;检查供电 |
| 主站无法切换到Operational | 从站未配置完成;PDO映射超出范围 | 重新导入EDS;调整PDO映射 |
| CODESYS提示设备被占用 | PCAN-View已打开 | 关闭PCAN-View后重试 |
| 程序下载频繁失败 | Wi-Fi连接PLC;IP不在同一段 | 改用有线直连;固定IP |
这张表其实涵盖了90%的CAN通讯联调问题。剩下的10%,基本都是玄学级的偶发,比如USB线太长导致信号质量劣化,或者PCAN和从站设备之间的地电位差太大引发通讯不稳定,后者建议直接换PCAN-USB Pro(带电气隔离),一劳永逸。
5. 调试现场的经验心得与几个实用小习惯
流程走完,最后聊点实际操作层面的习惯问题。这些东西没人规定你这么做,但不这么做就会反复踩坑。
第一,每次上电调试前,养成先用PCAN-View看总线的习惯。开总线、看是否存在非预期的报文,这个动作能帮你在接入CODESYS之前就把物理层的很多问题暴露出来。CODESYS的调试界面虽然也能看报文,但远没有PCAN-View直观,而且CODESYS的在线监控有个缺点——它对时间戳的记录精度一般,查偶发丢帧不方便。
第二,EDS文件管理要有自己的一套规则。不同版本的从站设备固件,EDS文件可能会有差异。我的习惯是每个项目建立一个“EDS存档”文件夹,文件名带上版本号和日期,绝不覆盖旧文件。现场联调时如果遇到厂家更新了设备固件,旧的EDS说不定就要用到,没有备份就只能干瞪眼。
第三,在CODESYS里配置PDO映射的时候,建议先做少而全的小范围测试,再扩展。比如先把一个TPDO和一个RPDO通起来,测试周期500ms,数据就是一个字节的状态值。通了以后再去映射复杂的报文。一上来搞十几组PDO映射,一旦通讯有问题,排查起来非常痛苦,你会分不清是硬件问题、映射问题还是逻辑问题。
第四,PCAN-View和CODESYS会同时抢占硬件接口。调试过程中的正确“操作姿势”是:先开PCAN-View监控,然后启动CODESYS,让它占用通道后,再关闭PCAN-View。用完之后尽量重新插拔一下USB。这些小动作能显著降低通讯间歇性失败的几率。
CODESYS+PCAN这套组合,熟悉了以后其实非常顺手。相比用PLC/触摸屏一体机你只能看那点固定诊断信息,这套组合在调试阶段能让你看到的数据粒度细腻太多。每一次总线状态变化、每一个PDO调度周期,都能清清楚楚地捕捉到。
我这个流程不一定是最优解,但如果你刚接手一个带CAN通讯的CODESYS项目,从驱动安装一直走到联调测试,可以完全照着做。等你跑通一遍,回头看那些曾经头疼的问题,其实本质都逃不开“物理层、驱动层、应用层”这三层,逐层确认,心里就有底了。