技术论坛

 应用探讨——西门子指针编程使用探讨

返回主题列表
作者 主题

总坛主
西门子官方工程师西门子官方工程师

经验值:23705
发帖数:3792
精华帖:8
楼主    2011-11-29 10:05:34
主题:应用探讨——西门子指针编程使用探讨
在对“Step7 各种编程语言对比及使用”进行一番深入探讨后,可能有的网友对指针编程还不太了解,下面我们就与大家再探讨一下“西门子指针编程使用”。
一个功能强大,自由性高的程序,很大部分体现在其灵活的指针运用上,通过西门子STL的指针编程可以实现很多复杂的任务,但是指针在使用上还是需要注意一些事情的,比如地址寄存器的内容被接口参数覆盖,多重背景FB的地址指针偏移,指针的指针(P##input_any)如何使用等,如何读懂指针程序,如何用好指针,如何避免指针程序出错需要工程师去注意。关于具体指针的介绍,大家可以参照下载中心的编程手册:
1、编号:F0215,S7?300和S7?400寻址
2、手册 "SIMATIC Programming with STEP 7 V5.5" 05/2010 第27.3.4章 参数类型
3、编号:1008,用于S7-300 和S7-400 的语句表(STL)编程
开设此话题,欢迎大家可以就以下几个点畅所欲言,发表自己的看法,共同提高。
1、阐述自己使用的指针的感受、分享经验及心得;
2、如何使用指针,以缩短程序开发周期,提高编程效率;
3、如何避免指针编程出错;
4、通用的指针编程的思路等等内容;

此次集中交流将持续至12月22日,其中所有精华帖作者将获得加倍精华奖励积分;最终所有有效留帖的网友将获得加倍发帖积分。更多积分带给您更多奖品兑换的自由。
对于有突出发言贡献的网友,还可以在当前的可兑换奖品中免费挑选200分(含)以下任一款奖品。
交流结束后也将专门整理重要内容,供广大网友分享参考。
预祝大家交流愉快,收获丰富!
Automann
至圣

经验值:18405
发帖数:6291
精华帖:137
9楼    2011-11-29 20:49:07
精华帖  主题:回复:应用探讨——西门子指针编程使用探讨
戏说存储器间接寻址
在指令中直接给出操作数(常数),称为立即寻址。在指令中给出操作数的地址(例如M5.2),称为直接寻址。
间接寻址在指令中给出的不是操作数的值或操作数的地址,而是给出一个被称为地址指针的存储单元的地址,地址指针里存放的是真正的操作数的地址。
地址指针就像收音机调台的指针,改变指针的位置,指针指向不同的电台。改变地址指针中的地址值,地址指针“指向”不同的地址。
再打一个比喻,邮递员的摩托车就好像一个地址指针。邮递员根据信封上的地址,将摩托车开到用户A的家门口,这个时候指针(摩托车)指向了这个地址,把信送给用户A,就好像将数据写入这个地址。送下一封信的时候,相当于修改了地址指针中的值,摩托车开到下一个用户的门口,地址指针指向了另外一个地址。
我们入住酒店的时候,在前台办完入住手续,酒店就会给我们一个房卡,房卡上面有房号,旅客根据房号使用宾馆的房间,每天每间房间可能住不同的旅客。在这里房卡就是指针,房间就是存储单元,旅客就是存储单元中存放的数据。
为什么需要间接寻址?间接寻址用来在程序运行期间,通过改变指针中地址的值,动态地修改指令中的地址。间接寻址常用于循环程序和查表程序。例如循环程序用来累加一片连续的存储区中的数值,每次循环累加一个数值。累加后修改地址指针的值,使它指向下一个存储单元,为下一次循环的累加运算做好准备。没有间接寻址,就不能编写循环程序。
追求完美
n次看你的背影
奇侠

经验值:7973
发帖数:2355
精华帖:73
60楼    2011-12-02 10:30:07
精华帖  主题:回复:应用探讨——西门子指针编程使用探讨
关于:“如何避免指针编程出错?”我也想说说我的感受和体会
1、需清楚指针的数据结构和特点,清楚位寻址、字节、字、双字寻址时指针增量的数值;
2、在使用指针时:一般多是先赋值(初始化地址寄存器),后使用;
3、在某些特定的指针寻址程序中,需要先装载上一次此程序执行的指针,离开这段程序时保存当前指针。也就是说在某些场合需要做好指针的保护!“跑马灯”程序就是一个很好的例子;
4、尽量使用常数指针加地址区域标示符来进行间接寻址,这样更容易理解;
5、用两个指针访问背景数据块、多重背景数据块时,最好将它们拷贝至L区,对此操作完成后,再将此拷贝至背景数据块、多重背景数据块,这样能避免接口参数发生错误;
个人观点,仅供参考!
佛对我说:“你的痛苦来自于你的欲望,没有欲望也就没有痛苦!”
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。