SiemensCP340模块与C8051F021单片机ASCII协议通信的实现
2014-10-21乔勇
乔勇
摘 要:本文详细介绍了Siemens公司的点到点通信处理器模块CP340如何与C8051F021单片机实现ASCII协议通信的。文章给出了硬件电路连接,介绍了通信协议的制定方法,并给出了PLC与单片机的编程介绍。
关键词:PLC;点到点通信;ASCII协议;RS-485
0 引言
本文介绍了CP340在SIMATIC S7-300中,采用RS-485的接口协议与C8051F021单片机的通讯解决方案,本系统以PLC为核心控制单元,通过通讯模块CP340与单片机系统实现485通信,实现主控单元与单片机系统之间的指令、数据通讯;实现数据接收功能,最后由PLC负责将这些数据进行运算处理。
CP340通讯处理器模块可以在西门子 S7系列中使用,该模块可以实现ASCII码、打印机驱动和3964三种通讯协议,通过集成在STEP7中参数化工具进行设置。并提供了三种通讯接口:RS232、模拟量20mA、RS422/485。
1 通讯接口设计
CP340-RS422/485可配置RS422全双工模式和RS485半双工模式,方案设计中配置为RS485半双工模式,CP340模块提供一15针接头,在硬件连接上需要引出第4脚R(A)/T(A)和第11脚R(B)/T(B)两个数据线引脚;而C8051F021单片机只需配置一个全双工的串行口线,为了增强抗干拢能力,设计上选用了内部集成隔离电路的MAX1480芯片,将其转化成RS485信号。
2 通讯协议的制定
CP340可以传输十六位进制的00-FF之间的任何数据,用户可以自己制定相关的传输协议,CP340的ASCII协议只有三种可选的波特率:2400bps、4800bps、9600bps。
制定通信协议:单片机作为从机,PLC作为主机,从机在建立与主机通信之前,一直处于对通信线路的监听状态,主机PLC通过CP340通讯模块向从机发送通讯指令,从机在接收到指令后对其进行识别,校验,判断是否主机呼叫从机,如果地址相符,确认呼叫从机。然后,从机停止监听通讯线路,并发送程序指定的数据。通信的指令格式如下:
(1)主机发送指令格式:从机地址号{参数号1:参数值1, 参数号2:参数值2, ……}CRC16校验码EOF。说明:1)第一个字节是地址,所以第9位必须置1;其他字节随意;2)第一个字节是从机特定地址。从机地址若被分配为ASCII码“1”,转换为十六进制是:0x31;3)参数号不分大小先后,可以发送单个或者多个参数,参数之间的分隔符可以是除了数字、e、E、小数点和冒号这些关键字之外的所有字符,例如空格、逗号等。所以参数可以分行。参数串以大括号“ }”结尾。所有字符都必须是ASCII字符。4)发送完参数串以后,上位机必须计算参数串的16位CRC校验码,并将校验码(用4位十六进制字符表示)发送给下位机,最后是EOF作为一帧数据的结尾。5)发送完EOF以后,从机计算接收到的参数串的16位CRC校验码,如果和主机发送的校验码吻合,则发送“1”作为通信有效应答,否则发送“0”作为通信错误应答。如果主机在发送数据完成后在约定时间(2秒)内没有接收到任何应答,也将认为通信发生错误。这样主机可以根据应答判断通信状况:“1”-发送成功;“0”-发送数据错误;无应答(“\0”)-可能线路发生故障。6)小于10的参数号不能在前面加“0”。如参数号“7”不能用“07”代替;7)参数号后面紧跟着冒号“:”,紧跟着参数值,紧跟着分隔符;(为了易于辨认,参数后可加注释)。8)系统将顺序搜索字符串,每当找到一个冒号“:”,就提取它前面的参数号和它后面的参数;直到字符串被搜索完毕。所以,如果传输多个相同的参数号,系统将最终接受最后的1个。9)注意:单片机内部串口输入缓冲区长度被设置为1024个字节,输出缓冲区长度则是1024字节。所以单次发送的字符串(包括校验码)总长度不能超过1024个字节!
(2)从机发送数据格式:从机地址号{数据}CRC16校验码EOF。
3 通信程序设计
(1)PLC通信程序设计。PLC(西门子 S7-300)以专用通讯模块与CP340接口进行数据交换,程序设计中用到功能块FB3(发送数据)和FB2(接收数据),FB3将数据块中的数据写入到CP340的发送缓冲区中,FB2将CP340接收缓冲区中的数据读回,存入到接收数据块中。
设计程序的时候,使用一个延时定时器T0来控制超时的时间,超时的时间必须大于发送指令开始到正确接收到一帧完整数据之间的时间,如果定时器输出‘1,则表示在规定的超时时间内没有接收到正确的数据,如果定时器输出‘0,则表示没有出现通讯错误,每次发送指令时启动定时器T0,如果正确的接收到数据,复位定时器T0后,再进行下一指令的发送,保证定时器T0输出为‘0。如果没有接收到正确数据,定时器输出置位,此时做相应的错误处理程序后再准备指令的重新发送。
波特率选用9600bps,1个起始位,8个数据位,1个停止位,发送数据块DB1,接收数据块DB10,假设发送指令字节数4个,接收最大字节数为40个,所以超时时间应大于:(1/9600)*(1+8+1)*(4+40)*1000=46ms,可设定超时时间为70ms。
指令数据块:在通讯模块中,定义指令格式,采用字符数组形式,内存分配如下表所示:
(2)单片机通信程序设计。单片机C8051F021程序使用C语言编写, RS485为半双工模式,一般情况下将RS485芯片使能于接收状态,接收到指令后,开始校验,若正确,就将RS485芯片置位于发送状态,并将主机所需要的数据发送出去,发送结束后,再使其置位于接收状态。通信程序采用中断方式,从机默认地址为01。
4 结束语
在点到點数据通讯系统设计中,采用SIMATIC S7-300和CP340通讯模块与C8051F021单片机实现了ASCII码协议通信,该方案结构简单,投资少,运行稳定,传输距离远,这使得PLC在工业在线检测仪表主机的开发中具有很高的应用价值。
参考文献:
[1]任冠甲.SIMATIC STEP7梯形逻辑参考手册[K].
[2]S7300-400语句表(STL)编程手册[K].
[3]徐爱钧,彭秀华.单片机高级语言C51应用程序设计[M].电子工业出版社,2001.