首页 上一页 1 2 下一页 尾页

为加快PLC逻辑量处理速度,实行梯形图逻辑量并行处理方法,可行吗? 点击:1503 | 回复:28



zjnber

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 15回
  • 年度积分:0
  • 历史总积分:85
  • 注册:2011年5月26日
发表于:2011-05-26 10:03:35
楼主

        大家知道,梯形图中横向一行的元件是逻辑与的关系,纵向垂直线段表示线段相连的逻揖量是逻辑或的关系。为改进现行的以一位逻辑运算为基础的可编程控制器梯形图实现方法所产生的逻辑量处理速度相对较慢的不足,充分利用微控制器或微处理器半字、字长的逻辑运算能力,分块实施梯形图功能,在机内同时实行多位逻辑运算;梯形图中垂直线段所表达的或运算需要执行较多的程序指令,为加快这种运算,采取相应的硬件加速电路,而这个硬件加速电路并不复杂。
       采用梯形图逻辑量并行处理方法大大加快了逻辑量运算,但梯形图功能实现速度的进一步提高受到逻辑量传递速度的制约,所以必须加快逻辑量传递。现在我想到两个办法:一:在微控制器或微处理器内增加支持位变量在位寻址区与至少一个寄存器的任意位之间双向直接传送的电路;二:实现逻辑量并行传递(如在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字长按位逻辑与运算。如此进行,完成一个块的输出列之前逻辑运算。实现和改进逻辑量传递方式将使梯形图逻辑量并行处理方法突显更好的速度优势。

 




第五纪冰川

  • 精华:3帖
  • 求助:5帖
  • 帖子:37帖 | 4224回
  • 年度积分:3
  • 历史总积分:12263
  • 注册:2005年2月18日
发表于:2011-06-01 22:41:52
21楼

顶起,表示在关注!                                   

zjnber

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 15回
  • 年度积分:0
  • 历史总积分:85
  • 注册:2011年5月26日
发表于:2011-06-09 14:59:48
22楼
我以上说过,采用梯形图逻辑量并行处理方法加快了逻辑量运算,梯形图功能实现速度的进一步提高受到逻辑量传递速度的制约,所以必须加快逻辑量传递。是否采用这样的办法,假如有32个输入、32个输出。在位寻址区建立可多通道读入的256个位的位寻址特区,分配给扫描前一次性读入的32个输入、上一次扫描后一次性写出的32个输出、及若干C、T、M、S等开关量,再在位寻址区建可多通道写出的小于256的若干位的位寻址特区,分配给准备在扫描后一次性写出的32个输出、及若干M、S等开关量。M、S等开关量是在梯形图扫描实施过程中既需要随时输出又需要随时输入的逻辑量,这几个开关量的多通道传递是双向的,也就是可多通道读入的256个位与可多通道写出的小于256的若干位有部分是重叠的,或者说这两个特区是相交的。256位需8位寻址,32位寄存器需5位寻址,如果采用64位指令,一条指令就可包含4个这样的独立寻址,剩余的(64-52=)12位中2位来表达当时独立寻址的有效通道数,还有10位可作指令的识别码,这样就可实现4个逻辑量并行传递(也就是64位指令中包含四个逻辑量并行传递信息)。256个寻址位虽然不包括PLC全部逻辑量,但也可包括中小PLC的主要逻辑量(逻辑量的编号是可映射的),这将大大加快逻辑量传递(近4倍)。

zjnber

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 15回
  • 年度积分:0
  • 历史总积分:85
  • 注册:2011年5月26日
发表于:2011-06-09 15:01:39
23楼

为了加快梯形图逻辑量并行处理速度,对上述位寻址特区希望源寄存器具有独立寻址位变量多通道读入的功能,目的寄存器具有独立寻址位变量多通道写出的功能。

需要注意的是:以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的最近结果,才需要对正常的逻辑量并行处理方法进行调整。

zjnber

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 15回
  • 年度积分:0
  • 历史总积分:85
  • 注册:2011年5月26日
发表于:2011-06-09 15:02:36
24楼
调整的方法是:则应把Mnc所在列之前一列的运算结果保存,把这块Mnc所在列及其以后列在Mnc所在行与Mno所在行之间按无垂线行作分界线看成两个小块,设置上一小块的下行号,把下一小块的上、下行号也保存。上一小块继续参与运算,算出Mno,立即刷新位寻址特区中的Mn,取出以前保存的逻辑值和下一小块上、下行号,继续作下一小块运算、输出。在这过程中又遇小块内同有新的运算元件M与输出元件M,方法同上。
同一块内Mnc所在列及其以后列在Mnc所在行与Mno所在行之间存在无垂线行也是判别“在一个块内Mnc在Mno之下,且Mnc值不参与确定Mno值的运算”的标准。
在一个块内Mnc在Mno之下,且Mnc值不参与确定Mno值的运算使逻辑量并行处理方法速度下降,好在只是在同一块内又出现这样的情况机率不大,不会在总体上影响逻辑量并行处理方法的快速优点。

zhouhuxi

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 7回
  • 年度积分:0
  • 历史总积分:53
  • 注册:2010年6月20日
发表于:2011-06-10 13:20:02
25楼

有点罗嗦,得不偿失。其实现有的PLC中有字和字节指令,只要用户把握的好,可以把许多位运算并到字或字节运算中去

zjnber

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 15回
  • 年度积分:0
  • 历史总积分:85
  • 注册:2011年5月26日
发表于:2011-06-10 14:28:00
26楼
有点罗嗦,那是编译人员的事,与传统方法比还简单了点。PLC按编译好了的指令串执行。你的“把许多位运算并到字或字节运算”对梯形图中的垂线处理会花费许多指令,这种方法没有好的普遍性。

zjnber

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 15回
  • 年度积分:0
  • 历史总积分:85
  • 注册:2011年5月26日
发表于:2011-06-10 14:30:13
27楼
你的方法对特殊图形可用,能加快速度,但无普遍性。

岳轻航

  • 精华:0帖
  • 求助:3帖
  • 帖子:20帖 | 1090回
  • 年度积分:5
  • 历史总积分:3153
  • 注册:2010年8月04日
发表于:2012-09-21 10:34:06
28楼
有点罗嗦,不过这个办法倒是一个不错的点子

热门招聘
相关主题

官方公众号

智造工程师
    首页 上一页 1 2 下一页 尾页