以下是引用miss_cloudy在2017/9/2 23:37:18的发言:
请教一下各位:
在三菱FX3U结构化编程中,我需要使用定时器,但出现如下问题:
1、使用TON指令时,定时时间按T#20S的格式时单位是秒,但如果我使用单位是100ms,10ms时格式应该是怎样写的?
另外,如果我要把定时时间在触摸屏上进行设置请问应该选什么数据类型呢?我试过用mov指令将T#20S赋值给
D0,但好像数据格式不兼容。
2、使用out_t指令时,我已把ss标签设置为time格式为何会报数据类型错?当我把ss改为TC0时便不会报错,难道是
这条指令不兼容time格式的标签?应该设置什么样的标签才正确?
1、小于秒的请这样输入:T#200MS,你可以对Time数据类型这样输入:T#1H20M20S100MS,这样你可以获得1小时20分20秒100毫秒的定时值。Time类型实质上就是一个无符号的32位数据值,一些厂商会将其定义成UDINT类型,如果你的触摸屏支持Time类型,你可以直接使用,例如欧美系的触摸屏会支持,如果你的触摸屏不支持Time类型,那么你可以使用一个32位长度的无符号整形来表示,例如日系厂商,你不能直接将TIME类型输入到D0,但是你可以这样:
DMOV K20000 D0,这样D0,D1组成的32位寄存器中将保留20S的数据值。
2、因为Tcoil结点并不是Time数据类型,其表示为TIMER,也就是定时器编号,在三菱中,为了兼容早期的编程方式,因此保留了OUT_T指令,所以你必须使用TCx的方式来输入。
我给你编程中的建议是:
1、既然使用了结构化编程方式,请使用标签名来定义所有的变量,不要使用地址,标签混合方式,这样做的好处在于:
A、全标签的方式下,内部变量的地址赋予是由编译器来完成的,即使别人上载,不含有源代码信息的话,地址是随机的,这样提高了程序的安全保障。
B、全标签编程使得软硬件进行的隔离,你无需去考虑硬件上的地址分配,可以更专注于你的逻辑方面的程序设计。
2、在使用某些指令时,请不要混合使用指令,这样不利于程序的移植,例如,既然用了IEC定时器,为何还要去考虑使用OUT_T这种为了兼容早期编程的指令呢?
Good Luck~