首页 上一页 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字长按位逻辑与运算。如此进行,完成一个块的输出列之前逻辑运算。实现和改进逻辑量传递方式将使梯形图逻辑量并行处理方法突显更好的速度优势。

 




miy_gongkong

  • 精华:0帖
  • 求助:2帖
  • 帖子:23帖 | 3065回
  • 年度积分:0
  • 历史总积分:12421
  • 注册:2008年9月18日
发表于:2011-05-26 11:13:54
1楼

我看了半天 ,你说的这个方案 好像 没有 太大的充要性!

而且可能对 逻辑电路(程序)设计 带来 一些麻烦 ,这个速度经过你说说的改良后,估计 块不到那去!

 请问你是做仕么的?

 

zjnber

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 15回
  • 年度积分:0
  • 历史总积分:85
  • 注册:2011年5月26日
发表于:2011-05-27 08:41:45
2楼

        梯形图照旧,涉及的仅是对梯形图处理的方法。传统的梯形图处理方法以一位逻辑运算为基础,梯形图逻辑量并行处理方法以多位(字长)逻辑运算为基础。如果能实现逻辑量并行传递,后者的速度会有数倍的提高。

        这种梯形图逻辑量并行处理及传递方法意在大幅提高PLC梯形图执行速度,除了软件以外,当然增加一些硬件开支,问题在于收益与代价之比有多大。DSP芯片就是用硬件换取速度的例子,32位机相比8位机也是用硬件换取速度的例子。

第五纪冰川

  • 精华:3帖
  • 求助:5帖
  • 帖子:37帖 | 4224回
  • 年度积分:3
  • 历史总积分:12263
  • 注册:2005年2月18日
发表于:2011-05-27 11:29:00
3楼

这种处理方法肯定会给编程带来困惑,PLC最重要的就是串行执行,这让逻辑关系容易理解!

你这样在某部分实现并行处理,在某部分实现串行处理,编程时不困惑才怪!

我也估计快不到哪去!

zjnber

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 15回
  • 年度积分:0
  • 历史总积分:85
  • 注册:2011年5月26日
发表于:2011-05-27 12:07:59
4楼
梯形图编法照旧,与编程者无关,只涉及编译,即对梯形图的后台处理方法。梯形图的最后一列可能含有数据处理,除这一列都是逻辑量。计时、计数另外考虑。

第五纪冰川

  • 精华:3帖
  • 求助:5帖
  • 帖子:37帖 | 4224回
  • 年度积分:3
  • 历史总积分:12263
  • 注册:2005年2月18日
发表于:2011-05-27 14:18:15
5楼

那还真是难搞!

纯开关量还有些优势,必定字处理只比位处理满一半,以16位来看,综合起来就快8倍。但只能选取不相关的开关量来组合成并行运算,可是实际编程中,各开关量之间相关性很强,这样一来,按现有思维写出来的程序又有多大一部分能转化为并行处理呢!

还不如把这个思想就运用到现在的编程中,也许效果还来得好些!

 

zjnber

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

to:5楼

谢谢你的回贴!其实,梯形图逻辑量并行处理原理与各开关量之间相关性无关。

第五纪冰川

  • 精华:3帖
  • 求助:5帖
  • 帖子:37帖 | 4224回
  • 年度积分:3
  • 历史总积分:12263
  • 注册:2005年2月18日
发表于:2011-05-28 13:07:24
7楼

看来是我没看懂!

如果有这样的梯形图,第二行中的运算量需要使用第一行中的运算结果,此时并行运算如何进行?

miy_gongkong

  • 精华:0帖
  • 求助:2帖
  • 帖子:23帖 | 3065回
  • 年度积分:0
  • 历史总积分:12421
  • 注册:2008年9月18日
发表于:2011-05-28 19:10:25
8楼
引用zjnber 的回复内容:

to:5楼

谢谢你的回贴!其实,梯形图逻辑量并行处理原理与各开关量之间相关性无关。



楼主说的可能是后台 编译算法 ,但是这个实现起来可能 会很复杂,而且 稳定性,逻辑的 严谨性 未必能保证;

而且把分散的BOOL 量整合成一个字节,或字 也是占用了资源 和 时间;

再有 可能某些BOOL量 逻辑简单 但数量量大的场合是 可以优化 这样处理的!



建议删除该帖

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 580回
  • 年度积分:0
  • 历史总积分:2884
  • 注册:2010年9月08日
发表于:2011-05-28 20:17:06
9楼
开关量占用的时间应该很少,主要占时间的是那些数学运算

zjnber

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

       梯形图逻辑量并行处理方法只是用于加快逻辑量的处理速度,它的“稳定性,逻辑的 严谨性”是有保证的,也必须有保证的。“开关量占用的时间应该很少”,但事实上,一位逻辑运算为基础的传统的梯形图处理方法中一个开关量占用的时间与多数的看上去很复杂的数学运算占用差不多的时间,也就是说实际的大多数情况是简单开关量运算却占用了PLC大部分时间。加快逻辑量的处理速度就能有效加快梯形图实现速度。特别是在纯逻辑量应用场合,加速的效果更加显著。

第五纪冰川

  • 精华:3帖
  • 求助:5帖
  • 帖子:37帖 | 4224回
  • 年度积分:3
  • 历史总积分:12263
  • 注册:2005年2月18日
发表于:2011-05-30 16:52:34
11楼
如果有这样的梯形图,第二行中的运算量需要使用第一行中的运算结果,此时并行运算如何进行?

zjnber

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 15回
  • 年度积分:0
  • 历史总积分:85
  • 注册:2011年5月26日
发表于:2011-05-30 17:33:45
12楼
引用第五纪冰川 的回复内容:如果有这样的梯形图,第二行中的运算量需要使用第一行中的运算结果,此时并行运算如何进行?

        与传统的梯形图一样,无变化。后面的行运算需要前面行结果,对这种情况的处理及对其他已经考虑过了,写起来比较长,我在下面贴子里把它表达出来,看起来需要点耐心。原则就是尽量最大限度地实行逻辑量并行处理。

第五纪冰川

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

期待!

                                                                

miy_gongkong

  • 精华:0帖
  • 求助:2帖
  • 帖子:23帖 | 3065回
  • 年度积分:0
  • 历史总积分:12421
  • 注册:2008年9月18日
发表于:2011-05-30 23:13:21
14楼

期待楼主能写个这样的 梯形图编译器?   你写过编译器么?

 

zjnber

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 15回
  • 年度积分:0
  • 历史总积分:85
  • 注册:2011年5月26日
发表于:2011-05-31 20:36:50
15楼
        我没写过编译器,在九十年代初时学过编泽原理。梯形图逻辑量并行处理方法的原则比传统的以一位逻辑运算为基础梯形图处理方法简单,即使我编译原理学得不好,但用逻辑量并行处理方法来编译梯形图还是能完成的。前面说过梯形图逻辑量并行处理方法需要有新的硬件支持,硬件和软件共同实现逻辑量并行处理方法,所以只有编译是不能运行的。

zjnber

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

        为方便分析,把梯形图的水平方向的一条称为行,自上而下为序;把梯形图的垂直方向的一条称列,自左至右为序。梯形图中逻辑量的传递从左向右,不能逆向进行。梯形图中一行的元件是逻辑与的关系;垂直线段表示线段相连的逻揖量是逻辑或的关系,可以这么看,在紧靠垂直线段左边,只要有一处梯形图的逻辑量为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)

            

zjnber

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 15回
  • 年度积分:0
  • 历史总积分:85
  • 注册:2011年5月26日
发表于:2011-05-31 21:06:50
17楼

        梯形图每一块的高度应小于或等于梯形图垂直线段或运算加速电路的位数,梯形图垂直线段或运算加速电路的位数就是允许的块高度的最大值。为了加快块内变量的传送和运算,块高度的最大值最好按照微控制器或微处理器的半字或字长选择,究竟多长为好,需要对速度的提高程度和硬件的代价作共同考虑后才能作出。
       可以让可编程控制器梯形图编制者知道块的概念,对一定长度的加速电路,如果实际编制梯形图时块高度大于最大值,就给以信息提示,让梯形图编制者作一定的技术处理,如引入辅助继电器Mn,把块的高度控制在最大值之内。或者块的概念及块的最大值只是一种后台处理技术,梯形图编制者无需知道,以减少对梯形图编制者的约束。
       对块的高度限制是一个方面,另一方面为了利用并行运算的优点,尽量把数个小块看成一个大块,但必须把大块的高度限制在最大值之内。这种把小块拼凑成大块的技术处理也可作为一种后台处理技术由梯形图解析程序来完成。

        对一定的梯形图,垂线分布是不变的。块内是否有垂线,是否要送梯形图垂直线段或运算加速电路,块内同一列最长垂线的长度多少,寄存器的填入需要多长时间,(硬件的)或运算和(软件的)与运算之间是否需要等待和等待多长时间(通常不需要等待),块内运算到哪一列结束等等,梯形图的解析程序在可编程控制器正式运行前就可认定,并体现在解析所得的循环扫描指令串中。

zjnber

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 15回
  • 年度积分:0
  • 历史总积分:85
  • 注册:2011年5月26日
发表于:2011-05-31 21:12:02
18楼

16楼遗漏一个公式,补上

         COUT=I4&L4+I3&L3&L4+I2&L2&L3&L4+ I1&L1&L2&L3&L4+ CIN&L1&L2&L3&L4         (7)

zjnber

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 15回
  • 年度积分:0
  • 历史总积分:85
  • 注册:2011年5月26日
发表于:2011-05-31 21:21:35
19楼
先给一个总体的思路。对后面行的运算需要前面行的结果的情况,在以后的帖子里介绍。

miy_gongkong

  • 精华:0帖
  • 求助:2帖
  • 帖子:23帖 | 3065回
  • 年度积分:0
  • 历史总积分:12421
  • 注册:2008年9月18日
发表于:2011-05-31 22:11:30
20楼

你是以数字电路硬件的角度 想的?

不知道你是做仕么工作的?

 


热门招聘
相关主题

官方公众号

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