关于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的寻址原则。