ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Codesys连接EPEC:CAN总线节点号与波特率配置全流程

Codesys连接EPEC:CAN总线节点号与波特率配置全流程 简介这是一份面向工程技术人员、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 固件里如果是 500kCanmoon 设 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 不能与其他节点冲突也不能等于 00 在 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 新建一条连接再点 gatewayconnection 里选 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 里改成功的 8baud rate 填 250CAN 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 节点号0x008DLC8有效数据字节数BYTE0-701 02 03 04 05 06 07 08逐字节十六进制数据# 计算 CAN Identifier报文头 固定位 8 节点号 header 0x100 # 报文头取自 EPEC 通信协议定义 fixed 0x080 # 固定位 8协议约定的中间标识 node 0x008 # 节点号 8Canmoon 里改写成功的值 can_id header | fixed | node # 0x188 dlc 8 data [0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08] print(fCAN Identifier 0x{can_id:03X}) print(fDLC {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 里填参数在线都不会偏。本文还有配套的精品资源点击获取
返回列表