spare1的地址类型不对,s5time的地址类型应该是个W类型的地址。。。
比如说在地址内定义的time类型数据,需要根据时基来转换为s5time类型的数据,传送到MW或者DBW里面,然后再将这个DBW类型的地址传送给定时器。
时基的转化可以使用系统库功能的FC40,也能自己做。在这里为了体会下S5TIME
类型的数据,自己做的方式说一下
S5TIME是个第一位表示时基的BCD码,取值范围是W#16#0000到W#16#3999,前面的0\1\2\3表示时基,后面的0-999表示时基的数量,也就是前面的0代表10ms的时基,1代表100ms的时基,而2代表1s的时基,3代表10S的时基。0-999就是时基的倍数,所以,S5TIME的最大表示时间为9990秒,也就是2小时46分30秒
但是由于你使用的是TIME类型的时间,TIME类型的编码方式是一毫秒为单位的DINT类型数据,在不涉及时基切换的情况下,可以直接处理为S5TIME类型数据。具体的方式为。。。
假设你的time类型在DB1中,用全局变量编程如下
OPN DB1
L DBD0
L 10
/D
ITB
L w16#0
OW
T MW40
这时候你就可以直接用mw40里面的数据直接赋值给S_ODT了
OW这里是加入时基,对于最高精度10MS来说,其实是可以不需要OW的,当然,为了考虑上位的安全,你在上位应该设置输入范围为10-9990毫秒,因为第一时基的表示范围也就是从10MS-9990MS应该够你用了。
S_ODT接受的数据类型为S5TIME类型,如果你要使用TIME类型的话,你或在PLC中加入库功能FC40,用于将TIME类型转换为S5Time类型,或使用IEC定时器SFB3,SFB4,SFB5,IEC定时器接受的数据类型为TIME类型。