储能应用中EM-1000作为EMS, 面对众多CAN接口的设备,CAN接口不够用怎么办?PXB-6020轻松帮你搞定!
在储能应用中,集装箱式储能单元通常配备较完备的消防系统,包含喷淋头、空调、温度探测器、烟雾探测器、声光报警器等等传感器和探头,如此多的探测器通常需要经过消防采集器采集初步处理后,通过CAN接口将结果上报至BMS或EMS进行进一步的处理。当BMS或EMS的CAN接口数量不够时,可采用CAN转入Modbus TCP网络实现消防采集器与BMS或EMS的快速互联互通。
下面通过实际案例模拟如何快速将EM-1000的网口通过PXB-6020转换为CAN接口。接线的拓扑可如下图所示:
图中使用USBCAN卡当作前文所述的消防采集器,将数据上传至CAN总线,再由PXB-6020协议转换器由CAN转入Modbus TCP与EM-1000通讯,实现数据的上传和下发等动作。
具体操作步骤如下:1. 通过PC连接PXB-6020,PXB-6020采用OPEN端子供电方式,使用AWPX Tools软件配置工作模式与设备参数。1.1 配置PXB-6020的Modbus选项为下图所示。
1.2 配置PXB-6020的CAN选项为下图所示。
1.3 配置PXB-6020的发送报文,首先点击添加按钮,添加定时1秒发送帧ID为0x01,帧类型为标准帧的CAN报文,然后点击添加数据按钮,把Modbus寄存器0x00的数据绑定到CAN报文数据中。
1.4 配置PXB-6020的接收报文,首先点击添加按钮添加CAN报文分析,帧ID为0x01,帧类型为标准帧,然后在添加数据按键,把CAN报文与Modbus寄存器0x00绑定起来。具体内容如下图所示。
1.5 最后,点击保存配置按钮,完成PXB-6020的配置。
2. 使用网线将EM-1000的网口与PXB-6020连接起来,再将PXB-6020的CAN接口接入USBCAN卡的CAN接口。连接完成后,给所有设备上电。
3. 配置USBCAN卡的上位机
3.1 打开ZCANPRO上位机,点击设备管理选项按钮,然后在弹出的窗口选择对应的CAN卡,点击打开设备,最后点击启动。
3.2 在弹出来的配置CAN窗口中,与PXB-6020的CAN配置保持一致即可,然后点击确认。
3.3 成功配置ZCANPRO上位机以及PXB-6020后,在ZCANPRO中能看到定时的CAN报文,其数据的前2位就是Modbus寄存器0x0的数据
4. 在EM-1000中,可使用以下两个例程写入或者读取Modbus寄存器0x0的数据4.1 写入一个随机数到Modbus寄存器0x0中
#include <stdio.h>
#ifndef _MSC_VER
#include <unistd.h>
#endif
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <modbus.h>
int main(void)
{
modbus_t *ctx;
int rc;
int addr;
uint16_t regval;
srand((unsigned)time(NULL));
ctx = modbus_new_tcp("192.168.10.168", 502);
if (modbus_connect(ctx) == -1) {
fprintf(stderr, "Connection failed: %sn", modbus_strerror(errno));
modbus_free(ctx);
return -1;
}
addr = 0;
regval = (uint16_t)rand();
printf("Write 0x%X to register 0n", regval);
rc = modbus_write_register(ctx, addr, regval);
if (rc != 1) {
printf("ERROR modbus_write_register (%d)n", rc);
printf("Address = %d, value = %d (0x%X)n", addr, regval, regval);
}
modbus_close(ctx);
modbus_free(ctx);
return 0;
}
4.2 读取Modbus寄存器0x0
#include <stdio.h>
#ifndef _MSC_VER
#include <unistd.h>
#endif
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <modbus.h>
int main(void)
{
modbus_t *ctx;
int rc;
int addr;
uint16_t regval;
ctx = modbus_new_tcp("192.168.10.168", 502);
if (modbus_connect(ctx) == -1) {
fprintf(stderr, "Connection failed: %sn", modbus_strerror(errno));
modbus_free(ctx);
return -1;
}
addr = 0;
rc = modbus_read_registers(ctx, addr, 1, ®val);
if (rc != 1) {
printf("ERROR modbus_read_registers (%d)n", rc);
printf("Address = %dn", addr);
}
printf("Read 0x%X frome register 0n", regval);
modbus_close(ctx);
modbus_free(ctx);
return 0;
}
5. 使用例程写入数据到Modbus寄存器0x0,在ZCANPRO中,CAN报文的数据也会改变。
6. 使用ZCANPRO的发送数据功能,发送数据到PXB-6020中,使用例程读取Modbus寄存器0x0,寄存器0x0会改为CAN报文中的数据。
至此,Modbus TCP与CAN的协议转换完成,协议转换如此轻松!
通过以上的示例操作,使用PXB-6020构建了一个较简单的Modbus TCP与CAN的协议转换方式,轻松实现在EM-1000的CAN接口不足时,通过PXB-6020快速与CAN接口设备通讯的需求。仅需上位机简单配置就可实现CAN转入Modbus TCP总线,免去了大量的协议转换开发工作,极大的减少了系统搭建和项目开发的时间。
产品介绍:
PXB-6020是广州致远电子股份有限公司推出的一款 Modbus与CAN FD协议转换器。PXB-6020 设备有一路 RS485 接口,一路 CAN FD 接口和一路标准 10/100M 以太网接口。其中 Modbus可支持RTU 和TCP 两种协议,并可以配置为 Master 或 Slave 两种模式。CAN FD 波特率最高可支持5Mbps。PXB-6020 设备具有灵活的配置功能,可轻松实现 Modbus 协议数据到 CAN FD 数据间的无缝转换。
EM-1000是广州致远电子股份有限公司专为新能源储能系统设计的一款高性能、多接口工控机,拥有丰富的功能接口,可在储能系统应用中作为边缘EMS(能源管理系统)总控、通讯管理机、规约转换器或BAU(电池管理总控)使用。该系列产品集成丰富的外设接口,支持各类BMS、PCS、空调、电表、屏显等设备的通讯传输,且软件上支持RT-Linux、Ubuntu等操作系统,支持IEC-61850/IEC-104/EtherCAT等专用协议,可广泛满足各类储能系统的本地能源管理应用需求。