0 引言
可编程控制器是专为工业环境下应用而设计的控制器。手持式PLC编程器是通过专用接口直接连接到PLC,对PLC进行编程和调试,是PLC应用最广泛的编程工具。为了保证手持式编程器可以对整个系统网络中的相关设备进行信息的交换,以及数据通信的可靠性,CAN总线协议的通信是很好的一种方式。
S3C44B0x是Samsung公司推出的一款基于ARM7TDMI内核的32位RISC处理器,它具有较丰富的片上资源,适合嵌入式产品的开发,为手持设备和一般类型的应用提供了高性价比和高性能的微控制器解决方案。但其不具备CAN总线模块,要使其具备CAN通信的功能,便要对其具体的接口方式进行设计。文章即基于S3C44B0x与CAN控制芯片MCP2510对PLC手持编程器的通信接口设计进行了研究。
1 通信硬件接口电路
系统当中,PLC手持编程器与PLC主机之间的通信方式采用CAN总线方式;CAN控制器为MCP2510,它是一个宽电压的器件,可以识别3.3V的电平信号,它还是一个SPI接口的器件。同样,主控芯片S3CA4B0x芯片内置同步串行口(SYNCHRONOUSI/O)模块,他可以和各种需要串行数据总线的外部设备进行连接。这样,只要通过两条线,TXD和RXD就可以对MCP2510进行数据的传输和控制。这时MCP2510作为S3C44B0x的一个从设备,可以将S3C44B0x的SIO接口直接接在MCP2510的SPI接口上。
具体连接方式:S3C44B0x的收端脚SIORXD接MCP2510的SO脚;S3C44B0x的发端脚
SIOTXD接MCP2510的SI脚;MCP2510的片选信号CS用S3C44B0x的标准I/O口GPF2控制,GPF2置低时选通MCP2510,反之则不选通;由于MCP2510的复位管脚RESET和S3C44B0x的复位管脚nRESET都是低电平有效,因而可以将他们直接接在一起,系统上电自动复位或者手动按键复位;MCP2510的中断请求引脚INT接在S3C44B0x的外部中断ExtINT2上,这样MCP2510在满足一定的条件下就可以向CPU发送中断请求了。收发器采用TJA1050来取代相对传统的PCA82C250,其功能更加完善。MCP2510出来的CAN收与CAN发信号和TJA1050接在一起,从而构成一个完整的CAN总线收发模块。由S3C44B0x、MCP2510和TJA1050构成的CAN总线控制收发接口电路如图1所示

图1 CAN总线接口电路
2 S3C44B0x SIO功能
SIO意为同步输入/输出,也是一种串行接口标准,提供了与各种串行外设相连接的接口。当它与各种类型的串行外设接口相连时,该SIO模块能以一定的频率发送和接收8位的串行数据。为了保证数据传输率的可变性,时钟源可选择内部时钟或外部时钟源。
在正常工作模式,发送预接收同时进行,用串行I/O接口,8位数据可在串行线被交换。串行输出数据来自一个串行输入引脚SIORxD,通过一个串行输出引脚输出,并同时被串行时钟引脚SIOCK同步。如果使能中断,则传送或接收数据后,将产生SIO中断请求。发送和接收总是同时发生的,如果只想发送数据,则可认为接收数据为空。
通过对SIOCON和SBRDR寄存器中相应的位进行适当的设置来控制传送频率。串行接口可被内部时钟或外部时钟操作。如果用内部时钟,则可通过调整波特率数据寄存器的值改变其频率。
如要将手持编程器数据发送给PLC主机时,就应对S3C44B0x的SIO进行相应的配置,对SIO模块编程,应遵循如下步骤:
(1) 配置SIOTxD、SIOCLK和SIORxD;
(2)设置SIOCON来适当配置串行I/O模块;
(3)为了产生中断,设置串行I/O中断允许位,并参考步骤(1)中断控制器;
(4)写数据到SIODAT;
(5)为了接收/传送数据,在步骤(2)中设置SIOCON[3]来启动数据移位操作;
(6)当数据移位操作完成时,SIO中断请求,且SIODAT接收到数据或发送数据或是空数据;
(7)返回第(4)步。
3 手持编程器与PLC主机数据传输软件实现
(1)MCP2510初始化
S3C44B0x与MCP2510的硬件电路连接如图1所示。在要使MCP2510进行正确的收发数据以前要先对其进行正确的初始化配置,其初始化如下:首先置GF2为0,送SIOTXD复位指令0x30,其次复位GPF2并进行延时,再送SIOTXD“写指令”代码0x02,设置MCP2510为配置模式;在此模式下设置通信所需的波特率,设置发送/接收寄存器,最后使MCP2510进入正常工作模式。正确配置以后,MCP2510就可以按照需要进行数据的传输了。
(2)数据发送
手持编程器的所有程序数据都以二进制的形式存放于存储器当中,要将这些数据传输到PLC主机可采用顺序传输的方式;由于MCP2510对于发送数据,可以设定优先级别;在发送起始帧SOF之前,器件将所有等待发送报文的发送缓冲器的优先级进行比较,具有较高优先级的发送缓冲器将首先发送;所以还可以按照需要设置需要传输数据优先级别,采用按不同优先级别进行数据传输的方式。如果发送缓冲器0的优先级设定比发送缓冲器1高,缓冲器0将首先发送。如果两个缓冲器的优先级相同,编号较高的发送缓冲器将优先发送。如果发送缓冲器1与发送缓冲器0的优先级设定相同,缓冲器1将优先发送。发送优先级的设定共有4个等级。如果某个发送缓冲器的TXBNCTRL.TXP<1:0>设定为11,该发送缓冲器具有最高的发送优先级。如果TXBNCTRL.TXP<1:0>设定为00,该发送缓冲的发送优先级最低。
手持编程器向PLC主机发送数据流程图如图2所示。在发送数据时,首先要判断的是CAN总线是否空闲,如遇总线正忙时,则采取小段延时后不断请求的方式,直到总线空闲。由于,CAN总线上挂接有多个接点,每个接点的发送信息的报文头代码不同,当PLC主机判断是其所需要接收的数据以后会返回一个准备好接收的信息,这时手持编程器就可以向主机传输用户编写好的程序代码数据了;当所有数据传输完毕以后,手持编程器则停止发送并返回到一般工作模式。

(3)数据接收
MCP2510具有两个全文接收缓冲器和一个报文集成缓冲器(MAB)作为接收缓冲器。在三个接收缓冲器中,MAB总能够接收来自总线的下一条报文。其余两个接收缓冲器(RXB0和RXB1)则从协议引擎接收完整的报文。当其中一个缓冲器处于接收等待或保存着上一条接收到的报文时,MCU可对另一缓冲器进行访问。
当报文传送至某一接收缓冲器,与该接收缓冲器对应的CANINTF.RXNIF位将置1。一旦缓冲器中的报文处理完毕,MCU就必须将该位清除以接收下一条报文。该控制位提供的锁定功能确保在MCU尚未处理完上一条报文前,MCP2510不会将新的报文载入接收缓冲器。如果ANINTE.RXNIE位被置1,器件会在INT 引脚产生一个中断, 显示接收到有效报文。而且,一旦报文被验收,MAB中所有的内容将传送到接收缓冲器。这表明无论标识符为何种类型或接收到多少字节的数据,整个接收缓冲器都将被MAB的内容所改写。因此,在接收任何报文后,必须断定接收缓冲器中所有寄存器的内容都被修改了。
如图1所示,在电路设计上,将接收缓冲器满引脚RX0BF和RX1BF这两个引脚通过发光二极管与高电平相连,INT引脚与S3C44B0x的外部中断6相连;那么,INT引脚在多种情况下可向MCU 提出中断请求。这时RX0BF和RX1BF可用来显示有效报文是否分别载入RXB0或RXB1。当有有效报文载入时,RX0BF和RX1BF这两个引脚就会产生一个低电平信号,这是发光二极管就会点亮;这样就可以很清楚、直观的判断出是否有效报文被载入RXB0和RXB1寄存器。
跟发送数据一样,接收数据也同样可以设定优先级别;RXB0 是具有较高优先级的寄存器,并配置2 个报文验收滤波寄存器。RXB1优先级较低,配置有4个验收滤波器寄存器。RXB0的验收滤波寄存器数量较少,因此RXB0接受匹配条件更为严格,表明RXB0具有较高的优先级。MCP2510接收数据的工作如下:首先,复位MCP2510,送SIOTXD“写指令”代码0x02,并按需要设置屏蔽滤波器,启动接收;在启动接收以后,判断所接收到的报文是否有效,如为无效报文则丢弃并返回;如为有效报文,则判断其是否符合载入条件,符合条件则载入,不符合则丢弃;完成以上工作后返回。
手持编程器接收数据跟发送数据一样,同样需要判断是否是自己应该接收的数据信息,如果不是则丢弃;如果是,继续判断是否符合载入条件,符合条件则进行载入,不符合则丢弃。接收数据流程图如图3所示。
4 结论
本文的创新点:对传统的PLC手持式编程器采用RS-232的通信接口进行了改进;实现了在S3C44B0x的控制下手持编程器与PLC主机通过CAN总线进行数据传输的接口方式。由于采用了MCP2510这样的带有SPI协议的模块,使其占用数据、地址总线资源大大减少;它所提供的中断引脚也使整个系统的灵活性提高;这也使整个系统设计变得简单,并使整个系统处理速度大大提高。经实验表明由S3C44B0x扩展CAN总线,使得数据传输更加可靠、抗干扰能力大大增强。




