感觉你有概念性的错误。网络2是中断程序吧?
首先VD4488中如果是PLC的地址,那个数值是没有错误的,在PLC表示的绝对地址的表述是那样的。所以网络2中的比较指令是错误,比较指令错误的。如果需要,你比须这样试验一下:
MWD &VB4000 VD0
mwd &vb4198 vd4
运行后观察 VD0和VD4的值。不同类型的PLC可能数值也不相同,
我用的224XP,这分别是:134221728 和 134221926
你的指针赋值也有问题,建议你在VD4448中,放置偏移量。
然后这样
赋值指针:
MOVD &VB4000 ,AC1
ADD AC1,VD4488
保存数据及修正指针
MOVE 数据 *AC1
INC VD4488
INC VD4488
IF VD4488>100 than vd4488=0
中断返回
你的程序中,找不到指针移动的语句。或许你在中断以外移动了。(这不可能)
或许你认为那句是移动了,但是按照你程序的思想,你使用了>号,故移动指针指令是不执行的(实际因为概念性错误是永远执行的,指针数据因此在大约4秒后,遭到破坏)、而而指针初始化操作的地址,VD4488也写成了,VD488,所以,你的中断程序没有对指针进行任何操作。
这样程序很清晰,AC0中是数据,AC1是地址指针。VD4488中是偏移量
这样做还有个好处,特别是指针操作,使用累加器比使用内存来的快的多。毕竟你的程序使用了1毫秒中断,需要很高的处理速度,有可能会发上上个中断还没处理完,另个中断已经到来了,会发生中断队列溢出,、而而造成系统崩溃或采集数据失真。PLC的扫描周期通常在7毫秒左右,视程序大小,大的会长些,小的会短些。
你中断程序中竟然还要调用子程序,你应该把数据准备好,或者直接读取原始数据,分析与处理放在中断以外。
其实你完全没有必要使用1毫秒中断,触摸屏的显示与PLC中的数据通常不同步,长的能相差2秒以上呢。如果把中断调整到10或50毫秒,调试起来会很轻松。也没必要追求指令执行时间。
[ 此帖被醉湮邃虞在2009-07-17 13:04重新编辑 ]