对网友求助问题的几个回帖展示之二十二
本文6例都是近期在网上回答网友的求助帖,其内容都是涉及PLC编程的一些问题,现整理汇编展示给大家,供大家参考。如有不对之处,请给于指正,本人深表感谢!
一、求助帖:……现在进行污水池里的刮泥机改造成西门子plc200控制:共两台电机一台是左右移动运行的电机正反转,那一台上下提升用的刮泥机上安装。三个光电开关要求手动和自动运行:按下启动刮泥机开始往右走电机正传,到最右边后碰光电开关停止,提升电机提升到位后,刮泥机反转,往左走到最左端刮泥机停止,提升电机反转,到位后刮泥机开始走,到中间位置后停止,在往左刮泥,为一个周期。就这样周而复始运动,是不是得用到计数器啊?大体思路,谢谢了,,,
答复:按楼主所述,该控制用不着步进机和计数器等控制,只用位控制就行,不过3个光电开关不够,需5个:如刮泥机的电机正传右行,到最右边后碰光电开关1使该电机停止,且使提升电机运行,这里需一个到位开关(1)。提升电机提升到位,提升电机停,且使刮泥机反转运行,这里也需设一到位开关(2)。刮泥机反转左行到位,使刮泥机反转停,且提升电机反转下降。这里也需一到位开关(3)。提升电机反转到位提升电机停,刮泥机开始正转右行走,这里也需一开关(4)。到中间位置后停止,再反转往左刮泥,这里也需一到位开关(5)。反转往左刮泥到最左侧碰到开关(4),刮泥电机停(完成一周期),如手动控制到此结束,如自动控制,当刮泥到最左侧碰到开关(4),刮泥电机反转右向运行,开始第二个周期的运行。其运行路线见下图:
由上面运行路线图可知:起始点位于开关4的位置,即下水平运动线的最左端,在下水平运动线的中点处,安放开关5。从启始到结束的一个运动周期里,刮泥机电机右行2次,左行也2次,提升机上升1次,提升机下降1次。按上面所画的运行路线图可编写如下的程序:
该程序经上机运行正确,可供楼主参考。
二、求助S7-200均值滤波程序:请高手们帮帮忙,我现在要做一个均值滤波程序,每100MS采样一次,采样十次,去掉一个最大值,最小值,完了求均值,请问这个采样十次之后我要做一个类似中断或者初始化的一段程序,请问怎么写,望高手指教!!!
回复:采用50ms时间中断,中断间隔时间=50mS,中断程序为MB8加1运算,故得M8.0为周期=100 Ms的频率脉冲。求的10次平均值依次放入首址为VW100的数据区里。详见梯形图:
三、求助帖:有哪位高手能给小弟讲解“ASCII码与16进制数的转换指令”的应用?
有哪位高手能给小弟仔细讲解下这个指令的应用,“33,45,41具体什么含义,然后具体是怎么转换的,本人初学PLC,对此看不明白
回复:ATH指令是将ASC||码转换为16进制码的指令,指令中的IN输入的VB30为待转换的ASC||码的首位ASC||码值,LEN的3为待转换的ASC||码为3位ASC||码(3字节数),QUT的VB40为转换后的16进制数的的最高2位数所占的一个字节,由于待转换的ASC||码为3位数,故转换后的16进制数进仅占一个半字节(ASC||码是一个字节(8位)代表一位ASC||码数值,而16进制数是4位表示一位数)。
ASC||码“
又问:“ASC||码“
二进制 十进制 十六进制 缩写 解释
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||码“
你在上面引用的是ASCII码的“00~05”。ASCII码的“30~39”。就是10进制数的“0~9”,ASCII码的“41~49”就是字母A、B、C.....H、I。用ASCII码传送16进制数,就选用ASCII码的“30~39及 41~46“,转换后变为”0、1、2、。。。9
A、B、C、D、E、F“这16种形式,正好表示16进制的16种状态。
四、求助帖:计数器按倍率计数总是问题 -……我现在想用FX2N编一个关于计数器按倍率计数的程序。一个计米轮(周长是
回复:可以这样做:在计米轮(周长是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,将立即数“
六、求助帖:关于西门子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。用实测数字量VW6与28160比较,就是相当用实测温度Tx与设定温度To(85度)进行比较。
2、通过数字量转换为温度的转换公式,将模块的数字量转换为对应的温度值,用转换后的温度值与设定的温度值比较,不仅清晰易懂,而且操作者自需填写设定温度值,而不需要将设定温度进行转换。
由公式(1)推导,可求出数字量转换为温度的转换公式(2),见下式:
T =(AIWx - 6400)÷256 ……(2)
3、二种方法的比较:1、采用直接用模块的数字量与设定温度下的数字量进行比较判断方法,由于不用实测温度与设定温度进行比较,故使编程可省略将数字量按转换公式转换为温度的编程,使编程简单可靠:只需将读取模块的数字量AIW0与设定温度对应的数字量SHaiw进行比较就可以了。缺点:设定温度不直观,需桉式(1)求出对应的数字量,设定值为桉式(1)求出对应的数字量,而不是设定温度值。
2、用模块的数字量先进行数/模转换,转换为实测温度值,用实测温度值与设定温度值进行比较判断的方法,优点为:用实测温度与设定温度进行比较,直观明了,易读易懂,缺点:编程较为复杂,特别是对没搞过模拟量输入模块的人,如何推导出正确的数/模转换公式,并用此公式编出将数字量转换为模拟量(如温度)有一定难度。
楼主最近还看过