Codesys连接EPEC:CAN总线节点号与波特率配置全流程
2026/9/20 5:47:19 网站建设 项目流程

简介:这是一份面向工程技术人员、PLC 编程与移动机械控制领域学习者的连接配置指南,系统梳理 Codesys 与 EPEC 控制器通过 CAN 总线进行通信的完整操作流程。内容从硬件接线入手,覆盖 Canmoon 1.8 的波特率与下载线设置、EPEC 节点号的扫描与修改、Codesys 中的 Communication Parameters 配置,以及通过 Kvaser CanKing 和 CAN Controller 完成报文收发与数据监控的整个过程,适合需要自行搭建调试环境或排查通信问题的工程师参考。资源为单份 PDF 文档,大小约 706KB,内容紧凑且步骤明确,可直接对照操作。目前已有 391 人学习使用。文档按 1—14 的编号步骤展开,包含关键界面选项、参数填写示例及常见误区提示,例如节点号修改成功的判断方法、Gateway 进程关闭的必要性、CAN Identifier 的计算规则等,能大幅减少前期摸索时间。无论是初次接触 Codesys 与 EPEC 连接的新手,还是需要现场快速配置的调试人员,都能从中获得可落地的操作依据。

1. Codesys 与 EPEC 连接:先把节点号和波特率对齐,再谈通信

现场调工程机械控制器时,Codesys 在线连不上 EPEC 是高频问题,九成出在节点号没对齐:EPEC 默认地址是 1,工程里配成 8,两端看到的就不是同一个对象。这套连接步骤把电脑、Kvaser 下载线、EPEC 控制器用 CAN 总线串起来,顺序是 Canmoon 1.8 改节点号、Codesys 建网关参数、CanKing 发报文验证,走完一遍就是完整的通信链路。适合做工程机械、农机、特种车辆电控的工程师,也适合刚接手 Codesys 2.3 项目的调试人员。整套操作不碰控制器内部程序,但涉及 CAN 总线波特率、节点寻址、驱动占用三个容易踩坑的层面。

2. 硬件拓扑与 Canmoon 1.8 的参数初始化

2.1 下载线、EPEC 与电源的 CAN 总线接入顺序

先把物理层接对。电脑通过 Kvaser 下载线挂到总线上,EPEC 控制器、电源也并到同一路 CAN。常见做法是手头有什么线就拧什么,但我一般按"电源先上电、Kvaser 再接入、Canmoon 最后启动"的顺序操作,避免下载线在半上电状态下被总线上的干扰信号反复唤醒,导致 Canmoon 识别到的设备状态不稳定。

EPEC 的 CAN 口内部一般自带部分端接,长线或强干扰场合建议在总线两端各并一个 120Ω 终端电阻,线长超过 5 米就必须加。连接完成后的自查顺序:Kvaser 的指示灯是否常亮,Canmoon 设备树里是否出现网卡,EPEC 是否有上电指示。三个都正常再往下走配置,否则后面所有扫描结果都没有参考意义。

2.2 启动 Canmoon 1.8 并确认 online

双击 Canmoon 1.8 启动后,左侧设备树里能看到 Kvaser 的条目,状态栏要显示 online 而不是 offline 或 bus-off。online 才具备总线读写权限,改节点、扫节点、后续的报文监视都依赖这个状态。如果在设备列表里看不到 Kvaser,先拔插 USB 再重开 Canmoon;仍然不行就检查驱动是否被其他程序占用,常见的是上一次 Codesys 的网关进程没退干净。

2.3 baudRate 250 与下载线选型的约束

在 can settings 里把 baudRate 设为 250,下载线选 Kvaser,点 OK。250 指 250 kbit/s,是 EPEC 控制器与 Codesys 网关层默认能对齐的速率。EPEC 固件里如果是 500k,Canmoon 设 250 扫不到节点,反过来也一样。所以第一步是对齐两端的波特率,再谈节点号。Kvaser 这一项选的是驱动接口,不是物理端口,名称要和 Codesys 里填的 CAN card driver 一致。

参数项设置值说明
baudRate250 kbit/s必须与 EPEC 固件配置一致
下载线Kvaser设备管理器里确认驱动名
运行状态onlineoffline 时无总线读写权限
# 定位 Canmoon 安装目录下的 Kvaser 驱动描述文件 # 目标是拿到 Codesys 里 CAN Card Driver 一栏要填的准确名称 where /r "C:\Program Files\Canmoon" *.dll dir /b "C:\Program Files (x86)\Canmoon"

这段命令会把 Canmoon 文件夹里的驱动文件列出来,文件名通常就是 Codesys 驱动列表里显示的名称。常见做法是直接复制该名称,再粘贴到 Codesys 的 CAN card driver 输入框,不要手敲,手敲容易多空格或少字母。Kvaser 的驱动在 Windows 下以设备名方式注册,Canmoon 能识别到,Codesys 就一定能识别到,前提是名称完全一致。

3. EPEC 节点号改写:两次扫描验证的闭环

3.1 Tools 里先写目标节点号

在 Canmoon 的 Tools 菜单里把 EPEC 节点号设置为 8。这一步相当于向总线下发"改地址"命令,填的是目标值而不是当前值。EPEC 出厂或上一次工程烧录后的实际地址不一定记得,所以要靠后面的扫描反推真实地址。目标节点号的选择也要提前规划,工程里若有多个控制器,8 不能与其他节点冲突,也不能等于 0,0 在 CAN 寻址里常被当作广播地址使用。

3.2 第一次扫描的返回值怎么读

按 1.2.3 的顺序对节点扫描,结果出现 node ID 1 is 8。这里前面的 1 是 Canmoon 主界面左上角的当前显示地址,后面的 8 是 EPEC 应答出来的真实地址。也就是说,Canmoon 从地址 1 发起查询,EPEC 以"我现在的 ID 是 8"应答。如果扫描只返回 node ID 1 is 1,说明节点号没有被改写,回到 3.1 检查 Tools 里的目标值有没有确认,或者波特率与总线状态是否正常。

3.3 改界面地址后二次扫描的原因

把主界面左上角的 1 改成 8,重复 1.2.3 的扫描,显示 node ID 8 is 8,此时才算改号成功。这一步不能省:界面地址还停在 1 时,Canmoon 每次查询都从 1 发起,EPEC 虽然已经是 8,但返回结果永远停留在"1 is 8"这条提示上,无法确认目标地址是否真正生效。改成 8 再扫,查询与应答落在同一地址,结论才成立。第一次扫描是发现真实地址,第二次是确认目标地址,两步缺一不可。

扫描输出含义处置
node ID 1 is 1节点未被改写,仍是默认地址检查 Tools 目标值
node ID 1 is 8节点已经是 8,界面还停在 1主界面地址改成 8 后重扫
node ID 8 is 8界面地址与节点地址一致节点号改写完成
# 伪代码:模拟 Canmoon 的扫描-确认流程,理解两次扫描的意义 view_address = 1 # 主界面左上角当前显示地址 target = 8 # Tools 里设置的目标节点号 first = scan(view_address) # 返回 "node ID 1 is 8" real_id = extract_node_id(first) # 取应答侧地址,得到 8 if real_id != view_address: view_address = real_id # 把界面 1 改成 8 second = scan(view_address) # 返回 "node ID 8 is 8" confirmed = extract_node_id(second) == view_address

这段逻辑说明三点:第一次扫描的目的是发现真实地址,改的是界面地址而不是再下发一次改号指令,第二次扫描只是确认。参数上常见的坑是 Tools 里改了目标号但界面地址没同步,扫描输出就一直停在"1 is 8",误以为改号失败,其实是界面显示与节点地址不一致造成的假象。

4. Codesys Communication Parameters 网关配置与进程释放

4.1 新建网关并指定连接地址

Canmoon 收尾后启动 Codesys,在工具栏 online 下选择 communication parameters。点击 new 新建一条连接,再点 gateway,connection 里选 TCP/IP 地址后确认。这里的网关是 Codesys 2.3 的 GAC 网关组件,负责把编程软件的请求转发到 CAN 网卡。Kvaser 直插本机时,TCP/IP 地址用本机回环地址即可,不需要填现场其他设备的 IP。如果工程里还挂着以太网目标,才需要按实际 IP 区分。

4.2 node ID、baudRate、CAN Card Driver 三个关键字段

网关节点建立后,参数列表里能看到 node ID、baud rate、CAN card driver 三项。node ID 填 Canmoon 里改成功的 8,baud rate 填 250,CAN card driver 填 Kvaser 下载线的准确名称。这三个字段共同构成 Codesys 访问 EPEC 的寻址链路:驱动决定物理通道,波特率决定链路速率,节点号决定目标控制器。任何一项与 Canmoon 侧不一致,在线都会超时。

提示:CAN card driver 的名称从 Canmoon 安装文件夹里复制,不要手打。Kvaser 的注册名里常有短横线或版本号,手敲差一个字符,Codesys 的驱动下拉框里就选不中。

4.3 结束网关进程,释放 Kvaser 独占句柄

配置完成后关闭 Codesys,在任务管理器里结束 gateway 进程,确认 Canmoon 也处于下线状态,再打开 Kvaser CanKing。Kvaser 网卡在 Windows 下同一时刻只允许一个应用持有句柄,Codesys 的网关和 CanKing 抢同一块卡时,后启动的一方拿不到设备。很多人省略这一步,CanKing 打开即报设备被占用,或者打开后 GO ON BUS 失败。

字段填写值数据来源
node ID8Canmoon 改号成功后的节点号
baud rate250与 Canmoon、EPEC 固件一致
CAN card driverKvaser 驱动名Canmoon 文件夹复制
connectionTCP/IP本机网关连接
# 结束 Codesys 网关进程,释放 Kvaser 给 CanKing 使用 tasklist | findstr /i "gateway" taskkill /F /IM gateway.exe # 若网关注册为系统服务,先停服务再结束进程 net stop "Codesys Gateway V2"

第一行先确认网关进程的准确名称,Codesys 2.3 不同版本里可能叫 gateway.exe 也可能带版本后缀。第二行强制结束进程,/F 表示强制,/IM 指定映像名称。第三行对应网关以服务方式安装的情况。结束进程后再开 CanKing,设备就能被正常打开。注意这里不要急着重启 Codesys,先完成 CanKing 侧的报文验证,链路确认没问题后再回 Codesys 在线,排查范围会更清晰。

5. Kvaser CanKing 报文监视:Universal 发送的完整链路

5.1 CAN Kingdom Basic 模式的选择理由

CanKing 打开后默认界面直接确认,只保留一条 CAN 总线,选择 CAN Kingdom Basic 后进入主界面。这个模式适合裸报文收发,不会把 CanKing 的协议栈灌进总线,也不会干扰 EPEC 固件自带的通信逻辑。其他 Kingdom 变体大多面向特定厂商协议,调试 EPEC 时选错模式,发送窗口的字段和格式都会变,反而增加干扰。

5.2 CAN Channel 与 Standard Text Format 显示设置

在主界面打开需要的视图窗口。CAN Controller 里选择 CAN Channel,一般显示为总线信号采集器的名称,界面没有现成选项时以实际采集器名称为准,选中后 Apply。双击 Standard Text Format 可以切换数据显示进制,默认十六进制,DLC 和 BYTE 区用十六进制最直观,十进制留给工程量换算阶段使用。切换只影响显示,不影响发送数据本身。

5.3 GO ON BUS 与 Universal 发送窗口

在 CAN Controller 的 Bus Statistics 栏下先点 GO ON BUS,把 CanKing 挂到总线上,发送窗口的字段才可用。没点 GO ON BUS 直接 send,数据写不进总线,这是最常见的无效操作。挂载后选择 message——universal——universal,会出现发送窗口。两层 universal 分别对应消息类型和具体格式,选完后窗口里出现 CAN Identifier、DLC、BYTE0-7 输入区。

5.4 CAN Identifier、DLC 与 BYTE0-7 的填写规则

CAN Identifier 填报文头 + 8 + 节点号。报文头来自 EPEC 应用的通信协议定义,中间固定位 8 是协议里的类型标识,节点号就是前面改好的 8。以报文头 0x100、固定位 0x080、节点号 0x008 为例,组合结果是 0x188。DLC 是数据长度,发 8 位填 8,界面就显示 8 个 BYTE;发 4 位填 4,只显示 BYTE0-3。BYTE0-7 按十六进制逐字节输入,点 send 后,View 下的 History List 与 Output Window 中会同时出现发送记录。

字段示例值说明
CAN Identifier0x188报文头0x100 + 固定位0x080 + 节点号0x008
DLC8有效数据字节数
BYTE0-701 02 03 04 05 06 07 08逐字节十六进制数据
# 计算 CAN Identifier:报文头 + 固定位 8 + 节点号 header = 0x100 # 报文头,取自 EPEC 通信协议定义 fixed = 0x080 # 固定位 8,协议约定的中间标识 node = 0x008 # 节点号 8,Canmoon 里改写成功的值 can_id = header | fixed | node # 0x188 dlc = 8 data = [0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08] print(f"CAN Identifier = 0x{can_id:03X}") print(f"DLC = {dlc}, BYTE0-7 = {' '.join(f'{b:02X}' for b in data)}")

按位或拼接 ID 比字符串拼接更稳,报文头如果带低地址位,移位和或的优先级要理清。DLC 改小后 BYTE 区只显示对应个数,多余字节自动忽略,不需要清零。发送后的确认看 History List 的时间戳,Output Window 则显示最近一次发送的结果,两个视图对照可以判断是发送失败还是显示延迟。

6. 变量级回读与轻量监视:Codesys 场景下的链路验证技巧

6.1 从总线级验证推进到变量级回读

CanKing 的 History List 只证明报文进了总线,不代表 EPEC 应用层已经消费。完整验证要回到 Codesys:重新启动网关进程,用相同的 node ID 和 baudRate 上线,在线模式下监视 EPEC 输入映像区对应字节。如果能读到 CanKing 发出的数据,链路才真正闭环。这个步骤看起来多余,实际排查里经常救场——总线有报文、控制器不动作,多半是 ID 拼错或 DLC 长度与协议不符。

6.2 用 PLC-Recorder 读取 Codesys 变量的替代思路

不想反复打开重型 IDE 时,可以用 PLC-Recorder 这类轻量工具读取 Codesys 变量,通过网关或 OPC 订阅方式持续记录。前提是工程已做符号配置,把需要观测的变量导出成符号文件。这与 Codesys 生成库文件之前必须勾选符号配置是同一个逻辑:导出粒度决定工具能找到多少变量,没导出就什么都读不到。

6.3 把参数平移给其他 Codesys 系 IDE

汇川等国产 PLC 的 Codesys 化环境里,Communication Parameters 的字段布局大同小异,节点号、波特率、CAN card driver 三个字段的取值逻辑可以直接平移。区别只在驱动换成对应厂商的网卡,网关进程名不同。整套流程的锚点是 Canmoon 侧拿到的真实节点号,先把节点号确认到位,再往任何 Codesys 系 IDE 里填参数,在线都不会偏。

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询