大家知道,梯形图中横向一行的元件是逻辑与的关系,纵向垂直线段表示线段相连的逻揖量是逻辑或的关系。为改进现行的以一位逻辑运算为基础的可编程控制器梯形图实现方法所产生的逻辑量处理速度相对较慢的不足,充分利用微控制器或微处理器半字、字长的逻辑运算能力,分块实施梯形图功能,在机内同时实行多位逻辑运算;梯形图中垂直线段所表达的或运算需要执行较多的程序指令,为加快这种运算,采取相应的硬件加速电路,而这个硬件加速电路并不复杂。
采用梯形图逻辑量并行处理方法大大加快了逻辑量运算,但梯形图功能实现速度的进一步提高受到逻辑量传递速度的制约,所以必须加快逻辑量传递。现在我想到两个办法:一:在微控制器或微处理器内增加支持位变量在位寻址区与至少一个寄存器的任意位之间双向直接传送的电路;二:实现逻辑量并行传递(如在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字长按位逻辑与运算。如此进行,完成一个块的输出列之前逻辑运算。实现和改进逻辑量传递方式将使梯形图逻辑量并行处理方法突显更好的速度优势。
为了加快梯形图逻辑量并行处理速度,对上述位寻址特区希望源寄存器具有独立寻址位变量多通道读入的功能,目的寄存器具有独立寻址位变量多通道写出的功能。
需要注意的是:以Mn为例,辅助继电器Mn与输入元件Xn、输出元件Yn不一样,一有它的结果需要随时刷新。对梯形图中一个块内同时含有作为运算元件的Mn(为下面叙述方便把它记为Mnc)和作为输出元件的Mn(把它记为Mno)的解析稍为复杂,原则是,当Mnc在Mno之上及同行,运算方法与正常一样,不同的是一得Mno的结果,立即刷新位寻址特区中的Mn;当Mnc在Mno之下,若Mnc值参与确定Mno值的运算,则运算方法与正常一样,并一得Mno的结果,立即刷新位寻址特区中的Mn。只有在一个块内Mnc在Mno之下,且Mnc值不参与确定Mno值的运算时,就是说同一块内在Mno之下的Mnc正等着Mno的最近结果,才需要对正常的逻辑量并行处理方法进行调整。