技术论坛

关于300、400的寻址验证引出的问题

作者 主题
至圣

经验值: 72009
发帖数: 8043
精华帖: 145
主题:【分享】关于300、400的寻址验证引出的问题
推荐帖


只看楼主 楼主 2020-12-03 09:46:21

关于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,根据:

      OPN   DB     130

      A     DBX [MD 1300]

我认为如果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

版主

经验值: 16184
发帖数: 6609
精华帖: 50
回复:关于300、400的寻址验证引出的问题


只看楼主 1楼 2020-12-03 11:41:19

这说明原帖求助者没有理解各变量的物理含义,以及与相关指令操作后的物理效果,即原理不懂不同,程序计算后的结果自然不知道飞到哪里去了。所以,知其道才能用其妙。


知其道,用其妙!
以下网友喜欢您的帖子:

  
至圣

经验值: 72009
发帖数: 8043
精华帖: 145
回复:关于300、400的寻址验证引出的问题


只看楼主 楼主 2楼 2020-12-03 13:17:46
以下是引用东方红一红在2020-12-03 11:41:19的发言 >1楼

这说明原帖求助者没有理解各变量的物理含义,以及与相关指令操作后的物理效果,即原理不懂不同,程序计算后的结果自然不知道飞到哪里去了。所以,知其道才能用其妙。

东方大侠:

  您说的没有错,那是肯定的,如果知道用法,也不会再提问了的。

很多次类似的问题,实际上都拿手头上很好用的工具不用,非得拿来提问(没有说提问不好的意思),这个工具就是仿真软件的应用,几分钟能够理解解决的问题,完全可以通过仿真验证问题的,就拿这个贴子说话,在验证寻址问题的同时,自己还找到下面的问题所在,验证问题的同时自己对寻址的应用更加提高了认识。


 
以下网友喜欢您的帖子:

  
奇侠

经验值: 7973
发帖数: 2355
精华帖: 73
回复:关于300、400的寻址验证引出的问题


只看楼主 3楼 2020-12-03 16:02:01

从头到尾把楼主的帖子看了一遍,感觉楼主勤于动手、善于思考,是一个很好的习惯,为你点赞!楼主通过模拟实验,获得了存储器间接寻址时地址的编址规律,也通过简单的位逻辑操作发现了一些问题。STL语言对语法检查力度偏低,所以造就其编程的灵活性,但同时也带来了容易出错的风险。

对STL有一些自己的体会:

一、STL在位逻辑操作时:需要理解程序状态字中  或位(OR)、 状态(STA)、逻辑结果(RLO)、首次扫描(/FC)等的概念;以及位逻辑操作时对它们的影响。在一段新的位逻辑操作前,尽量加条CLR指令,把当前的RLO位复位,然后再开始新的位逻辑操作。这样可以避免前面的RLO带入新的位逻辑操作中。比如楼主做的实验中,前面加条CLR指令,就可以得到正确的操作结果了:

      CLR

      A     M      0.0

      =     M      0.1

二、STL在做数学运算时:一定要清楚被操作数的数据类型,理解装载操作(L)数据在哪个累加器中,以及数据在各累加器中移动过程,清楚数据的来龙去脉,当然最后选用正确的运算指令,特别是在做整数运算时还要考虑结果是否有溢出的可能。

三、STL在间接寻址时:需要理解存储器间接寻址和寄存器间接寻址的概念,清楚16位指针和32位指针编址原则,以及位地址字节地址的处理方法,等等···

STL 是一门让人爱恨交加的语言,功能强大,但又难以驾驭。共勉、共进···


佛对我说:“你的痛苦来自于你的欲望,没有欲望也就没有痛苦!”
以下网友喜欢您的帖子:

  
至圣

经验值: 72009
发帖数: 8043
精华帖: 145
回复:关于300、400的寻址验证引出的问题


只看楼主 楼主 4楼 2020-12-03 16:22:08

STL是一门学问,因为10多年前,工厂需要有维护804D系统的要求,而类似的系统中大部分程序就是用STL编辑的,没有退路,只能学一些。

现在,编程语言又有好一些,如SCL,也没有办法,还是只能学一些。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 10575
发帖数: 1794
精华帖: 0
回复:关于300、400的寻址验证引出的问题


只看楼主 5楼 2020-12-03 18:09:55


学习了,谢谢分享。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 18401
发帖数: 2409
精华帖: 1
回复:关于300、400的寻址验证引出的问题


只看楼主 6楼 2020-12-03 20:49:07

实践检验真理


 
以下网友喜欢您的帖子:

  
至圣

经验值: 18884
发帖数: 2107
精华帖: 0
回复:关于300、400的寻址验证引出的问题


只看楼主 7楼 2020-12-03 21:01:36

这个原来是这样。


 
以下网友喜欢您的帖子:

  
奇侠

经验值: 7200
发帖数: 1396
精华帖: 1
回复:关于300、400的寻址验证引出的问题


只看楼主 8楼 2020-12-04 10:44:47

地址寻址的问题一直以来都是中国工程师一般水平的话,都搞不明白的地方,因为大部分中国工程师都图省事,不深究其中的原理,所以,我建议还是按照西门子编程手册里的介绍一步一步来编程。。。


科技在于不断探索
以下网友喜欢您的帖子:

  
至圣

经验值: 72009
发帖数: 8043
精华帖: 145
回复:关于300、400的寻址验证引出的问题


只看楼主 楼主 9楼 2020-12-04 13:03:16
以下是引用大连穆工在2020-12-04 10:44:47的发言 >8楼

地址寻址的问题一直以来都是中国工程师一般水平的话,都搞不明白的地方,因为大部分中国工程师都图省事,不深究其中的原理,所以,我建议还是按照西门子编程手册里的介绍一步一步来编程。。。

穆工说的对,一味的回避解决不了根本问题,只能是去学习,去掌握。


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2860
发帖数: 233
精华帖: 0
回复:关于300、400的寻址验证引出的问题


只看楼主 10楼 2020-12-14 17:37:49

多看些帖子  有时感觉瞬间解惑  学习了


挨批才会赢
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
关于300、400的寻址验证引出的问题
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。