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

一个输入,输出时四个输出中的任意一路输出 s7-200程序 点击:1724 | 回复:22



燕北寒

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 13回
  • 年度积分:0
  • 历史总积分:108
  • 注册:2009年7月06日
发表于:2010-09-26 21:10:45
楼主
s7-200程序,一个输入,输出时四个输出中的任意一路输出,有什么简单的方法?欢迎大家热烈发帖。



老菜鸟

  • 精华:22帖
  • 求助:0帖
  • 帖子:301帖 | 8609回
  • 年度积分:0
  • 历史总积分:24924
  • 注册:2003年6月15日
发表于:2010-09-26 21:29:26
1楼

一个存储器,通过间隔时间,1-4循环变化,输入那个时候到就定位在1-4的某个数字,让对应的继电器输出。

robotH

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 688回
  • 年度积分:0
  • 历史总积分:2433
  • 注册:2004年10月14日
发表于:2010-09-26 21:48:15
2楼
你的意思是四个输出中随机输出一路吧?

robotH

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 688回
  • 年度积分:0
  • 历史总积分:2433
  • 注册:2004年10月14日
发表于:2010-09-26 21:51:27
3楼
老菜鸟网友的方法,输出实际上还是有规律的,达不到“随机”的要求。

燕北寒

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 13回
  • 年度积分:0
  • 历史总积分:108
  • 注册:2009年7月06日
发表于:2010-09-27 08:41:52
4楼

回复内容:
对:robotH 关于你的意思是四个输出中随机输出一路吧? 内容的回复:


是的


robotH

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 688回
  • 年度积分:0
  • 历史总积分:2433
  • 注册:2004年10月14日
发表于:2010-09-27 09:19:03
5楼

如果用台达PLC,因为有随机数产生指令RAND,你的问题变得很简单。只要LD X0 RAND K0 K19 D0,然后判断D0的范围即可。0=<D0<=4,输出Y0;5=<D0<=9,输出Y1;10=<D0<=14,输出Y2;15=<D0<=19,输出Y3。

至于S7-200PLC,因为没有相应的RAND指令,只能自己编程用线性同余法计算随机数。

公式为:R(n+1) = [R(n) * a + b] mod c。

详细内容可以在网上搜索相关资料。

燕北寒

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 13回
  • 年度积分:0
  • 历史总积分:108
  • 注册:2009年7月06日
发表于:2010-09-27 13:09:06
6楼
回复内容:
对:robotH 关于

如果用台达PLC,因为有随机数产生指令RAND,你的问题变得很简单。只要LD X0 RAND K0 K19 D0,然后判断D0的范围即可。0=<D0<=4,输出Y0;5=<D0<=9,输出Y1;10=<D0<=14,输出Y2;15=<D0<=19,输出Y3。

至于S7-200PLC,因为没有相应的RAND指令,只能自己编程用线性同余法计算随机数。

公式为:R(n+1) = [R(n) * a + b] mod c。

详细内容可以在网上搜索相关资料。

 

 

内容的回复:


谢谢先,不太懂

hcsun

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 90回
  • 年度积分:0
  • 历史总积分:144
  • 注册:2004年7月27日
发表于:2010-09-27 16:49:40
7楼
取时钟的秒,除以4后,取出余数,判断输出好啦啦!

老菜鸟

  • 精华:22帖
  • 求助:0帖
  • 帖子:301帖 | 8609回
  • 年度积分:0
  • 历史总积分:24924
  • 注册:2003年6月15日
发表于:2010-09-27 20:56:34
8楼
现在的随机函数发生器大都采用的是线性同余法。同余的概念是这样描述的:

设m是一个给定的正整数,如果两个整数a,b用m除,所得的余数相同,则称a,b对模m同余。

所谓线性同余法(又叫混合同余法),就是这样的一个公式:X[i+1]=(A*X[i]+C) mod M;

经前人研究表明,在M=2^q的条件下,参数A,C,X[0]按如下选取,周期较大,概率统计特性好:

A=2^b+1=2^(log2(M)/2)+1=2^log2(sqrt(M))+1=sqrt(M)+1;b取q/2 附近的数

C=(1/2+sqrt(3))*M

X[0]为任意非负数

M , 模数 0 < M
A, 乘数 0 <= A<M
C, 增量 0 <=C<M
Xi,开始值 0<=Xi<M

        它的一个致命的弱点,那就是随机数的生成在某一周期内成线性增长的趋势,显然,在大多数场合,这种极富“规律”型的随机数是不应当使用的。 

        同余序列总是进入一个循环,这是一个事实,它最终必定在N个数之间无休止的重复循环。
        使用该方法产生的伪随机数能不能近似真正的随机效果,跟四个整数的设置相关:
1. 序列的开始值,一般取正整数。
2. m:一个同余序列的周期不可能多于m个元素,所以,为了达到预期的随机效果,一般我们希望这个值稍稍大一点。在大多数情况下,当m = 2e(e表示计算机的字大小)时,在计算机中得到的随机效果就比较令人满意了。而且这样对于随机数生成速度也是比较合理的。
3. a:当a=1的时候,Xn=(X0+nc)mod m ,它不具有随机序列的特性;而当a=0的时候甚至更糟糕。因此,为实用起见,选择2 <= a<m比较合理。
4. c:当c=0时,数的生成过程比c!=0的时候要稍微快些,它的限制缩短了这个序列的周期长度,但是也仍然有可能得到一个相当长的周期。当c=0时被称为乘同余法,c!=0称为混合同余法。为了一般性,我建议选择采用混合同余法。
由m,a,c和X0所定义的线形同余序列得到最大的周期长度m的条件如下:
当且仅当
(1)c与m互素。
(2)对于整除m的每个素数p,2^b=a-1是p的倍数。
(3)如果m是4的倍数,则b也是4的倍数。
        就像开始提到的,伪随机数的产生都是由一个起始种子数开始的,上面描述的就是由一个种子数下能够产生的随机数的序 列。这个序列的周期性是必然的,当这个周期能够满足预期的效果的时候,就是我们看到的满意的随机效果。
        在确定初始种子数的时候,可以有多种形式,例如将某时刻的时钟数据做种子,通过时间的不停变化,进行随机数的求取来达到随机效果。这些都是方法问题了,不在算法讨论范畴。

老菜鸟

  • 精华:22帖
  • 求助:0帖
  • 帖子:301帖 | 8609回
  • 年度积分:0
  • 历史总积分:24924
  • 注册:2003年6月15日
发表于:2010-09-27 21:01:45
9楼

        可以看出,目前大多数的采用线性同余法的随机函数都有缺点:随机数的生成在某一周期内成线性增长的趋势。

        至于没有缺点的随机函数,我没有去研究过。

        在没有严格要求的场合,得到的随机数不怎么影响结果就差不多了,没必要去追求那么完美————人有悲欢离合,月有阴晴圆缺,此事古难全。。。。。。

wyb2866255

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2010-09-27 22:01:34
10楼

“s7-200程序,一个输入,输出时四个输出中的任意一路输出,有什么简单的方法?欢迎大家热烈发帖。”这确实是个不错的帖子,我也没用什么随机函数,凭着PLC由于扫描周期影响定时器的定时精度的考虑,用S7-200编写了楼主提出的控制要求的梯形图,并在S7-200上运行,证明程序符合楼主要求。梯形图如下,有兴趣的网友可以试用一下。

robotH

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 688回
  • 年度积分:0
  • 历史总积分:2433
  • 注册:2004年10月14日
发表于:2010-09-27 22:29:03
11楼
这个程序的输出不具备随机性,因此不能说符合楼主要求。简单地说:如果某一时刻I0.0输入ON,输出为Q0.0,那么15ms后再次输入,则输出一定不是Q0.0了。这就不符合随机性要求。随机性的原则是:无论何时输入I0.0,输出Q0.0-Q0.3的机会相等。

PistoN

  • 精华:0帖
  • 求助:1帖
  • 帖子:23帖 | 13107回
  • 年度积分:18
  • 历史总积分:40065
  • 注册:2009年5月22日
发表于:2010-09-27 22:40:42
12楼

楼上的程序未必是真正意义上的随机输出。有限个输出符合要求不意味着总能随机输出。还是用随机数输出的指令,让plc给出在(0,1)范围内的伪随机数RAND(x),用取整指令对4*RAND(x)+1取整,其结果一定是1,2,3,4中随机的某一个,再让此随机结果分别与1,2,3,4比较,采用分支程序根据比较结果把程序执行引向不同的输出

wyb2866255

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2010-09-28 00:26:42
13楼

根据楼主要求:“一个输入,输出时四个输出中的任意一路输出,”就是说在输入信号=1时,Q0.0-Q0.3 四个输出端中必须有一路输出=1,且不是有规律出现,我是按这个原则编程的。11楼你说“15ms后再次输入,则输出一定不是Q0.0了”你对T32的用意理解错了,这里用T32构成振荡器,是在输入信号I0.0 =1的后沿起的300MS内,对MB0计数用的,300MS后MB0计数停止,由于这种定时计数不稳定性,使MB0每次计数结果不相等,但MB0的低二位(即M0.0与M0.1二位值)的状态只有四种:00、01、10、11,按梯形图四路输出支路的M0.0、M0.1的组合,不管计数值为多少,总有且只有一路为串联通道状态,当下一个输入信号到来时间内(即I0.0=1)使M2.0=1,这样四路输出中总有且只有一路输出=1,当输入信号结束后的300MS内MB0又计数,计数停止,M0.0与M0.1的状态是随意的,但只能在0-3之间变化,也就是说总有一路M0.0与M0.1串联处于通道状态的。我认为本梯形图符合楼主要求。从统计学观点来看,多次的输入,其四路出现导通的概率应该是相等的。

 

燕北寒

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 13回
  • 年度积分:0
  • 历史总积分:108
  • 注册:2009年7月06日
发表于:2010-09-28 09:00:59
14楼
感谢大家的热烈讨论!我要求任意输出一路的目的就在于让其导通的概率相等,所以能达到目的的程序就是符合的。

robotH

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 688回
  • 年度积分:0
  • 历史总积分:2433
  • 注册:2004年10月14日
发表于:2010-09-28 09:26:33
15楼

回复13楼:

你还是没有理解“随机性”。就你的程序,再举个特殊点的例子来说明我在11楼的观点:如果某一时刻I0.0输入时,输出为Q0.0,5ms时I0.0断开,10ms时再次输入I0.0,那么按照你的程序,输出是确定的:不是Q0.0就是Q0.1,而不可能是Q0.2或Q0.3,因为这期间T32最多翻转一次。这就谈不上随机性了。

wyb2866255

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2010-09-28 10:02:04
16楼

15楼网友:你说的问题我明白,但楼主要求用S7-200编程,PLC通常内部存储器计数频率很低,所以才用15ms定时器搭成振荡器,如果想要是输入信号宽度为几ms,可用高速计数器计数,这样就得用外输入计数脉冲来代替T32,而且最高为20KHz。如你再要求输入脉宽为几微秒,PLC根本不能胜任,就得用计算机编程了,而计算机也有最高频率限制,所以不能把问题太绝对化。(将T32的定时时间改为 1ms,程序仍能正常工作,这样几毫秒输入脉宽就能正常运行)

robotH

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 688回
  • 年度积分:0
  • 历史总积分:2433
  • 注册:2004年10月14日
发表于:2010-09-28 12:35:56
17楼
不是我要求脉宽为几微秒,只是举个例子而已。无论T32的定时时间是15ms还是1ms,性质是不变的:即不能保证任意时刻I0.0输入时Q0.0-Q0.3输出的概率相等。

老菜鸟

  • 精华:22帖
  • 求助:0帖
  • 帖子:301帖 | 8609回
  • 年度积分:0
  • 历史总积分:24924
  • 注册:2003年6月15日
发表于:2010-09-28 17:39:39
18楼

实际上,采用线性同余法的随机函数发生器,也不是真正意义上的随机。

它的一个致命的弱点,那就是随机数的生成在某一周期内成线性增长的趋势,显然,在大多数场合,这种极富“规律”型的随机数是不应当使用的。

robotH

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 688回
  • 年度积分:0
  • 历史总积分:2433
  • 注册:2004年10月14日
发表于:2010-09-28 21:42:33
19楼
引用老菜鸟 的回复内容:

实际上,采用线性同余法的随机函数发生器,也不是真正意义上的随机。

它的一个致命的弱点,那就是随机数的生成在某一周期内成线性增长的趋势,显然,在大多数场合,这种极富“规律”型的随机数是不应当使用的。



用线性同余法产生的随机数叫做“伪随机数”。虽然不是真正意义的随机数,但用在工控场合已经是绰绰有余,也是PLC唯一可以采用的方法。

wyb2866255

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2010-09-29 00:15:10
20楼
17楼网友说:“不是我要求脉宽为几微秒,只是举个例子而已。无论T32的定时时间是15ms还是1ms,性质是不变的:即不能保证任意时刻I0.0输入时Q0.0-Q0.3输出的概率相等。”对此结论我不理解,如果你的依据来源于15楼你说的“如果某一时刻I0.0输入时,输出为Q0.0,5ms时I0.0断开,10ms时再次输入I0.0,那么按照你的程序,输出是确定的:不是Q0.0就是Q0.1,而不可能是Q0.2或Q0.3,因为这期间T32最多翻转一次。这就谈不上随机性了。”。如果是这样说明你对程序没有看细,就以你说的输入条件,第一次输入,MB1可能计数为0或1,当第二次输入时,MB1的计数值不是仍为0或1而是1或2,为什么?MB1计数是累加计数的而不是从0计数,怎么会不可能出现Q0.2或Q0.3为输出呢?我们还是以楼主的求助内容来讨论问题吧:楼主说“s7-200程序,一个输入,输出时四个输出中的任意一路输出,有什么简单的方法?”。1、用S7-200编程,就限制了输入信号的脉宽不能小于5ms(普通输入口对信号的前后沿滞后时间为几毫秒,用其做计数输入口只能计200HZ以下的脉冲频率),2、输入信号的宽度是随意的,即使脉宽相同,由于扫描周期的影响,再加上MB1为累加计数,故使MB1的每次计数值波动性大,即MB1最低二位数(M1.0、M1.1)的状态为不固定的。从统计学观点来看,多次的输入,其四路各自出现导通的概率应该是相等的。这和抛钱看正反面的概率是一样的。3、真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,是不可见的。而计算机中的随机函数是按照一定算法模拟产生的,其结果是确定的,是可见的。我们可以这样认为这个可预见的结果其出现的概率是100%。所以用计算机随机函数所产生的“随机数”并不随机,是伪随机数。我是本着上述二个原则编写的程序,通过上机运行,多次输入,且输入脉宽长短变化,其四路输出是随机的,所以我仍坚持我编写的梯形图符合楼主要求。

热门招聘
相关主题

官方公众号

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