发布于 2010-11-11 15:28:14
5楼
300的PLC有个极端可恶的问题,就是定时器的定时值,无法直接使用MW100这样的字来直接的“间接寻址”。经过反复实验,得到2种方式。
一、使用“库-Standard Library –System Function Blocks”SFB3、4、5。
无256个定时器的限制,可无限使用,但每个定时器需要使用一个DB块。使用时,一般命名“T1”的地方,要命名上DB1,输入为双字,且为TIME格式。TIME格式需要转换,但用MOVE MD10 MD20即可,MD20做为输入。但是如果用得多,得建非常多的DB块。
二、普通定时器
1.设输入为MW2(为秒),还要建一个DB块,内建T1(DINT)、T2(DINT)、T3(TIME)、T4(S5TIME)、T5(放常数1000)。
2.命令:
I_DI 单字转双字。
MUL_DI 双字乘法。更烦人的是,MUL_DI不支持常数或MW单字,所以做为乘数的单字,也非得先转成双字才行。太别扭了。
FC40 TIME格式转成S5TIME格式。这个好像只能在DB块里定义。用MW或MD,在符号表里定义,好像不行,真烦人!更烦人的是,这样转完,MW2中的十进制数,是ms,想要s,还得再想办法*1000才行。
3.程序:
I_DI MW2 DB1.T1 (T1=MW2) (赋值,且变成双字)
MOVE 1000 DB1.T5 (T5=1000)
MUL_DI DB1.T1 DB1.T5 DB1.T2 (T2=T1*1000)(s变成ms)
MOVE DB1.T2 DB1.T3 (T3=T2) (还不能直接乘完放进T3里)
FC40 DB1.T3 DB1.T4 (T4=T3) (TIME格式再转成S5TIME格式)
使用T时,输入值TV,可以直接用DB1.T4了。
譬如销金矿,金非销故有,虽复本来金,终以销成就,一成真金体,不重复为矿.