各Galil运动控制爱好者:
在编写Galil指令程序时,变量可无需定义直接赋值使用,如cat=2. 但事先没有定义cat是整数还是字符型,如果到后面我又赋值cat=3.4 则这个变量cat究竟在内存中是如何分配的,是否会带来安全性问题。 实际上,我在某个项目中就遇到了问题,程序开始设置flag=0, 当某触发条件满足时flag=1,再无其它让flag=0的语句。 运行时上位机通过GalilController.Commandvalue("MG flag")不断查询flag状态。 问题来了:系统运行一段时间后,根本没有触发flag=1的事件,但却查询到flag=1。再打开galiltools 查询flag状态,却发现flag=0 (怎么变回去的,直到现在还没有搞清楚).
我怀疑: 是否是运动卡的问题,变量flag自动变了数据? 还可能是运行中受了电气干扰,使得变量发生脉冲式干扰变化? 还是未经定义的变量直接赋值带来的问题?
希望跟Galil高手一切研究一下这个问题....
感谢刘工的回答。刘工与其它所有人一样,不认为电气干扰引起变量跳变。事实上,我描述的问题确实发生了,有一天频繁发生了布尔型flag数据从0到1的跳变,非常奇怪,以致系统频繁暂停。后来我就怀疑了这个内存变量的问题,解决方案是用I/O变量代替这个内存变量flag, 如flag=1 用SB 25代替, flag=0 用CB 25代替, 问题得到解决。 I/O变量的状态不太容易被干扰,我认为是这样。
我制作了两台机器,其中一台没有问题,另外一台就经常出现这个flag变量 跳变问题。 如果能像C语言定义变量类型就好了,如True/False....