西门子300、400寻址问题的讨论 点击:310 | 回复:7



绿缘

    
  • 精华:2帖
  • 求助:0帖
  • 帖子:25帖 | 125回
  • 年度积分:0
  • 历史总积分:576
  • 注册:2005年4月04日
发表于:2010-11-03 11:07:24
楼主

大家好,本人正在着手学习基于CP340来编写MODBUS通讯程序,看了很多资料,发现在编程的时候对寻址要很熟悉,找了相关资料,有一篇是西门子提供的“S7-300和S7-400寻址”,阅读后发表一下个人的看法,请大家一块学习与讨论。

先来看下这段程序,

 

这个程序不难,但小弟有一点不同意里面的,就是在

L    320                  //320转换指针为P#40.0并装载到MD28中。
T    MD 28

我感觉320转换指针应该是P#100.0,320=0011  0010 0000=100.0呀,个人愚见,欢迎大家一起讨论。

第二个问题:

个人疑问:

1、

L    MD 4     // 将地址指针加2(每个相邻的字地址相差2)。
L    P#2.0
+D
T    MD 4
L    MW 100 //次数减1,跳回next,如果MW100等于0,跳
LOOP NEXT //出循环操作LOOP指令,LOOP指令固定格式。

问题:如何能体现“次数减1,跳回next,如果MW100等于0”我感觉很奇怪,MD4里字的地址加2后,个人认为程序应该是这样

L   MD 4 // 将地址指针加2(每个相邻的字地址相差2)。
L   P#2.0
+D
T   MD 4
L   MW 100 //次数减1,跳回next,如果MW100等于0,跳
<D

JC NEXT

如果大家认为西门子里说的是对的,请给小弟讲明原因,在此拜谢,个人认为我修改后的应该可以体现循环的要求,请大家评下……

2、JCN m2 //的位置((地址值/P#2.0)+1)值存储于MD8中。
L MD 4
L P#2.0
/D
+ L#1
T MD 8
m2: NOP 0

m2是条空指令,这样编的意义是什么,小弟初学,谢谢指教。

 

 




yuanle

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 10208回
  • 年度积分:2747
  • 历史总积分:48332
  • 注册:2005年4月22日
发表于:2010-11-03 12:04:36
1楼
第一个问题是:320  当使用32位指针时,需要变成P#X.X 因此320右移3位,也就是除以8,因此得到40.0

第二个问题,您需要仔细阅读STL编程手册中关于LOOP指令章节。LOOP指令实现的Do……While的结构,当然,使用跳转指令一样可以实现这种结构,比如,在梯形图中并没有LOOP指令的使用,就是依靠跳转+比较指令实现。

第三个问题:空指令一般无什么用途,只是消耗一点CPU周期而已,常用于短暂延时。

Regards

学习siemens

  • 精华:23帖
  • 求助:347帖
  • 帖子:1611帖 | 22281回
  • 年度积分:37
  • 历史总积分:98482
  • 注册:2007年3月22日
发表于:2010-11-03 12:38:37
2楼
第一个问题是:简单理解就是320个点,,每个字8个点,也就是40个点啦!!!

绿缘

  • 精华:2帖
  • 求助:0帖
  • 帖子:25帖 | 125回
  • 年度积分:0
  • 历史总积分:576
  • 注册:2005年4月04日
发表于:2010-11-03 13:37:26
3楼

谢谢你们的指点,320我已经明白了,LOOP我也查看过了。希望大家对相关寻址的问题一起在此贴上讨论

 

绿缘

  • 精华:2帖
  • 求助:0帖
  • 帖子:25帖 | 125回
  • 年度积分:0
  • 历史总积分:576
  • 注册:2005年4月04日
发表于:2010-11-03 15:18:49
4楼

大家请看下面一段例程:

问题1:这是一个用ASCII编写RTU协议的一段程序,从站是根据主站发送的功能码来做响应执行的,为什么发送数据块的起始地址是2呢,而不是0。问题2MW400里面是不是就是10,我认为就是这个发送块的效验。问题

绿缘

  • 精华:2帖
  • 求助:0帖
  • 帖子:25帖 | 125回
  • 年度积分:0
  • 历史总积分:576
  • 注册:2005年4月04日
发表于:2010-11-03 15:27:34
5楼
这是一个用ASCII编写RTU协议的一段程序,从站是根据主站发送的功能码来做响应执行的,为什么发送数据块的起始地址是2呢,而不是0。问题2:MW400里面是不是就是10,我认为就是这个发送块的效验。问题

绿缘

  • 精华:2帖
  • 求助:0帖
  • 帖子:25帖 | 125回
  • 年度积分:0
  • 历史总积分:576
  • 注册:2005年4月04日
发表于:2010-11-03 15:28:26
6楼
问题1:这是一个用ASCII编写RTU协议的一段程序,从站是根据主站发送的功能码来做响应执行的,为什么发送数据块的起始地址是2呢,而不是0。问题2:MW400里面是不是就是10,我认为就是这个发送块的效验。问题3:CRC校验的长度怎么会在DB10.DBW里呢,请大家帮忙解释下。

ken1314

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 16回
  • 年度积分:0
  • 历史总积分:26
  • 注册:2009年8月30日
发表于:2010-11-08 15:10:59
7楼

初学看得不是很懂。请大家帮忙解释下。


热门招聘
  • 客服
  • 小程序
  • 公众号