签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
关于300、400的寻址验证引出的问题
昨天在“找答案”栏目中,看到这样这个问题,是求助西门子300寻址的含义,问题贴链接:
http://www.ad.siemens.com.cn/service/answer/solved_243572_1077.html
程序:
OPN DB 130
A DBX [MD 1300]
这段程序不完整这里暂时不做解释,在下面有说明,主要来说明寻址方式。
而网友一再确认这个DBX [MD 1300] = M1308.0,我感觉这个理解存在问题,首先MD1300没有在调用前赋值(没有看到赋值程序段),那么,假设MD1300 = 0,根据:
我认为如果MD130没有提前“赋值”,系统默认为0,这个地址应该指向DB130.DBX0.0这个地址,为确认我这个想法,我按网友的意思写了他描述的那段程序,并模拟仿真:
我在仿真器上使能DB130.DBX0.0,监控程序段STA值为1,说明在没有赋值相当于MD1300 = 0,这个地址应该是寻址到DB130.DBX0.0,为说明这个问题,我给MD1300赋值为1,那么,寻址地址应该指向DB130.DBX0.1,图示:
同样,我再次给MD1300 = L#10,那么,寻址地址应该指向的是DB130.DBX1.2,图示:
本来此问题已经说明到此,应该是说清楚了。但是,我在继续验证其它程序段时,发现一个另外的问题,图示:
当我取消DB130.DBX1.2的位使能,那么,我网络段3的简单程序,为什么没有了正常输出?声明下面地址是没有重复使用的。
A M 0.0
= M 0.1
监控的现象是,当DB130.DBX1.2 = 0,M0.0 = 1,按理M0.1 = 1,开始监控结果:
当,我给DB130.DBX1.2使能为1时,网络3使能输出正常。关闭DB130.DBX1.2 CPU并没有什么系统报警,图示:
诊断缓冲区没有这方面的报警信息。
我将网络2的那段程序补充成为完整一个网络程序,网络3程序可以正常,图示:
看来,STL编程语言要求虽然是低,但是,基本的程序完整性还是需要确保的,不然,出现意想不到的问题自己还不一定能够搞明白,好在我验证的程序段例子,程序做的非常简单、易懂,看的清楚明白。
希望那位网友看到此贴,也可以理解、参考300、400的寻址原则。
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1654995&b_id=4&s_id=26&pno=0
这说明原帖求助者没有理解各变量的物理含义,以及与相关指令操作后的物理效果,即原理不懂不同,程序计算后的结果自然不知道飞到哪里去了。所以,知其道才能用其妙。
东方大侠:
您说的没有错,那是肯定的,如果知道用法,也不会再提问了的。
很多次类似的问题,实际上都拿手头上很好用的工具不用,非得拿来提问(没有说提问不好的意思),这个工具就是仿真软件的应用,几分钟能够理解解决的问题,完全可以通过仿真验证问题的,就拿这个贴子说话,在验证寻址问题的同时,自己还找到下面的问题所在,验证问题的同时自己对寻址的应用更加提高了认识。
从头到尾把楼主的帖子看了一遍,感觉楼主勤于动手、善于思考,是一个很好的习惯,为你点赞!楼主通过模拟实验,获得了存储器间接寻址时地址的编址规律,也通过简单的位逻辑操作发现了一些问题。STL语言对语法检查力度偏低,所以造就其编程的灵活性,但同时也带来了容易出错的风险。
对STL有一些自己的体会:
一、STL在位逻辑操作时:需要理解程序状态字中 或位(OR)、 状态(STA)、逻辑结果(RLO)、首次扫描(/FC)等的概念;以及位逻辑操作时对它们的影响。在一段新的位逻辑操作前,尽量加条CLR指令,把当前的RLO位复位,然后再开始新的位逻辑操作。这样可以避免前面的RLO带入新的位逻辑操作中。比如楼主做的实验中,前面加条CLR指令,就可以得到正确的操作结果了:
CLR
二、STL在做数学运算时:一定要清楚被操作数的数据类型,理解装载操作(L)数据在哪个累加器中,以及数据在各累加器中移动过程,清楚数据的来龙去脉,当然最后选用正确的运算指令,特别是在做整数运算时还要考虑结果是否有溢出的可能。
三、STL在间接寻址时:需要理解存储器间接寻址和寄存器间接寻址的概念,清楚16位指针和32位指针编址原则,以及位地址字节地址的处理方法,等等···
STL 是一门让人爱恨交加的语言,功能强大,但又难以驾驭。共勉、共进···
STL是一门学问,因为10多年前,工厂需要有维护804D系统的要求,而类似的系统中大部分程序就是用STL编辑的,没有退路,只能学一些。
现在,编程语言又有好一些,如SCL,也没有办法,还是只能学一些。
学习了,谢谢分享。
实践检验真理
这个原来是这样。
地址寻址的问题一直以来都是中国工程师一般水平的话,都搞不明白的地方,因为大部分中国工程师都图省事,不深究其中的原理,所以,我建议还是按照西门子编程手册里的介绍一步一步来编程。。。
穆工说的对,一味的回避解决不了根本问题,只能是去学习,去掌握。
多看些帖子 有时感觉瞬间解惑 学习了
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录