用PLC进行数/模输出时,如果输出要求是在一定的时间内达到一定的值,而这两个值是由机器的操作员通过触摸屏来输入的,而操作员是不懂程序的,这就要求程序做除法运算,而机器操作员也不管有没有余数。我问:当余数比较大时,怎样处理?〈如要求在60秒,数字量从0达到89,每秒为1,余29。如用秒信号作ADD累加,每秒加1,这显然在60秒结束时达不到要求。若相差3或4也就算了〉。
PLC类型任意选择,回答的最好最完全的,原创最多,阐述最详细者获一等奖!
工控PLC擂台每周一期,本期待88期结束一周后结贴。奖项设置:一等奖1名:30~50MP,二等奖3名:10MP,三等奖10名:100积分。
MP介绍:gongkongMP即工控币,是中国工控网的用户积分与回馈系统的一个网络虚拟计价单位,类似于大家熟悉的QB,1个MP=1元人民币。
MP有什么用?兑换服务:以1个MP=1元来置换中国工控网的相关服务。 兑换现金:非积分获得的MP可兑换等值现金(满100MP后、用户可通过用户管理后台申请兑换)。
这道题和工控PLC擂台88期没有多大的区别。
对于余数的处理,我的答案里也提到了。分为N次输出,余数M必然小于N,在前M次输出时,每次多输出1即可。这样,余数有多少,就分多少次补齐了,输出一个不差,不管余数大小。程序里有2个计数器,第一个是就是分N次的计数器,第二个就是余数M次计数器。计数器的触发条件用定时器来触发,每次增加固定的数值,直到计数器到了N次。同时对余数M次计数器计数,如果计数器没有到,则输出值再加1。如果余数次计数器到了,则不执行加1指令了。
http://bbs.gongkong.com/Details/201203/2012031119553900001-1.shtml
这个题目实际严格用PLC来做,只能实现一个台阶输出。
1:就看如何看待这个线性变化的精度。
2:爬升的时间不能太快。
本题中,必须对输出做数字化处理,即将输出分为N次输出,每次输出的变化数一样。假设爬升时间为T,T变量放在寄存器40100中。分为N份输出,N变量放在寄存器40101中。PLC输出0-5V对应的数值为0~32767的变化范围,对应模拟量DA输出寄存器为40001。本例程设定加速时间为30S,分1000次递增输出。
用毫秒定时器来触发,改变40001的数值。毫秒定时器的长度为 40200 =(T*1000)/N = ((40100)*1000)/40101 = 30*1000/1000=30毫秒,这个时间就不考虑余数的问题了。
每次DA输出寄存器增加值为(40202) = 32767/N=32767/1000=32,余数为767。(40203)为整除之后的余数
有了这些铺垫,下面就是程序,以及仿真运行的结果,输出40001寄存器=32767丝毫不差,本程序需注意的关键是余数的处理。不然会加不到最大值。
本程序先设定爬升时间为30S,分1000次直线输出(可任意修改)。每次定时器到的时候,先加上递增的幅度,如果余数计数器没有到,则再加上一个1。1000次到后,则不做加法了。
另外,题外可以用硬件的方式来实现,用一个电阻和大的电容,这样,直接输出一个最大的5V,然后由电阻和电容的数值,实现一个输出指数的爬升,估计比PLC实现的波形不会差,不过爬升时间越大,这个电容就要求越大,就越不现实了。
再贴张大一点图。
一、数学推导:如要求在M秒内,数字量由0到达N数,则N与M的关系为:
式中的 B=N-A M 即为余数,其 B < M 。令:C=M-B
二、模型的建立:
1、将N值除以M,其商送入A区,
2、将A乘以M,其积送入H区,
3、判断N - H >0,如N - H>0,则将其差值送入B区,将M-B值送入C区,转程序1运行。如N - H=0 转程序2运行。
4、程序1: 为有余数操作:每隔1秒将A+1值累加在数/模转换区(Q)且进行数模转换,共送B次,再每隔1秒将A值累加在数/模转换区(Q)且进行数模转换,共送C次结束。
5、程序2: 为无余数操作:每隔1秒将A值累加在数/模转换区(Q)且进行数模转换,共送B次结束。
三、流程图:
四、梯形图:
分析:
以楼主设置为例:时间为60,最终数字量为89,如果每秒+1,导致最后60秒时输出为60,分析其原因是由于plc在计算时只保留了整数部分,89/60=1.48333,每秒递增量为1
如果将其需求的最终数字量先放大10倍,则890/60=14.83333,根据plc计算每秒递增为14,然后计算结果再除以开始的放大倍数10作为最后输出结果,原理上则实际由原来的每秒递增量1变为了1.4,则计算结果的精度比原来增加了10倍
同理 将需求的最终数字量先放大100倍,则原理上则实际由原来的每秒递增量1变为了1.48,则计算结果的精度比原来增加了100倍,则数据分析如下:
程序如下:(采用施耐德M340)
程序中为仿真方便采用计数器数值作为其当前时间量,在实际应用中可通过采集标准时间,使输出更加平滑
如果放大倍数比较大的时候可能会造成在计算时数据溢出,故在程序中把单精度转换为了双精度,显得程序繁琐了些,但增加了程序的实用性和可行性。