工业现场CAN总线集线器开发∗
2021-06-02龚元明
周 琦 龚元明
(上海工程技术大学汽车工程学院 上海 201620)
1 引言
在智能制造领域,总线集线器是适用于工业控制最底层的简单传感器和执行器的工业通信接口,能采集多路数字量模拟量信号[1]。总线集线器支持多从站和主站点对点通信,各从站之间互不影响,具有良好的通信稳定性,同时具有智能可配置性。总线集线器使工厂自动化设备中典型应用的传感器网络变得更高效和智能化,能够为工业传感器制造商在工业4.0时代提供支持[2]。
CAN总线采用差分信号传输,抗干扰能力强,最高传输速率可达1Mbps,最大通信距离可达10km,可以大大降低信息传输延时,适用于对通信时序较为严格的控制系统[3]。考虑到CAN总线启用成本低、可靠性高的优点,在工业自动化电子领域中广泛应用,因此基于CAN总线协议对集线器开发设计。
2 系统总体设计
CAN总线集线器以英飞凌XC2234L为微控制器,通过底层驱动对GPIO接口施密特触发器的开关切换,可配置为数字量/模拟量输入通道。设置M8物理接口,总共可采集16路传感器信号,通过自定义协议将传感器信号打包成CAN报文格式,由GPT单元对外定时发送。CAN总线集线器通过USB-CAN和上位机连接,基于CCP协议对Flash区的CAN参数进行标定,以适应不同工作环境。集线器总体设计结构如图1所示。
图1 集线器总体设计结构
为了满足智能制造领域多从站和主站通信的要求,可配置各集线器不同CANID作为从站,通过CAN转以太网网关和主站PLC连接。在实际应用中以西门子S7-1200 PLC作为主站,采用泗博自动化公司的CAN转Profinet网关进行主从连接[4]。CAN总线集线器采集工业现场电压信号、电流信号、温度信号等参数,经网关协议转换后传入S7-1200PLC,整体系统如图2所示。
图2 主站和多从站系统结构图
3 硬件设计
本CAN总线集线器基于英飞凌XC2234L单片机设计实现。XC2234L是16位微控制器,包含MultiCAN接口、通用输入/输出端口(GPIO)以及16路A/D转换通道,Flash闪存容量可达320KB[5],完全满足本设计要求。硬件设计主要包括电源模块、CAN通信模块和信号采集模块。
3.1 电源模块
图3所示为电源模块电路原理图。为防止电源正负极接反时电路导通,在电源输入端加入了二极管,保护后级电路。由于硬件系统最大驱动电压为5V,采用开关型降压稳压器LM2576-5,配合二极管1N5819,稳定输出5V电压。为主控制器和CAN收发器模块提供工作电压。
图3 电源模块原理图
3.2 CAN通信电路
CAN通信模块主要包括CAN控制器、CAN收发器、终端电阻和防静电保护电路。英飞凌XC2234L微控制器集成了两路MultiCAN接口,支持CAN V2.0B规范。CAN收发器采用英飞凌TLE6250GV33,数据传输速率高达1MBaud,可以承受工业现场恶劣条件。TxD引脚和RxD引脚分别实现CAN报文的发送和接收,CANH引脚和CANL引脚实现差分信号传输,中间嵌入120欧姆终端电阻,增强抗干扰能力。CAN通信电路如图4所示。
图4 CAN通信模块原理图
3.3 信号采集电路
信号采集分为开关量信号采集和模拟量信号采集,总共16路通道。图5所示为信号采集模块原理图。Vset为16路通道公共端,当5K电阻R39接入电路时为开关量信号采集模式,断开开关S1则为模拟量信号采集模式。运算放大器MCP6004对模拟信号放大后输入到单片机。模拟电压输入范围为0~5V,微控制器器采用12位AD精度,对应AD值为0~4095。采用肖特基二极管BAT54s把电压钳在0~5V,避免输入电压过大而烧毁电路[6]。在XC2234L的GPIO引脚接入双色共阴LED管,可有效观测数字量采集状况。
4 软件设计
底层硬件驱动采用Dave软件配置[7],集成开发环境采用Tasking C166编译器。Dave对驱动层的配置可直接生成代码,再通过Tasking加载生成代码实现应用层功能。软件设计主要包括通信协议设计和参数标定设计。
图5 信号采集模块原理图
4.1 通信协议设计
本集线器采用M8接口,每个接口可采集两路信号,共16路输入信号。CAN报文有效字节为8个,第一字节为奇数端口数字量信号,第二字节为偶数端口数字量信号,第三字节为模拟量信号高八位,第四字节为模拟量信号低八位,第五字节为模拟量通道号,第六、七字节分别为A/D转换通道总数和数字量通道总数。
表1 CAN通信协议示例
奇数端口和偶数端口以0~15依次命名,奇数端口为0~7,偶数端口为8~15,对应整型二进制数的16位。报文ID号为0x281,表1对该通信协议做示例说明。Byte0值为0x84,对应二进制10000100,表示奇数端口0和5为高电平。Byte1值为0x24,对应二进制00100100,表示偶数端口10和端口13为高电平。Byte2和Byte3合并后为16进制0x0418,换算后表示传感器输入模拟电压为1.28V。Byte4值为0x06,表示第六路模拟量通道。Byte6和Byte7为0x08,表示总共启动8路A/D转换通道和8路数字量通道。
底层驱动对XC2234L通用输入/输出端口的数字输入禁用寄存器Px_DIDIS配置,主要为施密特触发器开关状态切换[8],0为使能数字输入级,1为禁用数字输入级。AD转换采用XC2234L顺序请求源处理模式,通过调用ADC0_vStartSeq0ReqChNum()函数启动AD转换通道,由ADC0_uwGetResult⁃Data()函数把AD值存放在结果寄存器中,再由CAN_Transmiter()函数发出。该模式根据启用的AD通道号依次轮询,通过CAN报文的形式循环发送。
4.2 参数标定设计
为了使集线器灵活应用于工业现场交互环境,可配置CAN总线波特率、帧类型、报文ID、发送间隔时间等参数[9],并可以根据实际使用需求自由配置数字量/模拟量通道。
参数标定采用CCP协议Polling问答模式[10]。首先在DAVE中配置接收节点M0和发送节点M1,M0节点ID设为0x001,M1节点ID设为0x281。在CAN中断中调用函数ccpCommand((CCP_BYTEP⁃TR)&M0.ubData[0])。标定参数Flash区起始地址设定为0x00C00200,RAM区映射地址设定如表2所示。
表2 RAM区参数地址分配表
一旦接收到0x001报文,立即触发CAN中断。用Connect(0x01)命令建立连接,然后SET_MTA(0x02)命令设置标定参数地址,DNLOAD(0x03)命令下载参数标定值[11],对各个参数进行解析。DIS⁃CONNECT(0x07)命令结束标定流程。通过调用CCPFlash函数库,主要为ROM区标定参数到RAM区地址映射,扇区擦除,Flash区参数写入,以实现标定参数掉电不丢失。其中,CAN波特率通过解析,对XC2234L节点位时序寄存器CAN_NBTROL进行修改;CAN ID对应报文对象仲裁寄存器CAN_MOAR1H和CAN_MOAR1L;发送间隔由RTC中断控制,定时发送CAN报文。数字量/模拟量通道分别对应0x01和0x02,通过解析A/DPort_State参数,启动相应数字输入通道和A/D转换通道。标定流程如图6所示。
5 上位机标定软件设计
上位机基于QT Creator开发,通过周立功USB-CAN实现智能分线器和上位机的连接,上位机由CAN接口函数库开发[12]。用户交互主要实现实时监测CAN报文以及标定功能。接口函数调用周立功usb-can二次开发函数库,主要用到以下函数:
VCI_StartCAN(m_devtype,m_devind,m_can⁃num)//启动USB-CAN
VCI_GetReceiveNum(m_devtype,m_devind,m_cannum;//获取指定缓冲区数据
VCI_Receive(m_devtype,m_devind,m_can⁃num,frameinfo,50,200);//CAN数据接收
VCI_Transmit(m_devtype,m_devind,m_can⁃num,&frameinfo,1);//CAN数据发送
图6 下位机标定流程
启动USB-CAN时,首先初始化CAN配置,包括帧过滤验收码、屏蔽码、滤波方式以及波特率定时器[13]。然后读取设备信息、设置设备参数、清除缓冲区。由于接收到的CAN报文会预先存入缓冲区,所以VCI_GetReceiveNum函数主要用途是配合VCI_Receive函数使用,先检测缓冲区是否有未读帧数,再接收,避免了系统一直调用VCI_Receive,节省了PC系统资源,提高运行效率。标定协议按照下位机CCP协议编写,每条报文格式参照VCI_CAN_OBJ结构体,由于下位机接收节点ID固定,所以只需要定义VCI_CAN_OBJ数组的首指针和每条报文的有效字节。参照下位机标定设计,主要步骤为建立连接、设置RAM区参数标定地址、写入数据和断开连接,由VCI_Transmit函数依次发送CAN报文命令。主要步骤如图7所示。
上位机主界面主要是建立和集线器的连接,观察集线器CAN报文的收发情况。子界面为标定界面,可自由配置集线器CAN总线各参数。标定界面如图8所示。
图7 上位机操作流程
图8 集线器CAN参数标定界面
6 西门子PLC编程及可靠性测试
PLC作为主站,经过CAN转Profinet网关实现和智能集线器从站之间的通信[14]。网关配置软件为泗博自动化公司的TC-123,该软件可完成TCO-151的配置,包括设备IP地址,子网掩码,网关地址和设备名称,CAN通信波特率,网关节点号,PDO(过程传输对象)访问条目等参数。网关配置如图9所示。
图9 TCO-151网关配置
西门子S7-1200PLC程序由博图V13编写,首先加载第三方网关GSD文件完成硬件组态[15],完成输入/输出8个字节的映射地址。图10梯形图为一组开关量校验程序,IN1和IN2进行与运算,当结果不为0时,线圈闭合。按照CAN通信协议编写共16组校验程序。对于模拟量的监控可观察报文接收数组的变化。
图10 开关量校验程序
由上位机标定软件配置前八个通道为模拟量输入,后八个通道为数字量输入。给数字通道输入5v电压,模拟通道输入0~5V可调电压,观察AD值变化。当给第七通道输入2.4V电压时,对应AD值应为0x7e2。第八通道输入开关量信号。打开博图软件监控功能,图10开关量校验程序中线圈Q1.0闭合,可验证开关量输入准确无误。报文接收数组如图11所示,接收报文为00 80 07 e2 07 00 08 08,符合预期结果。
图11 报文接收数组窗口
7 结语
本文利用英飞凌XC2234L单片机设计开发了CAN总线集线器,对硬件电路、底层软件和上位机标定界面、西门子PLC编程做了详细介绍。通过实验模拟和测试,实现了对传感器信号进行准确采集和在线标定CAN节点等功能,实时性好,运行平稳,在工业自动化领域有着广阔的应用前景。