项目背景
某AGV小车采用西门子S7-1200 PLC作为整车控制器。车载电池管理系统使用厂家自定义CAN协议,行走驱动器使用CANopen协议。
项目要求PLC统一完成以下控制任务:读取电池SOC、总电压、电流和温度;监控BMS故障及接触器状态,控制左右行走驱动器启动、停止和调速;读取驱动器状态、实际速度和故障代码;根据电池状态决定AGV继续运行、限速或者返回充电;在BMS、驱动器或通信异常时停止车辆运行。
西门子S7-1200本身没有可直接使用的CAN和CANopen接口,因此该项目分别配置两台协议网关:
CAN转PROFINET网关,连接电池BMS;
CANopen转PROFINET网关,连接行走驱动器。
两台网关在PROFINET侧均作为从站,西门子PLC作为PROFINET主站。
为什么需要两台协议网关?
电池BMS和驱动器虽然都采用CAN物理接口,但上层协议不同。
电池BMS使用厂家自定义CAN协议。报文ID、数据位置、比例系数、字节顺序及故障代码均由电池厂家定义。
驱动器使用CANopen协议,需要处理:
CANopen节点地址;
PDO实时数据交换;
SDO参数配置;
Heartbeat心跳监控;
EMCY紧急报文;
CiA 402驱动器状态机。
如果只使用普通CAN转换设备,虽然可能收到驱动器的CAN报文,但无法完整承担CANopen主站功能,也不能可靠管理驱动器节点。
因此,本项目使用两台功能不同的网关,将两套设备分别接入PLC:
电池BMS → CAN转PROFINET网关 → 西门子PLC
CANopen驱动器 → CANopen转PROFINET网关 → 西门子PLC
这种方案的关键不只是接口转换,而是由网关分别完成CAN报文解析、CANopen节点管理和PROFINET数据映射,使PLC获得可以直接使用的结构化数据。
使用步骤
西门子PLC一侧的配置
打开西门子PLC组态软件并新建项目。
导入GSD文件(网关设备描述文件,可找供应商索取)
添加网关模块,预先设置好网关的设备名称及IP地址并分配给网关
给网关分配Profinet网络中的输入输出数据长度及映射地址
确认配置无误后将组态下载进PLC,并将参数分配给网关后即完成网关在Profinet一侧的配置。
Canopen一侧的配置
首先打开网关配置软件“CANopen Configuration Studio”
新建项目,选择PN-Canopen
设置网关的Canopen参数如波特率,通讯周期等
在此处设置字节的发送顺序以及IP地址(新版本Profinet从站参数由Profinet主站软件进行分配,此处地址功能已改为下载配置地址,请勿与Profinet地址冲突)
将从站设备描述文件导入网关配置软件。
添加从站设备到工程并进行参数配置
点击错误控制设置主从站的心跳
设置好PDO包含的参数以及通讯类型,最后分配好通道偏移对应好1200plc的输入输出内存映射。
此处可分配canopen从站的一些启动参数,如一些参数的启动默认值等
确认无误后将配置下载到网关。
当网关OK等亮起说明Profinet通讯正常RUN常亮err灯灭说明Canopen物理层连接正常,即可对从站进行读写操作。
361