张彦文
【摘 要】本文给出了一个在以计算机为核心的控制系统中,采用中断处理方法实现输入状态量变化自动检测的电路的设计方案。该电路可以自动检测发生变化的状态位,对发生变化的状态位的序号进行编码,并以中断请求的方式,将变化状态位的序号编码通知处理器。处理器根据状态位的序号编码,可快速确定变化的状态量信号,从而可极大地提高处理器状态量检测的效率。电路简单、实用,具有很高的使用价值。
【关键词】控制系统;状态量快速处理;自动检测;中断
0 前言
工业或矿业生产系统是一个非常复杂、多元的产业,涉及到多种不同的生产过程。如何有效地管理各个过程与系统,需要将生产过程中产生的过程数据以实时互动的方式传递给现场设备操作人员及生产管理人员,从而实现对生产过程的规划、控制和优化。如何快速的采集系统中大量设备的运行及现场工况状态量信号,是以计算机为核心的工业、矿业自动化系统的一个重要问题。常用的处理方法是采用CPU处理器毫秒级的计时器中断,周期性的检测状态量的变化与否,这将会消耗大量的处理器时间。因为多数情况下状态量变化的频度较低,CPU处理器的中断处理检测到状态量变化的机会也是较低的,导致CPU处理器多数时间都在进行无用的状态巡检,浪费了大量的处理器时间。
本文设计了一种以计算机中断处理技术实现输入状态量变化自动检测的数字输入电路,该电路被称之为“变化检测器”。电路的主要功能为当外部接点的状态量变化时,“变化检测器”向CPU处理器产生外部中断请求,并将变化的状态量的位序号进行编码,将编码发送给CPU处理器。CPU处理器根据位序号编码,可快速确定变化的状态量信号,从而极大地提高CPU处理器的处理效率。如在16路状态量信号中,第6位状态位发生了变化,“变化检测器”电路产生中断请求,并对发生变化的状态位的序号“0101”(二进制)进行编码。
1 电路逻辑设计
“变化检测器”电路可自动检测外部接点的状态量改变与否。当检测到外部状态量发生改变时,将变化的状态量的位序号信息进行编码,并主动向CPU处理器发出外部中断请求,CPU处理器响应中断请求。中断处理程序根据中位序号编码信息,可以快速地确定变化的状态量的位置。
理论上讲,“变化检测器”的原理较为复杂,且要将这个原理变成实用的应用电路,需要有多种功能的逻辑部件支持。这些功能部件包括状态位边沿变化检测用“锁存器”和“异或门”电路;状态位同时变化的优先级判别电路;状态位变化保持寄存器和位序号编码电路;中断发生电路;接点状态量变化与CPU处理器读取访问同时发生时的调停判别电路等。
图1给出的是可进行16路外部接点状态量变化自动检测电路“变化检测器”的硬件原理图。该电路是以可编程逻辑器件PAL22V10为核心,结合RAM存储器 IDT6167、多路选择器74HC257、与门器件74HC00、或门器件74HC32、D锁存器74HC74、JK锁存器74HC109、驱动电路74HC244等器件构成的。其工作原理如下:外部接点状态ID0~ID15经过两片74HC257将16个状态信号分成两个8位信号组,在IC4器件(PAL22V10)的时序控制下,与存储在RAM器件IC1中接点的“原”状态逐位比较。当比较结果不同时,IC4器件则停止比较,保存当前变化状态位的位序号C1~C4于数据缓存器IC5(74HC244),并激活中断锁存器IC10A(74HC109),产生中断请求。当CPU处理器响应中断后,发出数据读取命令/CDRD,从数据缓存器IC5中读出变化的位序号CD0~CD7,同时由锁存器件IC11(74HC74)构成的中断应答电路,来清除中断锁存器IC10A的中断请求,重新启动IC4器件,继续进行状态位比较。IC4是“变化检测器”电路的控制核心,电路检测和控制时序是由此器件内部逻辑产生。IDT6167是16Kx1Bit的CMOS静态RAM,存储外部接点的“原”状态。D锁存器74HC74、JK锁存器74HC109构成中断请求电路和应答电路。
该电路由常用器件组成。其中用到了两个关键器件。一个是CMOS静态RAM存储器IDT6167。IDT6167是一个高速静态存储器RAM,容量为16Kx1Bit,访问速度为15ns,完全可以满足状态量变化的快速、实时检测要求。另外,IDT6167的输入、输出都是TTL电平兼容,单5V电源供电,可极大的减化系统的设计。IDT6167存储器的数据宽度为1位,非常适合于存储以“位”为单位来表示的状态量,因此,在“变化检测器”电路中,它被用作状态量的“记忆”单元。由于 “变化检测器”电路具有16路状态量的检测能力,因此,IDT6167仅需要配置四根地址线;另一个器件为可编程器件PAL22V10,它是“变化检测器”电路的核心。PAL22V10的编程逻辑内含有一个5位计数器、8选1多路选择器、锁存器等,以产生“变化检测器”电路的控制逻辑和时序。IDT6167存储器的读写、变化比较、中断产生等操作,都是在可编程器件PAL22V10的逻辑控制下自动完成。其内部逻辑使用硬件描述语言ABEL描述如下。
MODULE PLD2 FLAG ‘-JA:,-R3
TITLE ‘Change Detector
“DECLARTIONS
SPLD2 DEVICE ‘P22V10;
CLK,RST,EN,Y,N,P PIN 1,2,3,4,14,15;
X7,X6,X5,X4,X3,X2,X1,X0 PIN 5,6,7,8,9,10,11,13;
C4,C3,C2,C1,C0,SAV,NDI,CD PIN 19,20,21,22,23,16,17,18;
RESET,PRESET NODE 25,26;
C4,C3,C2,C1,C0,NDI,CD ISTYPE ‘POS;
SAV ISTYPE ‘NEG;
H,L,X,Z,CK = 1,0,.X.,.Z.,.C.;
CNT = [C3,C2,C1];
ACNT = [C4,C3,C2,C1,C0];
EQUATION
RESET = !RST;
CD := !C0 & !SAV & ((!X0 & (CNT == 0) # !X1 & (CNT ==1) # !X2 & (CNT == 2) # !X3 & (CNT == 3) # !X4 & (CNT == 4) # !X5
& (CNT == 5) # !X6 & (CNT == 6) # !X7 & (CNT ==7) ) & Y & P
# (X0 & (CNT == 0) # X1 & (CNT == 1) # X2 & (CNT == 2) # X3 & (CNT == 3) # X4 & (CNT == 4) #X5
& (CNT == 5) # X6 & (CNT == 6) # X7 & (CNT == 7) ) & !Y & N);
NDI := X0 & (CNT == 0) # X1 & (CNT == 1) # X2 & (CNT == 2) # X3 & (CNT == 3) # X4 & (CNT == 4) # X5 & (CNT == 5) # X6
& (CNT == 6) # X7 & (CNT == 7) ;
!SAV := C0 & C1 & C2 & C3 & C4 # !SAV;
!C0 := !EN & !CD & C0 # (EN # CD) & !C0;
!C1 := !EN & !CD & C0 & C1 # !C0 & !C1 # (EN # CD) & !C1;
!C2 := !EN & !CD & C0 & C1 & C2 # !C0 & !C2 # !C1 & !C2 # (EN # CD) & !C2;
!C3 := !EN & !CD & C0 & C1 & C2 &C3 # !C0 & !C3 # !C1 & !C3 # !C2 & !C3 # (EN # CD) & !C3;
!C4 := !EN & !CD & C0 & C1 & C2 & C3 & C4 # !C0 & !C4 # !C1 & !C4 # !C2 & !C4 # !C3 & !C4
# (EN # CD) & !C4;
从上述的ABEL描述语言编写的逻辑代码可以看出,PAL22V10的控制逻辑较为复杂。图2为PAL22V10产生的电路控制时序图。其中C1~C4位计数器信号,/SAV位初始状态存储标志,NDI为变化状态位的当前值,CD为状态位变化检出信号,INT(/EN)为中断请求(终止计数器)信号,/WE为IDT6167写入信号,/ACK为中断应答信号。
2 电路动作分析
在图1所示的逻辑图中,PAL22V10内部计数器C1~C4在状态检查中起着非常重要的作用。按照PAL22V10内部计数器的状态位序号,逐次扫描各个输入状态位,以检测每个外部接点的“原”状态(存储在RAM中)与“新”状态的差异。
从图2时序可以看出,计数器C1~C4对应计数值(0~15),分别对应了16个状态位序号。当/RST复位后,C1~C4从0开始计数,直至计数值达到15的这段时间内,电路将外部接点的16个状态的初始值写入到IDT6167存储器中。此后,/SAV信号变为低电平“L”,终止IDT6167的写入操作。如果某个状态位发生了改变,状态位变化检出信号CD变为高电平,此信号置位IC10A锁存器,向CPU处理器产生中断信号INT和存储器写入信号/WE,将变化的状态位的“新”值写入IDT6167存储器中,并产生/EN信号,停止PAL22V10内部计数器的计数。此时,PAL22V10内部计数器C1~C4的内容就是变化状态位的序号编码。
CPU应答中断时,通过/CDRD信号,使能IC5,读取变化的位序号编码CD0~CD7后,复位IC11A锁存器,发出中断应答信号/ACK,清除器件IC10A的中断请求信号INT,重新启动PAL22V10内计数器的计数动作。由于利用位序号编码CD0~CD7就可以知道变化状态位的具体位置,所以软件处理就相当容易了。IC1器件IDT6167具有16Kx1Bit的存储容量。因为“变化检测器”电路的处理能力为16路状态量,所以仅使用了IDT6167器件的16个物理存储单元,用于保存外部接点的“原”状态信息。PAL22V10内部计数器C1~C4用作IDT6167存储器的地址线。在进行状态位比较操作时,计数器C1~C4的内容决定了当前正在进行比较的状态位的序号。从IDT6167存储器中读出C1~C4对应的状态位“原”信息DO,与提供给IC4器件的外部状态信息X0~X7,进行对位比较。每次比较操作,都会发生一次存储器读取,所以,IDT6167存储器发生读取操作远多于写入操作的次数。IDT6167存储器的写入操作只在下列的两种情况下才会发生。一是,系统发生复位后,直至/SAV信号变为低电平“L”前,16个状态位初始信息的写入;二是,当电路检出变化的CD信号变为高电平“H”时,发生变化的状态位对应的RAM存储单元的“新”状态位信息的写入。IC2和IC3是多路选择器,由PAL22V10内部计数器的C4信号进行控制。当计数器的C4信号为“L”时,将外部接点的ID0~ID7提供给IC1的X0~X7。当计数器的C4信号为“H”时,将外部接点的ID8~ID15提供给IC1的X0~X7。CPU响应中断时,通过读取CD0~CD7可获得变化状态位的序号信号,也可以通过ID0~ID15,直接获得外部接点的状态信息。这两个信息结合起来,可以快速确定变化状态位的当前状态值。
3 应用接口说明
“变化检测器”作为外部接点变化自动检测的核心电路,具体使用时,需要提供必要的接口电路和控制信号。这些信号包括:
(1)输入信号
复位信号/RST;
时钟信号CLK;
读信号/CDRD;
外部状态信号ID0~ID15。
(2)输出信号
中断请求信号INT;
变化位的序号编码信号CD0~CD7。
特别要说明的是,当使用“变化检测器”时,在不同的应用场合,要求电路响应外部接点状态变化引发的中断的情形也会差异。这些可能的情形包括:接点ON(合)时请求中断;接点OFF(分)时请求中断;接点ON/OFF(合/分)时请求中断;为此,“变化检测器”设置了跳线JP+和JP-。按照图3的设置,就可以使电路满足不同应用场合下,状态量检测的中断要求。
4 结论
本文给出的“变化检测器”都是由常用的、廉价的基本电路组成。电路逻辑清晰,实现容易,且设计思路独特新颖,具有极高的技术参考和推广应用价值。虽然电路设计仅能处理16路外部接点状态量,但依据此电路的设计思想,进行少许更改,就能具备对32路、64路外部状态量的处理能力。“变化检测器”在集散控制系统采集终端研制中,取得了良好的应用效果。
【参考文献】
[1]姚琳,等,编.微机原理与接口技术[M].清华大学出版社,2010.
[2]周春来.广播电视自动监控技术[M].中国广播电视出版社,2009.
[3]阎石主,编.数字电子技术基础[M].高等教育出版社,2006.
[4]何小艇.电子系统设计[M].浙江大学出版社,2001.
[5]谢自美,主编.电子电路设计、实验、测试[M].华中科技大学出版社,2000.
[责任编辑:杨玉洁]