大家知道,梯形图中横向一行的元件是逻辑与的关系,纵向垂直线段表示线段相连的逻揖量是逻辑或的关系。为改进现行的以一位逻辑运算为基础的可编程控制器梯形图实现方法所产生的逻辑量处理速度相对较慢的不足,充分利用微控制器或微处理器半字、字长的逻辑运算能力,分块实施梯形图功能,在机内同时实行多位逻辑运算;梯形图中垂直线段所表达的或运算需要执行较多的程序指令,为加快这种运算,采取相应的硬件加速电路,而这个硬件加速电路并不复杂。
采用梯形图逻辑量并行处理方法大大加快了逻辑量运算,但梯形图功能实现速度的进一步提高受到逻辑量传递速度的制约,所以必须加快逻辑量传递。现在我想到两个办法:一:在微控制器或微处理器内增加支持位变量在位寻址区与至少一个寄存器的任意位之间双向直接传送的电路;二:实现逻辑量并行传递(如在ARM32位指令中包含两个或两个以上逻辑量传递信息)。实现和改进逻辑量并行传递需要对CPU内部结构有深入了解,此非本人所长。请大家谈谈看法。
多逻辑变量并行处理法的循环扫描方法(以ARM CM3为例)具体是:先把梯形图分成若干块,这里取块的最大高度为32。读入所有的输入端X变量暂存在位寻址区(Y’(上一次扫描的输出)、M(辅助继电器)、C(计数器)、T(定时器)等逻辑变量值都已存放或设置在位寻址区),按梯形图第一块第一列各行涉及的逻辑元件填写寄存器Rd,也就是把该列第一行元件存放在位寻址区的状态填入寄存器Rd的第0位,该列第二行元件存放在位寻址区的状态填入寄存器Rd的第1位,如此把第一块第一列所有逻辑元件逐个填入寄存器Rd。但是如现在的ARM CM3不支持直接把位变量从位寻址区填入到寄存器Rd的任意位中,实现这样的操作就会花费较多的指令。如果梯形图第一块第一列后面有垂直线段,就把垂线信号以字的形式填写寄存器Rn1,执行寄存器Rd、寄存器Rn1垂直线段或运算(需要特别的垂直线段或运算加速电路,否则需要执行较多的程序指令)。如果梯形图第一块第一列后面无垂线,就把梯形图第一块第二列元件变量逐个填入寄存器Rn2(在这之前如果第一块第二列中含有水平连线,就应先在寄存器Rn2对应水平连线的位置填上1,无水平连线的地方为0,以字的形式填写),执行寄存器Rd、寄存器Rn2字长按位逻辑与运算。如此进行,完成一个块的输出列之前逻辑运算。实现和改进逻辑量传递方式将使梯形图逻辑量并行处理方法突显更好的速度优势。
为方便分析,把梯形图的水平方向的一条称为行,自上而下为序;把梯形图的垂直方向的一条称列,自左至右为序。梯形图中逻辑量的传递从左向右,不能逆向进行。梯形图中一行的元件是逻辑与的关系;垂直线段表示线段相连的逻揖量是逻辑或的关系,可以这么看,在紧靠垂直线段左边,只要有一处梯形图的逻辑量为1,那么垂直线段所到之处的右边逻辑量都为1,下面把这种现象形象地称为逻辑量1沿垂直线段向上、下两边传递。把梯形图分成若干个块,每个块由若干行组成,划分原则是上下相邻两行之间有垂直连线连通的这两行属同一个块,也就是组成一个块的若干行其相邻两行之间必有垂直连线连通。上下相邻两行之间无垂直连线连通的这两行分属不同的块,这相邻两行就是相邻两块的边界。对块也自上而下编号。
可编程控制器的多位逻辑运算是把一个块中的一个列放入寄存器进行并行按位逻辑运算,梯形图水平方向的逻辑与较方便,但垂直线段所表达的或运算特别是块内同一列有多条垂直线段用程序软件处理需要占用较多的指令,花费较长时间,采用梯形图垂直线段或运算加速电路可以加快这种运算。
第一种梯形图垂直线段或运算加速电路是根据如果本位和邻位都有垂线信号,本位输出的1就会传递给邻位,反过来也一样的原理而设计的。设I为垂线左边的逻辑信号,L为垂线信号(有垂线为1,无垂线为0),O为或运算加速电路输出信号,n为信号在或运算加速电路中的位置。那么相邻两行的关系可用逻辑公式表示为:
On=In+On-1&Ln-1&Ln+On+1&Ln+1&Ln (1)
On+1= In+1+On&Ln&Ln+1+On+2&Ln+2&Ln+1 (2)
但是上述公式含有隐患,如果相邻两位之间允许有向上、向下两边传递进来的两个输入信号,又有向上、向下两边传递出去的两个输出信号,这样的结构会造成错误的自锁现象。这是因为:如果相邻两位都有垂线信号,Ln=1,Ln+1=1,如果In硬件输入端出现毛刺、尖脉冲等偶然因素,那么除了本位On=1,还因On&Ln&Ln+1=1,邻位接受了传递过来的这个1,在自身位On+1=1的同时又向刚传过来1的相邻位反传回来1;同样原因,又使On=1,再传递过去。这时相邻两位梯形图垂线左边信号硬件输入端可能都已为0,但输出已锁定在1了,这当然是错误的自锁现象。所以电路块之间逻辑1的传递只能是单向的,总电路应采用两路单向传递,再相或的结构,使电路既不自锁,又实现式(1)、式(2)的效果。
第二种梯形图垂直线段或运算加速电路是用并行、快传递的方法来提高电路的运算速度的,这相当于快进位并行加法器的设计方法。为了防止电路规模过大,根据逻辑1相邻传递的特点把整个电路分成若干个块(如把32位的垂直线段或运算加速电路分为8块),块内按并行、快传递设计;块间逻辑1的传递是串联的。电路块内部电路的逻辑公式为:
O1=I1+CIN&L1 (3)
O2=I2+ I1&L1&L2+CIN&L1&L2 (4)
O3=I3+ I2&L2&L3+ I1&L1&L2&L3+CIN&L1&L2&L3 (5)
O4=I4+I3&L3&L4+ I2&L2&L3&L4+ I1&L1&L2&L3&L4+ CIN&L1&L2&L3&L4 (6)
梯形图每一块的高度应小于或等于梯形图垂直线段或运算加速电路的位数,梯形图垂直线段或运算加速电路的位数就是允许的块高度的最大值。为了加快块内变量的传送和运算,块高度的最大值最好按照微控制器或微处理器的半字或字长选择,究竟多长为好,需要对速度的提高程度和硬件的代价作共同考虑后才能作出。
可以让可编程控制器梯形图编制者知道块的概念,对一定长度的加速电路,如果实际编制梯形图时块高度大于最大值,就给以信息提示,让梯形图编制者作一定的技术处理,如引入辅助继电器Mn,把块的高度控制在最大值之内。或者块的概念及块的最大值只是一种后台处理技术,梯形图编制者无需知道,以减少对梯形图编制者的约束。
对块的高度限制是一个方面,另一方面为了利用并行运算的优点,尽量把数个小块看成一个大块,但必须把大块的高度限制在最大值之内。这种把小块拼凑成大块的技术处理也可作为一种后台处理技术由梯形图解析程序来完成。
对一定的梯形图,垂线分布是不变的。块内是否有垂线,是否要送梯形图垂直线段或运算加速电路,块内同一列最长垂线的长度多少,寄存器的填入需要多长时间,(硬件的)或运算和(软件的)与运算之间是否需要等待和等待多长时间(通常不需要等待),块内运算到哪一列结束等等,梯形图的解析程序在可编程控制器正式运行前就可认定,并体现在解析所得的循环扫描指令串中。