回复:我要不耻下问!!!!

Letham

西门子1847工业学习平台

  • 帖子

    2038
  • 精华

    43
  • 被关注

    360

论坛等级:至圣

注册时间:2006-04-15

白金 白金 如何晋级?

发布于 2015-01-24 11:38:21

11楼

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,所以在编程的时候,要注意程序的可移植性和通用性。
人生就像一场旅行!
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54710条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。