1 引言
贝尔利科技有限公司是一家从事科研开发和工程技术服务的高新技术企业,主营业务为机电产品制造、生产过程自动化、电气自动化、管理信息化等方面的系统集成、软件开发、工程设计、技术服务等, “贝尔利科技 ”凭借强大的技术队伍以及科学的管理和一系列综合系统集成项目的丰富经验,逐渐成长为实力雄厚的自动化系统的集成商。贝尔利科技以其丰富的运动定位控制系统和部件产品线,为客户提供了前所未有的解决方案甄选机会,以满足其特定的应用需求。其一款控制器已经分别集成了德国赫优讯 netIC系列 CC-LINK从站接口模块、 PROFIBUS从站接口模块及 Device-Net从站接口模块,并将集成其他现场总线及 PROFINET、Ethernet/IP等实时以太网协议的模块,因此能根据客户使用的 PLC提供的通讯接口,提供相应接口的产品。 2 德国赫优讯 netIC模块简介
德国赫优讯 netIC嵌入式模块作为完整的单片模块,包括: NIC 50-RE(实时以太网从站接口模块,支持各种实时以太网协议,包括: PROFINET、EtherCAT、Ethernet/IP、Modbus/TCP、POWERLINK、SERCOS III等)、NIC 50-DPS(PPROFIBUS从站接口模块)、NIC 50-DNS(DeviceNet从站接口模块)、NIC 50-COS(CANopen从站接口模块)、NIC 50-CCS(CCLINK从站接口模块)、NIC 50-CPS(CompoNet从站接口模块)等型号,所有型号都采用统一的32针DIL封装,尺寸紧凑,片上集成了现场总线与实时以太网通讯接口所需要的所有元件。同时还提供了 netX Configuration Tool配置软件和配套的评估板,方便用户进行产品开发。图1为NIC50-CCS模块的实物图。
图 1 NIC 50-CCS模块
3 硬件开发
netIC模块提供了32针管脚,支持 UART接口通过 Modbus RTU 协议集成入用户的主机系统,未来还将扩展SPI及I2C接口。因为模块本身已经提供了同步串行接口,如果作为简单的IO设备,可以不需要额外的主CPU。本例中使用了C8051F系列混合信号ISP FLASH微控制器作为主CPU,其基于高速、流水线结构的8051兼容CIP-51内核,并提供了2路UART接口及其他丰富外设,因此可以在软件上实现Modbus RTU协议与netIC模块通讯。
图2为 NIC 50-CCS模块的管脚图,与其他型号模块唯一的区别只是在协议通讯接口的管脚,因此对于用户更换成其他模块非常方便。其中,29、30、31管脚为串行主机接口,可以与主CPU的UART口直接连接,也可以通过RS485芯片进行连接;13、14管脚为CC-LINK总线接口;27、28管脚为诊断接口,连接PC,进行产品配置;3、4、5、6、7管脚为串行移位寄存器接口,用于连接外部开关量或模拟量信号。
图 2 NIC 50-CCS管脚图
因此 netIC模块的硬件开发非常方便,开发示意图如图3所示:
图 3 硬件开发示意图
硬件开发的电路原理图如图4所示:
同时,用户还可以增加诊断接口,数字量模拟量输入输出接口,状态显示LED灯等外围电路。
4 软件开发
4.1 netIC模块配置
netIC模块本身的使用不需要任何程序上的开发,只需要使用提供的配置软件和评估板配置Modbus及CC-LINK协议参数,再下载协议堆栈(Firmware)和配置文件。所有信息均保存在netIC模块中的寄存器区域,该寄存器区域的结构如图5所示,例如,现场总线主站发送至netIC模块的数据保存在从1000开始的寄存器区域;netIC模块发送至现场总线主站的数据保存在从2000开始的寄存器区域。同时,主CPU也可以通过Modbus RTU直接访问所有寄存器区域,并通过Modbus修改Modbus本身的波特率及总线协议的所有参数,如波特率、站地址、输入输出字节等。
4.2 netIC模块与主
CPU通讯 netIC模块与C8051F MCU的通讯方式为Modbus RTU,因此需要在MCU的用户程序中实现Modbus RTU的读写功能。netIC模块可以作为Modbus通讯的主站或从站,因此MCU的UART口作为从站或主站。在用户程序中,通过Modbus命令码3读取netIC模块接收到的总线数据,通过Modbus命令码16写数据到netIC模块,模块会自动将数据打包成协议数据帧发送至总线上。
写寄存器命令代码如下:
void UART0_send(char *cdata,char n)
{
char i,*pt;
pt = cdata; //首地址放到指针中
EA = 1; //开
cpu中断
REN0 = 0;
ES0 = 0; //关闭串行口中断
Rs485_Tx_Enable = 1; //485在发送状态
TI0 =0; //清中发送断标志位
for(i=0;i<n;i++)
{
SBUF0 = *pt; //启动发送过程
while(TI0==0); //等待发送结束
TI0 = 0; //发送结束后将中断标志清零
pt++; //指向下一个要发送的地址
}
TI0 = 0;
Rs485_Tx_Enable = 0; //置
485在接受状态
ES0 = 1; //打开串行口中断
data_transfer = 0;
REN0 = 1;
}
读寄存器命令代码如下:
void UART0_receive(void)
{
unsigned char temp_receive;
temp_receive = SBUF0;
if(start==1 && end==0)
{
TestDataBuffer[byte_num]=temp_receive;
byte_num++;
}
else if(1==overtime && 0==byte_num && start==0 && end==1)
{
LocalAddress=temp_receive;
TestDataBuffer[byte_num]=LocalAddress;
if(LocalAddress==0x02)
{
byte_num=1;
start=1;
end=0;
}
}
}
5 小结
基于NIC 50-CCS模块设计的贝尔利控制器产品,目前已在现场成功投入运行,并且通讯质量稳定可靠,效果良好。德国赫优讯的netIC产品系列软硬件开发简单,并且具有统一的32针DIL封装形式,为用户提供了一种很好的开发现场总线或实时以太网从站设备的解决方案。