zjnber 发表于 2011-5-25 14:59:40

为加快PLC逻辑量处理速度,实行梯形图逻辑量并行处理方法,可行吗?

大家知道,梯形图中一行的元件是逻辑与的关系,垂直线段表示线段相连的逻揖量是逻辑或的关系。为改进现行的以一位逻辑运算为基础的可编程控制器梯形图实现方法所产生的逻辑量处理速度相对较慢的不足,充分利用微控制器或微处理器半字、字长的逻辑运算能力,分块实施梯形图功能,在机内实行同时多位逻辑运算;梯形图中垂直线段所表达的或运算需要执行较多的程序指令,为加快这种运算,采取相应的硬件加速电路,而这个硬件加速电路并不复杂。

zjnber 发表于 2011-5-25 15:16:45

采用梯形图逻辑量并行处理方法加快了逻辑量运算,梯形图功能实现速度的进一步提高受到逻辑量传递速度的制约,所以必须
加快逻辑量传递。我想到两个办法:一:在微控制器或微处理器内增加支持位变量在位寻址区与至少一个寄存器的任意位之间双向直接传送的电路;二:实现逻辑量并行传递(如在ARM32位指令中包含两个或两个以上逻辑量传递信息)。实现和改进逻辑量并行传递需要对CPU内部结构有深入了解,此非本人所长。本技术论坛高手云集,请谈谈看法。

zjnber 发表于 2011-5-25 20:45:34

请问:这是一个有关PLC的技术贴,已过6个小时了,还未审核通过,不知原因。

zjnber 发表于 2011-5-25 21:23:00

请放行。

zjnber 发表于 2011-5-31 08:42:28

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

not_at_all 发表于 2011-5-31 10:36:52

不可能的。你还没完全了解PLC内部系统工作过程,而且PLC本身是用来做逻辑运算的,数学_运算只是辅助功能。   对运算速度要求高的需要专门的功能模块

zjnber 发表于 2011-6-1 10:25:38

为方便分析,把梯形图的水平方向的一条称为行,自上而下为序;把梯形图的垂直方向的一条称列,自左至右为序。梯形图中逻辑量的传递从左向右,不能逆向进行。梯形图中一行的元件是逻辑与的关系;垂直线段表示线段相连的逻揖量是逻辑或的关系,可以这么看,在紧靠垂直线段左边,只要有一处梯形图的逻辑量为1,那么垂直线段所到之处的右边逻辑量都为1,下面把这种现象形象地称为逻辑量1沿垂直线段向上、下两边传递。把梯形图分成若干个块,每个块由若干行组成,划分原则是上下相邻两行之间有垂直连线连通的这两行属同一个块,也就是组成一个块的若干行其相邻两行之间必有垂直连线连通。上下相邻两行之间无垂直连线连通的这两行分属不同的块,这相邻两行就是相邻两块的边界。对块也自上而下编号。
   可编程控制器的多位逻辑运算是把一个块中的一个列放入寄存器进行并行按位逻辑运算,梯形图水平方向的逻辑与较方便,但垂直线段所表达的或运算特别是块内同一列有多条垂直线段用程序软件处理需要占用较多的指令,花费较长时间,采用梯形图垂直线段或运算加速电路可以加快这种运算。
   多逻辑变量并行处理法的循环扫描方法(以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字长按位逻辑与运算。如此进行,完成一个块的输出列之前逻辑运算。实现和改进逻辑量传递方式将使梯形图逻辑量并行处理方法突显更好的速度优势。

zjnber 发表于 2011-6-1 10:31:36

第一种梯形图垂直线段或运算加速电路是根据如果本位和邻位都有垂线信号,本位输出的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)的效果。

heky 发表于 2011-6-1 10:32:28

说到底,你到底是懂PLC还是不懂PLC。梯形图就是顺序执行,你要是做并行的,怎么运算?你这PLC看来是给开发人员用的,注定到不了现场。多到现场看看,看看用PLC的是怎样的一群人。天天在灰尘,油污里打转。现在的事实是,大家都不嫌PLC执行的慢。可靠,好用是前提。

heky 发表于 2011-6-1 10:33:32

多到现场看看,会发现,1ms执行周期,10ms执行周期,都可以满足70-80%的现场。联合实际,才能让你的产品走的更远。

heky 发表于 2011-6-1 10:35:49

如果有特殊需求,像运动控制型PLC,都有2套并行执行流程,1ms周期,20ms周期。

zjnber 发表于 2011-6-1 10:36:31

第二种梯形图垂直线段或运算加速电路是用并行、快传递的方法来提高电路的运算速度的,这相当于快进位并行加法器的设计方法。为了防止电路规模过大,根据逻辑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)
    COUT=I4&L4+I3&L3&L4+I2&L2&L3&L4+ I1&L1&L2&L3&L4+ CIN&L1&L2&L3&L4                  (7)

zjnber 发表于 2011-6-1 10:38:26

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

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

zjnber 发表于 2011-6-1 10:47:19

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

not_at_all 发表于 2011-6-1 11:07:40

并行操作要考虑优先级。举个例子,梯形图是自上而下扫描,假如你分开2部分,同时操作,那么那两部分恰好有互锁关系的,你给他优先操作了,就会造成逻辑混乱。并行操作比没有你想象的那么简单,会引起很多问题,不可预测的优先关系给编程人员带来很多麻烦,就像数字电路的“竞争冒险”,就够人头痛的。
假如还兼顾这些,梯形图直观的优点不复存在,还不如采用单片机编程方式。

有个叫工业习惯,并不说明他最好,而是方便大多数人操作。数控机床就抛弃了plc,用微型工控机。

个个都知道plc成本高,但plc是为特定用途设计的,plc设计是有个设计原则,不能随便改,除非是定制产品,你不能要求他十全十美,不同场合应该采用不同方案。

所以我觉得这个问题没必要纠缠下去了。除非你有能力改变这个工业习惯。

heky 发表于 2011-6-1 11:10:57

lz你要是正经用过PLC,再来谈理论,我佩服你。毕竟是从业者,谈些高科技,那是天天向上。
如果不是的话,那就纯粹是研发人员的想象。“可靠性是PLC追求的重要的目标之一,速度是PLC追求的另一个目标。”这个话没错,但不是每一个档次的PLC都需要追求这个。我做惯了小型机,我觉得可靠易用已经不容易了,速度不敢苟同。有一些朋友动不动就说编译型,8K步 1ms之类的话,实际试试再说。现场跑上2年不出问题,基本就过关。

Hello_World 发表于 2011-6-1 11:12:36

回复【8楼】heky
说到底,你到底是懂plc还是不懂plc。梯形图就是顺序执行,你要是做并行的,怎么运算?你这plc看来是给开发人员用的,注定到不了现场。多到现场看看,看看用plc的是怎样的一群人。天天在灰尘,油污里打转。现在的事实是,大家都不嫌plc执行的慢。可靠,好用是前提。

-----------------------------------------------------------------------

楼主是在纯粹的技术讨论问题,而8楼的兄弟是站在市场的角度,所以见解上的分歧是必然的。

我觉得,牛顿在钻研万有引力的时候也并没有考虑到“市场”吧,只是纯粹的钻研,而楼主就是类似的人。

虽然,当今的PLC速度能满足绝大部分需求,但没有人会嫌弃PLC速度更快。

高速,是PLC的发展趋势之一

技术的钻研是永无止尽的

假如,在当年的继电器时代,全世界人都满足于继电器控制,不去钻研的话,说不定今天还是继电器时代

当然,市场是要考虑,楼主的定位应该是走高端路线


技术讨论,不分谁对谁错,大家都说出自己的看法,就可以了。
存在见解的分歧也未尝不是一件好事,这样我们会站在多个角度看问题,共同进步。

maxoser 发表于 2011-6-1 11:21:59

楼主的想法完全可行,而且我们公司使用这个理论开发出来的基于FPGA的硬解题PLC已经将近10年了,逻辑运算直接由硬件完成,但楼主要再这个思路上开发PLC可能需要10年的时间,涉及的方方面面太多,需要一个非常强势的带头人和几十人的团队才有可能一个全新体系结构的PLC设计,即使设计出来也不一定能推广出去,因为没有人会花时间学习你设计的独树一帜的PLC,这些都是我公司的实际情况。

zjnber 发表于 2011-6-1 12:10:58

梯形图编法照旧,编程者的“工业习惯”不需改变,只涉及编译,即对梯形图的后台处理方法。

maxoser 发表于 2011-6-1 12:49:03

想法很好,完全能实现,但困难不少,持之以恒的投入时间和精力将会有所收获。

yyccaa 发表于 2011-6-1 13:12:09

要搞并行的前提是,你最后的结果仍要和顺序的一样。像一些处理器有指令重排序功能,但这个功能也只是对部分不依赖顺序的简单指令序列进行重排而已。
写PLC的,有不少是完全没有并行概念的人,你不能指望他们去准确使用各种临界段处理方法的。

zjnber 发表于 2011-6-3 09:58:37

上述公式中变量下标的大小、位置不对是上传编辑不支持引起的。

maxoser 发表于 2011-6-4 14:27:17

你那个算法是可行的,但不能实现“只涉及编译,即对梯形图的后台处理方法”,也许你没有深入思考列扫描和行扫描之间的差异,编译出适合列扫描的指令代码必定不适合行扫描梯形图的“工业习惯”,还有你说的并行加快速度纯属误导读者,因为列扫描方式和行扫描方式一样,该计算的一个都不少,反而不该计算的却也计算了,有些列的某些行状态不需要计算的。。。

zjnber 发表于 2011-6-6 14:40:23

回复【22楼】maxoser
-----------------------------------------------------------------------

请你再从头看我以前帖子,理解我所述的梯形图逻辑量并行处理方法的全部内容,再仔细想想.

zjnber 发表于 2011-6-6 14:51:50

回复【15楼】heky
-----------------------------------------------------------------------

我开始用PLC是在1999年为一机械类企业的产品-自动化加工设备配置PLC,也用了约20年单片机,深知PLC可靠性的重要.梯形图逻辑量并行处理方法与可靠性不矛盾.

maxoser 发表于 2011-6-6 16:38:28

如果我没有说错,你的梯形图逻辑量并行处理方法就是一个逻辑的矩阵运算,要使用FPGA设计一个矩阵运算器才能加快速度,如果仅是使用通用单片机进行软解题,这个方法是变慢而不是变快。

zjnber 发表于 2011-6-8 17:40:46

我以上说过,采用梯形图逻辑量并行处理方法加快了逻辑量运算,梯形图功能实现速度的进一步提高受到逻辑量传递速度的制约,所以必须加快逻辑量传递。是否采用这样的办法,假如有32个输入、32个输出。把扫描前一次性读入的32个输入、准备在扫描后一次性写出的32个输出、及若干C、T、M开关量存放在256位的位寻址区中。使这256个位寻址区与至少一个寄存器的任意位之间有多条通道可双向直接传送的线路,256位需8位寻址,32位寄存器需5位寻址,如果采用64位指令,一条指令就可包含4个这样的独立寻址,剩余的(64-52=)12位中2位来表达当时独立寻址的有效通道数,还有10位可作指令的识别码,这样就可实现4个逻辑量并行传递(也就是64位指令中包含四个逻辑量并行传递信息)。256个寻址位虽然不包括PLC全部逻辑量,但也可包括中小PLC的主要逻辑量(逻辑量的编号是可映射的),这将大大加快逻辑量传递(近4倍)。
对一个块中含有同一M元件的情况,具体处理以后提出。
欢迎大家讨论。

zjnber 发表于 2011-6-9 09:21:16

26楼部分内容更正:在位寻址区的可多通道读入的256个位分配给扫描前一次性读入的32个输入、上一次扫描后一次性写出的32个输出、及若干C、T、M、S等开关量,在位寻址区的可多通道写出的小于256的若干位分配给准备在扫描后一次性写出的32个输出、及若干M、S等开关量。M、S等开关量是在梯形图扫描实施过程中既需要随时输出又需要随时输入的逻辑量,这几个开关量的多通道传递是双向的,也就是可多通道读入的256个位与可多通道写出的小于256的若干位有部分是重叠的,或者说这两个区域是相交的。

zjnber 发表于 2011-6-9 11:23:46

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

hzr0071 发表于 2011-6-9 11:44:19

如果是门电路内核的plc,并行可以加快速度,不过也影响稳定性。
arm或者其他mcu模拟的plc,并行可以加快速度,但是太多的并行会影响反应速度,稳定性不变。

zjnber 发表于 2011-6-9 14:24:38

需要注意的是:以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 发表于 2011-6-9 14:48:18

调整的方法是:则应把Mnc所在列之前一列的运算结果保存,把这块Mnc所在列及其以后列在Mnc所在行与Mno所在行之间按无垂线行作分界线看成两个小块,设置上一小块的下行号,把下一小块的上、下行号也保存。上一小块继续参与运算,算出Mno,立即刷新位寻址特区中的Mn,取出以前保存的逻辑值和下一小块上、下行号,继续作下一小块运算、输出。在这过程中又遇小块内同有新的运算元件M与输出元件M,方法同上。
同一块内Mnc所在列及其以后列在Mnc所在行与Mno所在行之间存在无垂线行也是判别“在一个块内Mnc在Mno之下,且Mnc值不参与确定Mno值的运算”的标准。
在一个块内Mnc在Mno之下,且Mnc值不参与确定Mno值的运算使逻辑量并行处理方法速度下降,好在只是在同一块内又出现这样的情况机率不大,不会在总体上影响逻辑量并行处理方法的快速优点。

zjnber 发表于 2011-6-13 16:43:11

用逻辑量字运算及垂线运算加速电路的办法加快了梯形图逻辑量运算速度,为字运算准备好参与运算的多位不同的逻辑量的速度也必须提高,因为梯形图逻辑量处理速度是逻辑量运算速度和为准备好参与运算的逻辑量的传递速度的综合效果平均值。希望把逻辑量传递速度提高到传统的一位逻辑量传递速度的8倍左右,这样,梯形图逻辑量并行处理方法的总效果约比传统的以一位逻辑运算为基础的可编程控制器梯形图实现方法的速度快8倍左右。但是怎样把逻辑量传递速度提高到传统的一位逻辑量传递速度的8倍左右,只有对微控制器或微处理器结构非常熟悉的人士才可能提出好的方法。

zjnber 发表于 2011-6-13 21:25:33

按传统梯形图逻辑量处理方法,要对一个逻辑量运算,先要把这个逻辑量取进来,假如传递耗时1ms,逻辑运算,耗时1ms,共耗时2ms。如果逻辑量并行处理方法使得一个逻辑量的等效运算耗时降为八分之一,即0.125ms,若传递耗时降不下来,则总耗时1.125ms,综合速度提高到1.77倍。即使一个逻辑量的等效运算耗时接近零,综合速度也只能提高到2倍。所以必须减少逻辑量传递耗时,提高逻辑量传递速度,才能真正提高梯形图逻辑量处理速度。

bsz84 发表于 2011-6-13 21:30:08

听课

xinghuaidong 发表于 2011-6-13 21:45:34

回复【33楼】zjnber
-----------------------------------------------------------------------

不太现实,逻辑运算过程中的位变量也要参与运算的,进行并行处理无法确保运算过程中并行处理的位变量相互关联(时序),并且
无法处理脉冲时序。

zjnber 发表于 2011-6-14 11:21:20

回复【36楼】xinghuaidong
-----------------------------------------------------------------------
脉冲型位变量也是可解决的。脉冲型位变量也应考虑进来,位变量的范围增加了。办法是:除了把X、Y位变量原型放入位寻址特区,对其他的的位变量包括脉冲型位变量,只把在梯型图中用到的映射到位寻址特区,以减小位寻址特区尺度。
还有,请你把你的意思解释得更详细些,谢谢!我认为位变量的位置、时序不是问题,有些以上已经有解释。

zjnber 发表于 2011-6-14 14:27:41

37楼的脉冲型位变量指的是阶跃型位变量,如上升沿、下降沿。对脉冲执行指令的判别标志位可以象阶跃型位变量处理方法来处理。

zjnber 发表于 2011-6-14 14:37:41

34楼的时间单位ms太大了一点,改为us更近实际。

heky 发表于 2011-6-14 14:47:53

千言万语,不及实际动手试一下。

做一个这样的控制器,实际现场测试一段时间,看看效率和稳定性。又不是写论文

zjnber 发表于 2011-6-14 19:40:44

回复【40楼】heky
-----------------------------------------------------------------------

前面说过梯形图逻辑量并行处理方法需要在微控制器或微处理器内有新的硬件支持,硬件和软件共同实现逻辑量并行处理方法,所以只有编译是不能运行的。
技术论坛就是讨论技术问题,在讨论中辩请是非,这应包括现在无条件实施的技术问题、方法上还不是很成熟的问题。这里的网友对技术问题比较乐意发表自己的看法或提供技术帮助,希望大家回贴。

learner123 发表于 2011-6-14 20:15:05

技术之路还是要现实

plc的并行处理不是不可行,但是在梯形图结构上搞没有意义,原因是一般说梯形图结构主要就是为了照顾懒得写程序的人的。
为了将以前继电器控制系统方便改成计算机结构而已。

而且楼主显然还是对这个行业了解不够,很多概念不清楚

高速并行处理,直接搞fpga或向量处理器,没必要在梯形图上花代价。搞出来了,实用意义也不大,本身就是低速的结构。
要高速,直接用dsp或者高速cpu用c,汇编。再高就用fpga,用verilog,vhdl。

楼主对并行的理解也有问题,很多“高科技”名词还不能深入理解其含义。好好学习计算机体系结构,和组成原理,不要只是看了名词就行了。

此外,在系统化的解释器中,原型一般是体系无关的,就是说实现的时候不能只局限在特定的处理器中,否则体系无法继续。通俗的说就是你用51实现了,用STM32实现了,单是在其他处理器上无法实现或丢失优势,就没有价值了。

zjnber 发表于 2011-6-14 21:16:03

回复【42楼】learner123
-----------------------------------------------------------------------

我的并行是指用字运算来处理梯形图逻辑量的方法,不是严格意义上的如并行计算机中的并行。我的想法是,如只对微控制器或微处理器硬件作有限的改造,很小的代价就能提高梯形图实施速度,那就值得思考。DSP的速度是快了,但硬件代价也很大,价格较高。

kerrwang1982 发表于 2011-6-14 21:23:21

太热烈了,支持啊!
工业习惯是利于大家针对同种东西的来使用。
但技术的前进就是这种的情况下推动的。

learner123 发表于 2011-6-15 18:07:54

这个“有限”的改造的通用性如何?用C的字节或字的位运算来做多个梯形图中变量的“并行”不是改造硬件,不过是编译/解释优化。
同样是代价大,作用小
同理,为什么现在很多单片机程序用c而不流行用汇编也是一个道理。2-8原则!
同时还有很多副作用,具体就不讨论了。楼主有兴趣,到西安,坐下来好好聊聊。

日本人的plc编译或解释器用的方式很简单,如果以后终身从事PLC编译器设计这个工作,并且在大的企业里干才搞这个才有价值。(比如欧姆龙,abb,西门子等)

楼主的基础课差的太多,要好好补补,有条件继续上学。有些东西没有理论还是很困难的。
如果是个毕业设计,基本功能实现就行了,不要花太多时间。

这里不是泼冷水,自己也研究过这个,弯路也走过。
祝你成功

zjnber 发表于 2011-6-16 10:27:21

回复【45楼】learner123
-----------------------------------------------------------------------

谢谢回贴!
从你第一句话“这个“有限”的改造的通用性如何?用C的字节或字的位运算来做多个梯形图中变量的“并行”不是改造硬件,不过是编译/解释优化。”看,你没有全面阅读我的贴子,没有全面理解我的意思,请你从头看起。
我自己知识掌握得不够、不活,工作中总觉得自己的知识不够用,这是事实。就象你所说的楼主的基础课差的太多。但我想我们以讨论问题的实质为主,有些发现、有些改造也不一定需要非常前沿的知识。毕业设计我不需要再做了,那是二十多年前的事,这在以前的贴子中也有反映。我的看法仍是,如果很小的硬件代价就能大幅提高梯形图实施速度,那就值得思考,并欢迎大家讨论。

liguangqang 发表于 2011-6-16 10:45:36

在PLC梯形图中只有执行命令线圈等前面是位逻辑运算,其中还有跳转指令作为分隔,因些最多优化分段后的逻辑运算。虽然处理器有多位逻辑运算的能力,但是从询址方面的原因,如X1和Y1在不同的位地址空间。只有在连续的地址空间才能进行多位运算来加速。不同的位算如加速后,运算时间的不确定对二次开发提高了难度。

learner123 发表于 2011-6-16 11:17:45

看来还是给你多说些吧

C中位运算针对字节型,整数型,一次当然是n位同时。
其他内容涉及人家的专利和饭碗,我不便细说,你意会即可。

你说的东西我以前也想过,当然不是不懂。不过你的表述有问题,很多术语建议看看离散数学,有更严谨的表述。

至于你所说的有些东西谈不上是“高档的并行”思想,实际就在用了,当然实现不太一样,因为你的思想做法有问题,具体只有在实现过程中你才能发现。还有部分没有价值了,因为代价太大,收效不大。

plc的复杂功能应用,你可能做的不多,建议还是先做些plc项目再说。很多人搞过现场,问题的确如他们所说,建议你先仔细看看他们的回帖,毕竟搞plc应用的人玩c语言或单片机的不是太多,现场经验才是主题。

很多用plc的地方,速度不是主题,可靠才是,需要的经验和时间最多!假如你的东西要工作10年,编译/解释器的代码的可靠要求极高,这个都没做到,谈不上速度。问题是国内有几个做到了?有的小厂的产品吹嘘可靠,那是没经过严格测试,或者糊弄一下。另,什么国内自己的技术标准测试是扯淡,给点钱就行了,或者十产品个一个过了就行的做法很扯淡。

而且现在的plc也是向过程控制器方面,PC控制发展,体系变得多样而复杂,当然标准也是如此。

某军官说的好,中国_军队现在先别谈实现高科技,实现现代化就很不容易了。同理,如果你以后是搞plc这个行业,而且理想远大些,就先把手边的事做好。可靠性都没有谈不上速度。不要小看可靠性,如果你看了日本人搞plc的源代码和文档就会发现人家根本就没多少高深的东西,但是事情做的很仔细。顺便说一下,很多软件日本人也是外包的。而且印度外包比国内还好,以至于国内接到项目转包给印度了!

zjnber 发表于 2011-6-16 14:50:59

回复【48楼】learner123
-----------------------------------------------------------------------

看来你对PLC行业比较熟悉。
“C中位运算针对字节型,整数型,一次当然是n位同时。”我想你不至于认为这个我也不懂吗。我的问题是字节、字长的逻辑运算在传统的以一位逻辑运算为基础的可编程控制器梯形图实现方法的逻辑量处理中利用率极低,使梯形图实现速度减慢。
尽管高手事多,时少,我也希望应在全面理解我的意思的基础上指出我的错误或漏洞,具体一些,实质一些。不然我看不懂,想信别人也看不懂。
为了不让字太多,可能有些地方表述得简单了一点,如有人愿意了解,我可表达得更详细点。

learner123 发表于 2011-6-16 18:27:55

参考47楼,还是那句话,好好学习先,不然沟通都是问题

zjnber 发表于 2011-6-16 19:11:43

回复【50楼】learner123
-----------------------------------------------------------------------

47楼的问题在我的贴子中都提出了解决办法,这是最起码首先要想到的。47楼的问题我没有回答,如果仔细看过我贴子的人就有答案。我写了一个梯形图输入界面,在考虑编译程序时想到了梯形图逻辑量并行处理方法,与大家共同讨论。`

zjnber 发表于 2011-6-17 10:23:20

回复【50楼】learner123
-----------------------------------------------------------------------

回复【47楼】liguangqang
-----------------------------------------------------------------------

从50楼、47楼的文字看,在你们发贴前都没有全面阅读我的贴子,没有全面理解我的意思,所以你们贴子的内容对我没有参考价值,相信对别人也无参考价值。我仍然希望应在全面理解我的意思的基础上指出我的错误或漏洞,具体一些,实质一些。
认为我plc的复杂功能应用可能做的不多,其实plc的复杂功能我10多年前就用了,在这之前写了约十年的汇编语言,后来主要用C语言。

heky 发表于 2011-6-17 10:39:04

【49楼】 zjnber

我的问题是字节、字长的逻辑运算在传统的以一位逻辑运算为基础的可编程控制器梯形图实现方法的逻辑量处理中利用率极低,使梯形图实现速度减慢。

这个问题,stm32解决的比较好,有位段处理。

【50楼】learner123
这个前辈肯定是一个行内人,见解犀利。

阿莫老大说过的话,PLC行业先得把应用做好,再谈技术开发。
【52楼】 zjnber
你研究的技术,去大公司才有前途。目前你所说的技术,连三菱,西门子现有产品好像都还没有这种理念。

heky 发表于 2011-6-17 10:52:34

lz 说实话,这帖子,你表述的东西我看不懂。
09年之前我觉得PLC应该是速度取胜,09年做应用到现在,觉得应该是易用,兼容为主。
国内一些PLC厂已经不再做技术研发,直接购买德国的方案来做PLC。

速度快的PLC,有应用场合,但是这些都不可能是国产PLC的用武之地。你连做进去的机会都没有,哪来完善的机会。

国内基础工业,用的PLC,大部分都是10年前的技术,现在看来,撑个10-20年也不会被淘汰掉。三菱在05年就有速度更快的fx3系列,但是你在国内能看见几个设备在用,够用,稳定是前提。

你在这篇帖子讲的都是怎么提高逻辑处理速度,其实在编译型的PLC,比如H8系列,一个ld指令也就是1-2条汇编码。你增加的并行运算,有可能比你省掉的时间要大。

learner123讲的很对,工控就是做简单,做稳定。解决方法越复杂,稳定性越差。

zjnber 发表于 2011-6-17 19:05:07

回复【54楼】heky
-----------------------------------------------------------------------

我的表述你看不懂,我想应该是我没有表达清楚。
过几天我画一幅图,用图来描述可能会更加简洁、更容易理解。并把两种梯形图垂直线段或运算加速电路图也贴上来。
我理解和赞同你说的,PLC,稳定是前提。
我的方法就是想用很小的硬件代价大幅度提高梯形图实施速度。

spark123 发表于 2011-6-17 21:07:57

楼主的确很会说,不知有没有现场经验?还是只是只懂得书本的理论知识?有能力做个实物出来让大伙看看。

maxoser 发表于 2011-6-18 20:12:39

learner123 ,heky 都是基本功扎实,应用经验丰富的高手。我建议楼主还是一行代码一行代码的把想法敲出来,一个电路一个电路的去实现,至少要有个初步的雏形,这样讨论起来才不会让人感觉天马行空。

zjnber 发表于 2011-6-21 16:06:43

梯形图的执行速度应该与编译后的指令数多少及每条指令的执行时长有关。
先说我的梯形图逻辑量并行处理方法。
以ARM CM3为例,并作硬件改造,在位寻址区中建立一个位寻址特区,假如这个位寻址特区为256位,用于存放扫描前一次性读入的X、上一次扫描后一次性写出的Y、及若干M、S、C、T等开关量,及准备在扫描后一次性写出的Y。在这个位寻址特区与某一寄存器R的任意位之间建一条位变量传输通道,在256位的位寻址特区一端需8位地址寻址,32位的某一寄存器R的任意位一端需5位地址寻址,一条位变量传输通道共需8+5=13位地址信息。若建两条独立的这样的位变量传输通道,共需2*13=26位地址信息。32位指令可包含两条独立的位变量传输通道信息,1位信息用于表达一条通道有效,还是两条通道有效,因为有时只用到一条通道。32位指令中的32-2*13-1=5位信息用于指令识别码。两条独立的这样的位变量并行传输通道是常规的位传输速度的两倍。还有64位指令可包含四条独立的位变量传输通道信息,2位信息用于表达一条通道有效、两条通道有效、三条通道有效或四条通道有效。64位指令中的64-4*13-2=10位信息用于指令识别码。如果建四条独立的位变量并行传输通道是否对位传输速度有更多的提高。如果R1有这样的任意位传送输入功能,作为源寄存器;R2有这样的任意位传送输出功能,作为源寄存器。

zjnber 发表于 2011-6-21 16:10:33

http://cache.amobbs.com/bbs_upload782111/files_41/ourdev_650866AMF9V1.png
简单梯形图 (原文件名:tu1.png)

http://cache.amobbs.com/bbs_upload782111/files_41/ourdev_650867QUZR7A.png
第一种垂直线段或运算加速电路片段 (原文件名:tu2.png)

http://cache.amobbs.com/bbs_upload782111/files_41/ourdev_650868Z6PHQU.png
第二种垂直线段或运算加速电路O3输出部分 (原文件名:tu3.png)

http://cache.amobbs.com/bbs_upload782111/files_41/ourdev_650869TQIKHT.png
第二种垂直线段或运算加速电路COUT输出部分 (原文件名:tu4.png)

zjnber 发表于 2011-6-21 16:29:00

对图示梯形图,使R1=0,再用上述新指令并行地把位寻址特区的X0传送到寄存器R1的0位、把位寻址特区的X5传送到寄存器R1的1位。把R1送R2。再并行地把位寻址特区的X6传送到寄存器R1的0位、把位寻址特区的X1传送到寄存器R1的1位,作按位字运算R2=R1 AND R2,因为这一列后面有垂直线段,所以巳有的R2值送垂直线段或运算加速电路的32位的I端,垂线信号(有垂线为1,无垂线为0)送32位的L端,32位O端就是垂直线段或运算加速电路的输出,并自动送回R2。再把X2送R1的0位、X7送R1的1位、X5送R1的2位、X3送R1的3位、X6送R1的4位,作按位字运算R2=R1 AND R2,送垂直线段或运算加速电路。因第三行有水平连线,先使R1=0x00000004,即R1的第三位为1,再并行地把X6送R1的0位、X3送R1的1位、X2送R1的3位、X0送R1的4位、X1送R1的5位,作按位字运算R2=R1 AND R2,等等。为叙述方便,这个简单的梯形图行数不多,实际上可以五个这样的图形块可并行计算。从这里可以看出,运算速度加快了,位变量并行传输的个数和速度成为梯形图逻辑量并行处理方法提升速度的关键。
以前说过,对一定的梯形图,垂线分布是不变的。块内是否有垂线,是否要送梯形图垂直线段或运算加速电路,块内同一列最长垂线的长度多少,寄存器的填入需要多长时间,(硬件的)或运算和(软件的)与运算之间是否需要等待和等待多长时间(通常不需要等待),块内运算到哪一列结束等等,梯形图的解析程序在可编程控制器正式运行前就可认定,并体现在解析所得的循环扫描指令串中。

zjnber 发表于 2011-6-22 08:43:56

58楼最后一句改正:R2有这样的任意位传送输出功能,作为目的寄存器。
60楼改正及补充:
1、原话:对图示梯形图,使R1=0,再用上述新指令并行地把位寻址特区的X0传送到寄存器R1的0位、把位寻址特区的X5传送到寄存器R1的1位。
改为:对图示梯形图,按列作逻辑字运算。使R1=0,再用上述新指令根椐梯形图第一列的逻辑变量及其所在行的位置并行地把位寻址特区的X0传送到寄存器R1的0位、把位寻址特区的X5传送到寄存器R1的1位。以后类似。
2、原话:因第三行有水平连线,先使R1=0x00000004,即R1的第三位为1,
改为:接着一列,因第三行有水平连线,先使R1=0x00000004,即R1的第二位为1(有水平连线的地方为1,无水平连线的地方为0),

learner123 发表于 2011-6-22 11:28:53

楼主数字电路学的还只是在组合逻辑阶段,

给个建议,楼主可以在NIOSII上自定义指令来完成,
不过,就只是个学习,不要当真。可以顺便学习新东西,不要把身家都投上去

zjnber 发表于 2011-6-22 12:03:55

回复【62楼】learner123
-----------------------------------------------------------------------

我仍然希望应在全面理解我的意思的基础上指出我的错误或漏洞,具体一些,实质一些。

learner123 发表于 2011-6-22 13:18:21

关键字: FPGA ,自定义指令

用于加速的自定义指令多数就是为了特定的应用,但是不具有通用性,altera的软核就可加入自己的IP用于加速执行,具体的看看altera公司的说明,是个可以个人实验的手段。
错误漏洞前面已经说过了,可以自己仔细看看。有些东西不懂,学习的方向也已经指出。

这里指出的是,用硬件方式加速程序运行不是不可以,不过对于PLC的梯形图意义不大。当然对于楼主学习新的东西还是有帮助。不过不要指望商业用途,自己玩玩就行了。

硬件方式加速程序也不是什么新东西,思路和做法在学术界已经很老了,商业中也有应用(视频方面,信号处理等)。不过是希望有自己想法的年轻人能够继续好好学习

如果楼主还是抱着偏见和自负来交流,我就不多说了。做人要先学会谦虚,花这个时间看前面的内容还要猜楼主的意思,还要想法设法让楼主清楚,没有任何经济价值,想想看的确没什么意思。但我这么做不过是希望楼主能学好技术,毕竟都是玩这个的。

自己的意思不被理解有两种可能:

1,自己的表述有问题。很多概念和说法与大众不同,无论自己的理论高还是低。

2,自己的想法一开始就不对,不是别人不理解,是自己不理解别人的意思,自以为高处不胜寒。

zjnber 发表于 2011-6-22 14:42:47

回复【64楼】learner123
-----------------------------------------------------------------------
梯形图逻辑量并行处理方法只是一种梯形图处理方法,就象去一个地方,另外一条路是否可以,无关什么理论,也没说过要用什么理论。但作为一种方法可能是对的,也可能是错的,所以与大家讨论。一个人要理解别人的想法需要点耐心,我希望应在全面理解我的意思的基础上发表各人自己的看法,不然是没有参考价值的。至于我是否有“抱着偏见和自负”、“自以为高处不胜寒”之意,别人看了我的本主题的所有贴子后自有结论。
谢谢你的贴子,讨论梯形图逻辑量并行处理方法。

zjnber 发表于 2011-6-28 11:13:46

根据前述,梯形图逻辑量并行处理方法除了运算方法,还需要在原单片机如ARM CM3基础上增加两项硬件支持:一、梯形图垂直线段或运算加速电路;二、多个独立通道逻辑量并行传递。硬件的增加会增加单片机硬件成本,但增加的比例不大,假如增加百分之二或三,也就是原来卖25元一片的ARM CM3,现在增加这两项硬件支持的用于PLC的单片机卖25元6角左右。
现在我想调查一下,愿意增加这些支出,而使PLC的梯形图执行速度有数倍的提高;还是愿意沿用传统方法。请大家回贴。
页: [1]
查看完整版本: 为加快PLC逻辑量处理速度,实行梯形图逻辑量并行处理方法,可行吗?