PLC实现两线连接型数显仪表系统设计
数显仪表的程序由初始化、外中断0服务程序、外中断1服务程序和定时器T0中断服务程序4部分组成。T0每隔5ms中断1次,在其中断服务程序中根据接收到的显示数据及其小数点位置信息完成4位数码管的动态显示。外中断0服务程序用于检测同步信号,外中断1服务程序用于接收16位显示数据的BCD编码和2位表示小数点显示位置的信息。
3.1 外中断0服务程序
外中断0由数据信号线的下降沿触发,在其中断服务程序中,如果检测到时钟线为低电平,则视为同步信号。当检测到3个同步脉冲后,则表明收到了正确的同步信号,此时关闭外中断0,开启外中断1,借助于外中断1服务程序接收数据。如果在前一次或前两次中断服务程序中已检测同步脉冲而本次未检测到同步脉冲,则视为无效同步信号。外中断0服务程序的主要代码如下:
void Int0_Srvice(void) interrupt 0
{ p33=1;
if(p33==0) SysClock++; //有效,同步脉冲加1
else SysClock=0; //无效,同步脉冲清零
if(SysClock==3)
{ //检测到3个同步脉冲
RecEnable=1; //置允许接收标志
EX0=0; //关闭外中断0
EX1=1; //开放外中断1
}}
3.2 外中断1服务程序
外中断1由时钟信号线的下降沿触发,在其中断服务程序中,如果查询到已建立允许接收标志,则接收16位显示数据的BCD码和2位小数点位置信息,并将其转换为18位并行数据,存于DispData变量中供T0中断服务程序进行显示。由于显示数据和小数点位置信息都是低位在前,高位在后,所以在程序中使用右移操作实现串行数据到并行数据的转换。小数点位置信息为0~3时,表示小数点分别位于数码管的千位、百位、十位和个位之后。如果小数点在个位之后,则不显示小数点。当接收到18位信息后,则关闭外中断1,重新开放外中断0进行下一周期的数据传输。外中断1服务程序的主要代码如下:
void Int1_Srvice(void) interrupt 2
{ if(RecEnable==1) //允许接收
{ p32=1; //检测数据线电平
if(p32==1) RecData=RecData|0x40000;
RecData=RecData>>1; //实现串/并转换
DataClock++;
if(DataClock==19) //已接收到18位数据
{ //显示数据存于DispData中
DispData=RecData;RecData=0;
SysClock=0;DataClock=0;
RecDone=1;RecEnable=0;
EX0=1; //开外中断0
EX1=0; //关外中断1
}}}
4 应用实例
利用PLC系统的(n+1)个输出点可以连接n台数显仪表,其中1点用作公共时钟线,n点用作n台数显仪表的数据线。使用数显仪表显示PLC系统的数据或参数时,还必须给PLC系统编写满足时序要求的驱动程序。
4.1 PLC驱动程序设计
此处以三菱FX2N PLC系统为例,介绍PLC系统驱动程序的编写方法。假设使用Y0作为数据线,Y1作为时钟线,则PLC驱动程序的梯形图如图5所示。程序中使用D0单元存放显示数据,其取值范围为0~9999,D1单元存放小数点位置信息,其取值范围为0~3。占用的资源包括计数器C0~C1和中间继电器M100~M131,可以结合用户程序进行相应的调整。
图5 FX2N PLC显示驱动程序
4.2 多台数显仪表与PLC系统的连接
多台数显仪表与PLC系统的连接如图6所示,图中的1台FX2N PLC连接了8台数显仪表,PLC的Y10用作公共时钟线,Y0~Y7分别用作8台数显仪表的数据线。PLC系统的驱动程序和图5类似。由于多台仪表的时钟线是公共的,数据线是并行输出的,因此多台数显仪表的数据刷新时间和其连接的数量无关,可以确保PLC系统数据显示的实时性。
5 结论
该数显仪表无需知晓任何PLC系统的协议,仅使用PLC系统的n+1个输出点即可实现在n台数显仪表上显示其数据或参数。占用较少的PLC资源,既可扩充PLC系统的外围显示设备,又间接地解决了HMI无法适应恶劣工作环境等实际工程问题。
本文作者创新点:该数显仪表解决了PLC系统直接驱动数码管占用太多资源的问题,间接地解决了基于PLC系统通信口的一类数显仪表需要知晓通信协议等问题。
评论