quote:以下是引用重新激活在2015-01-21 21:23:40的发言:首先阐明下,对于用指针寻址我是个小白,所以希望各位大侠帮帮啊。
在FC里面编了一个很简单的例子,就是实现一个简单的双整数加法运算,例子详见下图。

自己在保存编译的时候,没有报错,但是在利用PLCSIM进行仿真的时候,只要是给INO和IN1赋值就报错。。。。。为什么啊
IN0和IN1定义的都是DWORD数据类型,OUT0定义的是DINT,TEMP0和TEMP1定义的是DWORD数据类型
很明显2个问题
1:对非BIT的内存进行寻址,指针必须必须是8的整数倍。
打个比方MD[8],并不是代表MD8,而MD1,MD[64],才是代表MD8。而MD[9]就更是错误了,它实际上是指向了M1.1,300 400实际地址和指针地址之间的换算关系很简单。比如Mx.y =M[POINTER],那么,POINTER=x*8+y.所以,M1.1=M[1*8+1]=M[9],而MD9=M[8*9+0]=M[72]网上搜索下,S7 300/400间接寻址 看看,了解下指针结构。
第二,在使用真正的PLC时,需要注意M区的大小,每个CPU的M区大小是不一样的,比如你的IN0是8000,那么MD[TEMP0],就是MD1000,而大多数CPU的M区只有512或者更小的256,所以在编程的时候,要注意程序的可移植性和通用性。