对网友求助问题的几个回帖展示之二十九
本文4例都是在网上回答网友的求助帖,现整理汇编展示给大家,供大家参考。如有不对之处,请给于指正,本人深表感谢!
一、求助帖:PLC 开关量测转速,使用时间窗的方法测,接的是普通输入口,不是高速计数模块,如何编程。。。求指教。。。
回复:由于PLC的普通输入口的计数频率较低(一般均低于200Hz),故用PLC普通输入口作脉冲计数的输入端,分二种情况编程:1、计数脉冲频率低于200Hz,可直接用PLC的普通输入口作计数器的计数端。2、计数脉冲频率高于200Hz,可采用硬件计数器电路配合,将原计数频率进行N分频,再将其分频后的脉冲频率(低于200Hz)输入给PLC的普通输入端,这样处理后即可实现用普通输入端对较高频率脉冲的计数问题,请见下面讲解:
例1、如旋转脉冲计数频率<200Hz以下,可用普通输入口对其计数,其转速频率测定编程如下(用S7-200编程):
程序说明:I0.0为旋转脉冲计数器的输入口,SM0.5为秒脉冲,其SM0.5=1的间隔=0.5秒,在此间隔内,用I0.0=1的前后沿对MB10进行加1计数,用SM0.5=1的后沿将MB10的计数值送入MB8,再将MB10清0,以备下一个SM0.5=1的到来进行第二次测速采样。此时的MB8值,虽是0.5秒计数值,但它由于是用I0.0=1的前后沿计数,故计数值是I0.0=1脉冲数的2倍值,即相当于1秒内记得I0.0的脉冲数,即为旋转脉冲频率。
例2、如旋转脉冲计数频率> 200Hz <3KHz,其选用的PLC为S7-300系列的315型PLC,315型PLC的CPU内无高速计数器功能,如需要对高速脉冲进行计数,一般的办法就是外配一个高速计数器模块。300系列的高速计数器模块价格是很贵的,为降低成本,可采用硬件分频计数进行分频的方法来实现用普通输入口进行对高频脉冲计数。见下图:
电路说明:图中 4520 为4位2进制计数器,它是COS电路,其最高工作电压=18V,实取15V。其输出电流为1ma以下。而PLC输入端输入为1时电压应为24V,输入电流为8ma,为此用输出为OC门形式的1413七反向器与光耦器件TLP620-4进行电平、电流的转换:其工作原理是这样的:当4520 的输出(如Q0)=0时,对应1413的反向器截止,其输出为断开状态,使光耦器件的1、2脚电压=0,故对应的发光二极管处于截止不发光,使其光电三极管截止,即使I0.0=0。当4520 的输出(如Q0)=1时,对应1413的反向器导通,其输出为0,给光耦器件的1、2脚间的发光二极管与电阻R2施加+24V电压,使发光二极管导通发光,使其对应光电三极管导通,即使I0.0=1。
4520的EN端为计数输入端(负跳沿触发计数),其Q0~Q3为4位输出,Q0为2分频、Q1为4分频、Q2为8分频、Q3为16分频,Q3输出脉冲频率=输入脉冲频率的16分之1,它的最后输出(U3-9)输入给PLC的I0.4端,作为内部计数器MW10的计数脉冲,4520的Q0~Q3的最后输出(U3管的15、13、11、9脚)分别接PLC的I0.0~I0.3,作为PLC的计数值的个位数(16进制数)的输入端,I0.4口为经16分频后的计数脉冲输入端具体编程见下梯形图:
程序说明:I0.4口的输入脉冲频率为旋转脉冲的16分频值。M100.5为PLC的时钟(秒)脉冲,在M100.5=1的间隔时间里(=0.5秒)用I0.4的前后沿对MW10进行加1计数,在此0.5秒时间内MW10的计数值=I0.4脉冲在1秒时间内的脉冲个数,即为I0.4脉冲的频率值。M100.5的后沿将MW10左移4位送入MW10,左移后的MW10值=原MW10值×16。再将IW0与16进制数相与的结果左移一位(即×2)的值与MW10相加,其和送入MW8。此时的MW8即为旋转脉冲的频率值(1秒内的脉冲数)。最后再将MW10清0,以备下一个I0.4=1时的计数采样运算。下举一例:
如在I0.4=1的后沿这一瞬间,MW10左移4次,其MW10 =16#0A50,即等于1秒时间内I0.4脉冲的计数值×16,而IW0与16进制数“0F”相与再左移一位,其结果等于4528计数器在1秒内对旋转脉冲的计数值(设它=16#13B),它实为旋转脉冲计数的个位数的值,将MW10与MW12相加,其运算结果(MW8)=旋转脉冲在1秒内的计数值,即=16#0A50+16#13B=16#0B8B。
此值即为I0.4=1的后沿时刻时的旋转脉冲在1秒内的计数值。即实现了一次PLC读去旋转脉冲频率值的功能。读数周期=0.5秒。I0.4的计数频率=旋转脉冲频率F÷16 ,如旋转脉冲F=3KHz,则读数周期频率(即I0.4的输入计数脉冲频率)=187Hz。
如硬件选用2个4位2进制计数器串联分频,用此方法可使计数频率高达50KHZ。
二、求助帖:谁明白S7200的模拟量编程-本公司原有S7300与S7200主从电台通信,因为原有界面陈旧,外加为适应更大范围自控我更改了组态软件,用的是WINCC,原来是VB一类,现在发现原有电压电流数值均不对,后经检查发现,原有模拟量变送器用的4-20MA的,经试验发现实际在程序中应该使用0-20MA变送器,否则就会出现电压无输入时显示90V,电流无输入时显示20A,而电压一般正常多显示到460,使用0-20m变送器一切正常,但是我也不能更换几十个变送器,而原来组态显示能差不多正常怀疑是在软件上做了更改,WINCC的直接显示,就露出这个问题,有谁明白怎么更改程序的,贴上那段语句,MOVB IB0,VB39
MOVW AIW0,VW12
DIV +333,VD10
MOVW AIW2,VW16
DIV +71 ,VD14
MOVW AIW4,VW20
DIV +256 ,VD18
-I +75VW20
回复: 根据你画出的程序,知PLC是S7-200,所用模块为EM235,原有模拟量变送器用的4-20MA的不用换,仍用,只是你编程时用的转换公式不对,你是按0~20ma对应被测量0~最大值,而变送器的输出4~20 ma 对应被测量值0~最大值。应按下面转换公式编程求被测量就行
以你说的电压无输入时显示90V,就是原有模拟量变送器在被测电压=0时输出的电流(4ma),你是按过0 的直线方程计算的: 电压最大值应=450V,对应数字量为32000,直线斜率K=32000÷450=71,故输入4ma 时其数字量=6400,计算电压值=6400÷71=90V.(即你的程序第三条: MOVW AIW2,VW16 DIV +71 ,VD14)
你按上面的公式重新编程就不会产生显示错误:4ma时数字量AIW0=6400,带入公式,所求量程值(电压)=0.
又问: ……这个数据我早就算过,程序不是我设计,我是刚刚入行,我是希望提供如何在语句编程把这些计算加进去,梯型图就免了,这个完整程序是语句表的而且是不能转成梯型图的,如果你会编程帮我写几句语句,非常感谢
再回复:今日才看此回复贴,对你提出的要求,用语句表进行编程,见下表:
TITLE=子程序注释
Network 1 // 实数运算
// VD100 :AIW2 VD104:最大量程(如 电压:450.0V) VD112:中间运算数 VD108:求出的量程值
LD SM0.0
MOVR VD100, VD112
-R 6400.0, VD112
*R VD104, VD112
MOVR VD112, VD108
/R 25600.0, VD108
这是用实数运算,也可用整数运算,用哪种运算取决你的计算精度要求。你可以用此程序代替原程序,测测看!
用这段程序:
LD SM0.0
ITD AIW2, VD100 //将整数AIW2转换为双整数VD100
DTR VD100, VD112 //将双整数VD100转换为实数VD112
-R 6400.0, VD112 // VD112 - 6400.0-->VD112
*R 450.0, VD112 // VD112*450.0 -->VD112
MOVR VD112, VD14 // VD112 -->VD14
/R 25600.0, VD14 // VD14 / 25600.0-->VD14
代替你原有的这段程序: MOVW AIW2,VW16
DIV +71 ,VD14 // AIW2 / 71-->VD14 (求电压)
三、求助帖:正负跳转的问题
不是很明白正负跳转时怎么执行的,看了书上说的是正跳转是没检测到一次输入的能流由无到有(0~1)的正跳变,让能流接通一个扫描周期
太专业啊,不明白…… 借用帖子上的一张图,求说明,白话一点,谢谢!
回复:此程序是一个双稳态电路程序,即每按一下按钮(I0.0=1),其输出Q0.0将改变一次状态(如原Q0.0=0,按钮按下,使Q0.0由0↑1,如原Q0.0=1,按钮按下,使Q0.0由1↓0)。
按钮按下使I0.0由0↑1,这由0↑1瞬间即I0.0=1的前沿(又叫上升沿),它只存在发生上跳的这一扫描周期,下一个扫描周期它将不存在,见网络1,I0.0=1的前沿输出给M0.0,使M0.0=1,当下一个扫描周期到来,由于前沿不存在,故使M0.0=0,即M0.0=1也是只存在一个扫描周期。见下波形图:
程序动作分析:未按按钮前其Q0.0=0、M0.0=1、M0.1=0。
第1次按下按钮,使I0.0=1,其前沿输送给M0.0(见网络1),使M0.0=1,进入网络2,由于Q0.0=0,故不执行网络2,进入网络3:由于此时M0.1=0,M0.0=1,故使Q0.0=1。下一扫描到来,扫到网络1,由于M0.0=1的前沿已不存在,使M0.0=0,进入网络2,由于M0.0=0,故M0.1仍=0,进入网络3,此时,由于Q0.0=1,M0.1=0,M0.1的常闭触点闭合,使其输出Q0.0仍保持=1不变。之后只要不再按钮,以后的各个扫描周期都不会改变Q0.0=1的输出状态。
第2次按下按钮,使I0.0=1,其前沿输送给M0.0(见网络1),使M0.0=1,进入网络2,由于Q0.0=1,故使M0.1=1,进入网络3:由于此时M0.1=1,其常闭触点断开,故使Q0.0=0。以后的各个扫描周期,只要不再按按钮,其Q0.0=0、M0.0=1、M0.1=0的状态保持不变。即恢复启始状态。
如再按按钮,将重复第1次按钮动作。。。
四、求助帖:各位朋友,大家好,今天想请教大家一个问题
就是我用一个不带自锁的按钮控制一个灯,按一下灯亮,再按一下灯灭,如此反复
我只是知道大概的思路是用计数器,当计数器数值为1时灯亮,计数器数值为2时灯灭,头脑很模糊
具体的我写不出,哪位要是会的话,希望能够帮我写一下,在这里先谢谢各位了!
楼主:用计数器的方法编程实现“按一下灯亮,再按一下灯灭,如此反复”的梯形图如下:
程序讲解:1、MB10的值均以二进制数存入,当MB10的值为奇数时其最低位M10.0=1,而MB10的值为偶数时其最低位M10.0=0 。 2、奇数与偶数彼此是相间的,即奇数的前后相邻数是偶数,偶数的前后相邻数是奇数,上述二点就是用计数器的方法编程实现“按一下灯亮,再按一下灯灭,如此反复”的依据:当MB10=0000_0000时,其M10.0=0,输出Q0.0=0,(即灯灭,见网络2),按一下按钮(I0.0),I0.0=1的前沿使MB10加1,使MB10=0000_0001,其M10.0=1,其输出Q0.0=1,(即灯亮,见网络2),再按一下按钮,I0.0=1的前沿使MB10加1,使MB10=0000_0010,其M10.0=0,其输出Q0.0=0(即灯灭,见网络2)。。。。以此类推。
本文到此结束,谢谢大家!