对网友求助问题的几个回帖展示之四十六
本文6例都是网上的求助帖,涉及PLC编程及电工理论与计算等问题,现整理展示给大家,供大家分析讨论。如有不妥之处,请给予指正,本人深表感谢!
求助帖一、新手,请问怎么把处存器中的数分开
如VB内装的23十进制,怎么把2和3分开,分别装把别的VB中去。VB内数是时时变化的2位数温度值。谢谢。
回复:可以这样编程:将装有23的存储器(如 VB100)先转换为字整数(VW101),再用 I_BCD 指令将字整数(VW101)转换为BCD码,则字节VB102的数值就为BCD码的十进制数:如VB100=23整数,VB102的高位4数=0010,VB102的低位4数=0011
又问:我还是没看懂,哪怎么把这高低4位放到别的VB中去呢
再答复:考虑你要求的“VB内数是时时变化的2位数温度值”,故将转换为BCD码的数据放在另一存储区,这样,当原VB值改变时,另一存储区的数码对应转换的BCD码也时时随之变化。
如将转换为BCD码仍放在原 VB 里,就会使VB内的数值发生混乱:比如温度=23度的值送入VB100内,其送入的整数“23”在VB100的值=0001_0111,(即二进制数形式),当程序执行一次将VB100的值进行I_BCD 转换转,再存入VB100,此时转换指后的VB00=0010_0011(即BCD码的“23”),当PLC下一个循环扫描又执行I_BCD指令时,就会将 0010_0011 误认为整数(即二进制数)再一次转换为BCD码,这种其值变为011_0101,即BCD吗"35"。当再下一次扫描又执行I_BCD指令时,又会将“011_0101”转换为BCD码,即:0101_0011((即BCD码的“53”)……即程序循环扫描,虽然温度=23不变,其VB100的值将不停地改变。这就是为什么VB100的值经BCD码转换后不能放回原存储器的原因。
二、求助帖:灯泡控制程序20个灯每个灯亮100ms 熄60s 循环点亮,循环工作,有没有很简单的程序,不需要太多时间继电器的
回复:用S7-200编写一段程序,供参考:
程序说明:
1、为简化程序,只选用一个双字左移指令,来左移20个位变量,实用MD0作为20个灯存储区,第一个灯的位变量不取M0.0,而取M2.4,第二个为M2.5,第3个位M2.6……依次上移,直到M0.7为第20个灯。
2、减小使用定时器,本程序只用了2个定时器T101与T102,组成周期为0.1+60秒的振荡器(即T101定时时间位100毫秒,T102定时为60秒),用T102=1的前沿左移一位双字存储器MD0,实现每隔60秒,使MD0左移一位,实现20个指示灯自动循环闪亮的控制。
其动作过程是:当按一下启动按钮I0.0,使M2.4=1、M10.0=1,M10.0=1的前沿将MD0àQD0,此时因M2.4=1传递给Q2.4,使Q2.4的指示灯亮,即第一个灯泡亮。M10.0=1使T101得电延时,延时100mS。T101动作,其T101=1使QD0=0(即第一个灯灭只亮100MS),T101=1又使T102得电开始延时,延时60秒,T102动作,T102=1,将MD0 左移一位,且将MD0àQD0,即使下一个灯亮。
此时Q2.5=1.即第二个灯亮,同时判断移位后的MD0等不等于0,如=0,说明MD0已左移20位,令M10.1=1,程序进入第二次从头循环闪亮。
三、求助帖:这样的编程问题,您碰到过吗?
现场电表实时传送耗电总量,如何实时计算出前一小时的耗电量?
回复:选用一字存储器MW0作采集数据区,MW2为秒脉冲计数器,MW4为前一小时耗电量存数区。按下启动按钮,使MW0=0、MW2=0,且使M10.0=1,MW2开始秒计时,当计满3600秒,即1小时时,立即读取电表的实时传送耗电总量VW100,且用VW100->MW0,MW0即为前一小时的耗电量。同时将M10.1=1、M10.0=0,M10.0=0,程序不再做MW2的秒计时计数,M10.1=1,将每隔1秒读取依次电表传来数据VW100,并用VW100-MW0->MW4,即求出此时刻的前一小时的耗电量,随后将VW100->MW0,为下一秒求前一小时的耗电量做准备。这样,每隔1秒显示一次此时刻的前一小时的耗电量值。具体程序见下梯形图:
下面程序是时时读取前一小时的耗电量:
四、求助帖:模拟量转换的题看不懂请高手解答
压力变送器的量程为0-10Mpa,输出信号为4-20mA,模拟量输入模块的量程为4-20mA,转换后的数字量为0-27648.
设转换后得到的数字为N,试求以kPa为单位的压力值。
解:0-10Mpa(0-10000kPa)对应于转换后的数字0-27648,转换公式为P=10000*N/27648(kPa)
注意在运算时一定要先乘后除,否则可能会损失原始数据的精度.
请问下这个N怎么来的,请说出过程,本人刚接触这块没多久,不知道这个N是怎么转换来的,请各位指教
回复“楼主说的“模拟量输入模块的量程为4-20mA,转换后的数字量为0-27648”其输入模拟量 Ix与模块转换为数字量 Nx 的关系式如下图:
图中M点为输入4mA时的坐标点,其对应转换的数字量 N=0,A点为输入20mA时的坐标点,其对应转换的数字量 N=27648,a点为输入某电流=Ix时的坐标点,其对应转换的数字量为Nx
∵△ABM ∽△abM 故可知:AB/ab=BM/bM 即:27648/Nx=(20-4)/(Ix-4)
整理得:Nx=27648×(Ix-4)/16 ....(1)
模块就是按式(1)将外输入的电流量Ix(Ix=4~20mA),自动转换为对应的数字量Nx的。
五、求助帖:请教两种电流互感器连接电流表的区别
这两种电流互感器接安培表的方法有何区别
回复:第一种接线:左侧电流表测得是A相电流,中间电流表测得是C相电流,右侧电流表测得是A相与B相的电流的向量和电流值。在负载对称的三相电,其三相电的和电流(即零线电流)=0,故A相与C相矢量和电流在数值上与B相电流相等,相位相反(IA+IC=-IB)。由于电流表只显示电流值,故可以用A相与C相的矢量和电流值来代表B相电流值。此种方法优点可节省一个电流互感器。缺点当三相负载不平衡时,其三相电的和电流(零线电流 IN)≠0,此时用A相与C相的矢量和电流值来代表B相电流值就不准确了,因为此时它包含零线电流与B相电流的矢量差(IA+IC=IN-IB)。
第二种接线:左侧电流表测得是A相电流,中间电流表测得是B相电流,右侧电流表测得是C相电流,即每一相都有自己的电流互感器与电流表进行测量,即三块电流表测的电流是三相电的真实电流值,故三相负载是否平衡都不会影响各电流表的测量准确性。
六、求助帖:关于0和1的问题
各位大侠,我是新手想请教下在PLC中,LD指令和LOADNOT指令的0和1分别表示什么意思啊
回复: 0与1对PLC的位变量来讲,表示二种逻辑状态。位变量相当是一个开关,其输出只有2种状态:断开与闭合。0表示位变量开关断开,输出为逻辑0(即输出0V电位)。1表示位变量开关闭合,输出为逻辑1(对正逻辑输出高电位,如输出+24V,对负逻辑输出低电位,如输出-24V)。
本文到此结束。谢谢大家!