对网友求助问题的几个回帖展示之二十二 点击:391 | 回复:4



wyb2866255---王者之师

    
发表于:2012-08-09 22:27:56
楼主

对网友求助问题的几个回帖展示之二十二

本文6例都是近期在网上回答网友的求助帖,其内容都是涉及PLC编程的一些问题,现整理汇编展示给大家,供大家参考。如有不对之处,请给于指正,本人深表感谢!

 

一、求助帖:……现在进行污水池里的刮泥机改造成西门子plc200制:共两台电机一台是左右移动运行的电机正反转,那一台上下提升用的刮泥机上安装。三个光电开关要求手动和自动运行:按下启动刮泥机开始往右走电机正传,到最右边后碰光电开关停止,提升电机提升到位后,刮泥机反转,往左走到最左端刮泥机停止,提升电机反转,到位后刮泥机开始走,到中间位置后停止,在往左刮泥,为一个周期。就这样周而复始运动,是不是得用到计数器啊?大体思路,谢谢了,,,

答复:按楼主所述,该控制用不着步进机和计数器等控制,只用位控制就行,不过3个光电开关不够,需5个:如刮泥机的电机正传右行,到最右边后碰光电开关1使该电机停止,且使提升电机运行,这里需一个到位开关(1)。提升电机提升到位,提升电机停,且使刮泥机反转运行,这里也需设一到位开关(2)。刮泥机反转左行到位,使刮泥机反转停,且提升电机反转下降。这里也需一到位开关(3)。提升电机反转到位提升电机停,刮泥机开始正转右行走,这里也需一开关(4)。到中间位置后停止,再反转往左刮泥,这里也需一到位开关(5)。反转往左刮泥到最左侧碰到开关(4),刮泥电机停(完成一周期),如手动控制到此结束,如自动控制,当刮泥到最左侧碰到开关(4),刮泥电机反转右向运行,开始第二个周期的运行。其运行路线见下图:

 

      由上面运行路线图可知:起始点位于开关4的位置,即下水平运动线的最左端,在下水平运动线的中点处,安放开关5。从启始到结束的一个运动周期里,刮泥机电机右行2次,左行也2次,提升机上升1次,提升机下降1次。按上面所画的运行路线图可编写如下的程序:

  

 

    该程序经上机运行正确,可供楼主参考。

 

二、求助S7-200均值滤波程序:请高手们帮帮忙,我现在要做一个均值滤波程序,每100MS采样一次,采样十次,去掉一个最大值,最小值,完了求均值,请问这个采样十次之后我要做一个类似中断或者初始化的一段程序,请问怎么写,望高手指教!!!

回复:采用50ms时间中断,中断间隔时间=50mS,中断程序为MB81运算,故得M8.0为周期=100 Ms的频率脉冲。求的10次平均值依次放入首址为VW100的数据区里。详见梯形图:

 

三、求助帖:有哪位高手能给小弟讲解“ASCII码与16进制数的转换指令的应用?

 

有哪位高手能给小弟仔细讲解下这个指令的应用,“33,45,41具体什么含义,然后具体是怎么转换的,本人初学PLC,对此看不明白

     回复:ATH指令是将ASC||码转换为16进制码的指令,指令中的IN输入的VB30为待转换的ASC||码的首位ASC||码值,LEN3为待转换的ASC||码为3ASC||码(3字节数),QUTVB40为转换后的16进制数的的最高2位数所占的一个字节,由于待转换的ASC||码为3位数,故转换后的16进制数进仅占一个半字节(ASC||码是一个字节(8位)代表一位ASC||码数值,而16进制数是4位表示一位数)。

   ASC||33”代表16进制数3”ASC||码的41”代表16进制数的“A”,而ASC||码的45”代表16进制数的“E”,故经ATH转换后OUT输出的16进制数为“35_1X ”,VB40=35VB41=4X(高4位值=4,低4位为原值)

     又问:“ASC||33”代表16进制数3”意思是不是在ASCII对照表中ASC||33”对应16进制数“3“?但是对照表中是这样啊

二进制       十进制    十六进制      缩写  解释

0000 0000    0          00            NUL    空字符(Null)

0000 0001    1          01            SOH    标题开始

0000 0010    2          02            STX    正文开始

0000 0011    3          03   ???? ETX    正文结束

0000 0100    4          04            EOT    传输结束

0000 0101    5          05            ENQ    请求

    再回复:是的,ASCII对照表中ASC||33”对应16进制数“3“.

你在上面引用的是ASCII码的“00~05”ASCII码的“30~39”。就是10进制数的“0~9”ASCII码的“41~49”就是字母ABC.....HI。用ASCII码传送16进制数,就选用ASCII码的“30~39 41~46“,转换后变为”012、。。。9

ABCDEF“16种形式,正好表示16进制的16种状态。

     四、求助帖:计数器按倍率计数总是问题 -……我现在想用FX2N编一个关于计数器按倍率计数的程序。一个计米轮(周长是0.3),机台生产的电线经过记米轮进行记米、记米轮每转一圈是0.3,用接近开关感应记米轮转动的圈数传给PLC,我要按0.3的倍率计米轮每累积转动一米记数器加一。望各位大哥不吝赐教

回复:可以这样做:在计米轮(周长是0.3米)的周边等分3等分,固定3个金属片,这样转动1圈时接近开关可发出3个脉冲,脉冲间距=0.1米,每计10个脉冲使计数器加1(即1米长)。如直接用接近开关可发出的脉冲计数,1米长计数=10,可提高侧长精度。

   

五、求助 西门子200指针的小问题

插个问题可以吧,呵呵,问题很菜。

我想用指针将2放入VD100,可是没有成功。

回复:你的网络2中输入数用“100”用的不对,应为“&VB100”才是将首址VD100 的最高字节VB100的地址送入指针地址VD500里。正确编程如下:

      可监看网咯14中的VD100:按一下I0.3,使VD100=0,监看VD100,其内容=0。按一下I0.4,将&VB100送入VD500中。再按一下I0.5,将立即数2”送入VD500的内容为双字地址(其VB100为双字地址的最高字节)的双字中,即:VD100。此时再监看VD100,其内容=2.

     六、求助帖:关于西门子plc200模拟量输入处理问题

小弟plc初学者,现检测一个温度0-100摄氏度,经过变送出来是4-20ma的信号。要根据温度启停几个风机,4-20ma输入进去后对应的数是6400-32000,对于6400-32000我没有经过处理,直接进行的比较

 

 

这样直接做的比较,请问这种做法可行吗?有什么不好?不好的话我该如何处理?谢谢帮助大虾指导下。

答复:1、你这种直接用模块的数字量进行比较做法是可行的,但相比先将模块的数字量转换为温度值后,再用转换后的温度与设定温度进行比较的方法,没有温度比较显得直观、清楚。而且这种用模块的数字量进行比较做法,也必须要找出温度与数字练得转换公式,将设定的温度值代入转换公式里,才能求出设定的温度下正确的数字量。

由温度转换为数字量的公式推导:

已知:温度0-100摄氏度,经过变送出来是4-20ma的信号。输入给模拟量输入模块,产生对应的数字量为:6400~32000

即:温度=0度对应数字量=6400,温度=100度对应数字量=32000。每变化1度时 对应的数值量△=32000-6400÷100=256,那么不同温度对应的数字量为:

   AIWx=6400+256*T ……(1

.比如设定温度 To=85度,代入式(1)可求出85度对应的数字量:AIWx=6400+256×85=28160。用实测数字量VW628160比较,就是相当用实测温度Tx与设定温度To85度)进行比较。

     2、通过数字量转换为温度的转换公式,将模块的数字量转换为对应的温度值,用转换后的温度值与设定的温度值比较,不仅清晰易懂,而且操作者自需填写设定温度值,而不需要将设定温度进行转换。

由公式(1)推导,可求出数字量转换为温度的转换公式(2),见下式:   

    T =AIWx - 6400÷256  ……(2

3、二种方法的比较:1、采用直接用模块的数字量与设定温度下的数字量进行比较判断方法,由于不用实测温度与设定温度进行比较,故使编程可省略将数字量按转换公式转换为温度的编程,使编程简单可靠:只需将读取模块的数字量AIW0与设定温度对应的数字量SHaiw进行比较就可以了。缺点:设定温度不直观,需桉式(1)求出对应的数字量,设定值为桉式(1)求出对应的数字量,而不是设定温度值。

2用模块的数字量先进行数/模转换,转换为实测温度值,用实测温度值与设定温度值进行比较判断的方法,优点为:用实测温度与设定温度进行比较,直观明了,易读易懂,缺点:编程较为复杂,特别是对没搞过模拟量输入模块的人,如何推导出正确的数/模转换公式,并用此公式编出将数字量转换为模拟量(如温度)有一定难度。



楼主最近还看过

SSI ļʱ