摘 要:文章设计了单片机和PLC实现串行通信的硬件连接和软件变成的方法,借助于RS232转RS485电路,将PLC与单片机开发板进行连接,上位机就是单片机,数据通过单片机传送给PLC,从而准确的控制PLC上三相异步电机的正转和反转,PLC可以对所接收到的数据进行审核,充分的提升了所接收到数据的可靠性,之后便会将这些数据反馈给单片机,从而实现单片机和PLC相结合对电机的有效控制。
关键词:单片机;PLC;通讯系统的实现
1 基于单片机与PLC通讯系统软件的设计
1.1 通讯协议
要想实现基于单片机和PLC的通讯系统,主要是借助于单片机向PLC接收数据和下达命令的功能,通讯协议则应采用命令和响应的模式,一帧就是一次通信发送的一组数据,33个字符组成一帧,在这里应注意以下几点内容:(1)起始字符应用g表示,并且其也占用一个字符;(2)指令主要分为读和写两种类型,文章所采用的为写指令,其也占用一个字符;(3)采用十六进制的ASCII码来表示目标PLC的站地址,在PLC程序中应先将其设定好,并且应与单片机保持一致,应占用两个字符;(4)同样的应用十六进制的ASCII码来表示目标寄存器的地址,在PLC的内部应用4个字节来表示寄存器,这四个字节分别表示寄存器的类型和号码,共占用4个字符;(5)十六进制的ASCII码也可以表示要写入的数据,虽然它有16个字节,但最多只可写入8个字节,同时应将数据区填满;(6)BCC校验码的作用为检查传输的数据中是否存在错误,保证传输的准确性,其占用两个字符;(7)结束字符应用G表示,其与起始字符一样,占用一个字符。
在单片机接收到PLC的反馈信息后,无论是立即执行开始命令还是结束命令,它们的字符分别为g和G,此时电动机的状态信息就是状态信息。文章所采用的PLC的类型为S7-200,其支持多种通讯协议,比如说点对点接口协议、多点接口协议、PROFIBUS协议以及自由通信协议等,其都是支持的,在自由口的通信模式下,S7-200的串行通讯口就会受到相应应用程序的控制,如果其是出于RUN的方式下,在选择了自由口这一通信模式后,用户的程序就会通过接收中断和传送中断来接收指令和发送指令,此时就实现了用户程序对通信口操作的有效控制。
通过寄存器SMB130和SMB30来准确的设置PLC的通信参数,校验方式、波特率以及数据位等参数都应与单片机保持一致,其内部的运行流程为:程序开始-设置通讯端-等待接收-按照相应的协议处理数据-检验数据并进行相应的操作。
1.2 通讯协议的实现
1.2.1 单片机初始化部分子程序
void init_serialcomm(void)
{SCON=0x50; /*串口工作方式1,允許接收*/
TMOD=0x20; PCON=0x00; /*SMOD=0*/
TH1=0xFD; /*波特率为9.6K*/
TL1=0xFD; IE=0x95; /*开总中断,开串口中断, 开外部中断0,开外部中断1*/
……}
单片机发送数据的子程序
void send_data() interrupt 0 using 2
{EX0=0; delay1(4) ; if(KEY==0)
{ for(j=0;j<33;j++)
{SBUF=tab[j] ; /* 将数据发送到串口*/
while(!TI) ; /* 等待串口数据发送结束*/
TI=0; /*复位串口中断*/}}
EX0=1;}
单片机接收数据子程序
void intcom() interrupt 4 using 0 /*输入中断*/
{EX0=0; EX1=0;
For(i=0;i<21;++)
{If(RI); RI=0; rc[i]=SBUF;}}
1.2.2 PLC的部分通讯程序
(1)PLC的主程序部分
LD SM0.1
CALL SBR_0:SBR0 //首次扫描调用初始化程序
LDB=VB134, VB199 // 指令中的站地址与本站地址相符
AB=VB102, 6 //指令类型为写指令
A M0.0 //BCC校验码正确
CALL write:SBR1 // 调用写子程序
LD M0.1
CALL verify:SBR3 // 调用BCC 校验码子程序
LD SM0.0
CALL SBR_2:SBR2 //调用电动机控制子程序
LD SM4.5 //当端口空闲时启动RCV
RCV VB100, 0
(2)PLC的初始化程序
LD SM0.0
MOVB 9, SMB30 //自由口协议,9600bps,8个数据位,无校验位
LD SM0.0 //RCV指令初始化
MOVB 16#EC, SMB87
MOVB 103, SMB88
MOVB 71, SMB89
MOVW +1000, SMW92
MOVB 35, SMB94
R SM87.2, 1
LD SM0.0
ATCH INT_0:INT0, 23 //接收完成事件连接到中断程序0
LD SM0.0
ATCH INT_1:INT1, 9 //发送完成事件连接到中断程序1
LD SM0.0
ENI
LD SM0.0
MOVB 3, VB199 //将本机站地址装入寄存器
LD SM0.0
MOVD &VB102, VD149 //装入地址指针
MOVB 0, VB179 //BCC码寄存器清零
MOVD &VB156, VD181 //装入地址指针
MOVB 0, VB180 //BCC校验码寄存器清
2 基于单片机与PLC通讯系统硬件的连接
此通讯系统的硬件部分主要由四部分组成,分别为三相异步电动机、S7-200PLC、STC89C52单片机和MAX485接口芯片,在单片机的开发板上同时集成了MAX485接口芯片和STC89C52单片机,并且在其上面的电平已经被转换成了RS232电平,因此,RS485总线与开发板就是直接相连的,之后连接PLC,控制电动机主要是依靠PLC上的输出信号控制继电器这一功能。
2.1 232/485电平转换电路。由于单片机的通信口采用的为RS232,而PLC采用的则为RS485,它们的电气规范是无法较好的相容的,那么就用有中间电路来匹配RS232转RS485,而PLC上的PPI电缆正是这样一种匹配电缆。在RS232接口上,发送TXD线和接收RXD线是相互独立的,接收和发送的工作也是可以同时进行的,因此,应将RS232设计成两个设备之间的单独通讯,对于两个设备的联接工作并不适用,因此,在它同时进行接收和发送工作时也是不会发生通讯碰撞的。RS485在其通訊过程中采用的为两根差分的A线和B线,0和1分别代表其相对的电平,而在同一个时间段是只能由一个设备来驱动总线的。作为Maxim公司最新生产的一种使用RS485的接口芯片,MAX485接口芯片的工作环境为+5V的单一电源,并且其采用的为半双工的通讯方式。
图1为PLC与MAX485接口芯片的连接图,其中DI脚是数据输入引脚,RO脚是数据输出引脚,DE脚是DI脚的使能端,在高电平时选通,而RE脚则是RO脚的使能端,在低电平时有效。A和B两个脚同时是该芯片的输入端和输出端,而在具体确定MAX485接口芯片是该进行输入还是输出的操作时,则应充分的考虑到DE脚和RE脚的电平情况。
通过以上的论述,对基于单片机与PLC通讯系统软件的设计以及基于单片机与PLC通讯系统硬件的连接两个方面的内容进行了详细的分析和探讨。此通讯系统采用的是S7-200PLC和51单片机串行的方式,其采用的为差分接收和平衡驱动的RS-485的接口标准,具体开发成本低并且操作简单等特点,在其实际运行的过程中,具有较强的抗干扰能力,并且性能十分稳定。因此,应继续以此系统为原型,将智能传感技术和网络技术应用其中,加强其功能,从而使此系统得到更加广泛的应用。
参考文献
[1]杨汉生.单片机多机通信的Proteus仿真设计[J].四川兵工学报,2010.
[2]段玉涛.虚拟PLC硬件仿真系统的研究与设计[J].广东工业大学,2011.
作者简介:孙永波(1980-),身份证号:230106198012252014,本科学历:电气自动化专业,2000年至2014年4月在百威英博哈尔滨啤酒有限公司历任自动化技术员,工程师、生产维护主管工作,有较丰富的电气自动化系统设计及维护经验。