jww
级别: 探索解密
精华主题: 0
发帖数量: 28 个
工控威望: 178 点
下载积分: 642 分
在线时间: 44(小时)
注册时间: 2008-12-21
最后登录: 2024-09-13
查看jww的 主题 / 回贴
456楼  发表于: 2009-12-18 09:50
新手请教:1. 可不可以用PROFIBUS线进行MPI通信(在两台S7 300之间)?
          2.我安装的STEP7 V5.4中文版软件编程窗口下左侧目录的“库”里文件不全,只有SMATIC-NET-CP文件,如何补全?
敬请高手指教。谢谢!
deanhao
级别: *
精华主题: * 篇
发帖数量: * 个
工控威望: * 点
下载积分: * 分
在线时间: (小时)
注册时间: *
最后登录: *
查看deanhao的 主题 / 回贴
457楼  发表于: 2009-12-18 22:23
引用
引用第517楼jww于2009-12-18 09:50发表的  :
新手请教:1. 可不可以用PROFIBUS线进行MPI通信(在两台S7 300之间)?
          2.我安装的STEP7 V5.4中文版软件编程窗口下左侧目录的“库”里文件不全,只有SMATIC-NET-CP文件,如何补全?
敬请高手指教。谢谢!

1,可以的。
2 找一找库文件,这个我倒是没有遇到过。
jww
级别: 探索解密
精华主题: 0
发帖数量: 28 个
工控威望: 178 点
下载积分: 642 分
在线时间: 44(小时)
注册时间: 2008-12-21
最后登录: 2024-09-13
查看jww的 主题 / 回贴
458楼  发表于: 2009-12-19 12:57
用PROFIBUS线进行MPI通信(在两台S7 300之间),是不是两端接上DP头,电阻都打在ON,然后按照MPI的编程操作就行了?我是这样进行的,但两台300 PLC不通讯错在哪里呢?请高手指教!
wwcwwc
级别: VIP会员

精华主题: 0
发帖数量: 3393 个
工控威望: 3189 点
下载积分: 70297 分
在线时间: 1602(小时)
注册时间: 2008-04-20
最后登录: 2024-09-21
查看wwcwwc的 主题 / 回贴
459楼  发表于: 2009-12-22 09:33
回519楼:请问你的硬件组态怎样?发几个图片你看看
  

在组态完成后,加OB82;OB85;OB86;OB87;OB122块上去.
jww
级别: 探索解密
精华主题: 0
发帖数量: 28 个
工控威望: 178 点
下载积分: 642 分
在线时间: 44(小时)
注册时间: 2008-12-21
最后登录: 2024-09-13
查看jww的 主题 / 回贴
460楼  发表于: 2009-12-22 16:22
感谢520楼,我用的两台PLC 是西门子300 CPU314 订货号是314-1AG14-0AB0,不能进行MPI通信(利用PROFIBUS线)的原因可能是这款PLC不支持PROFIBUS通信,它的硬件设置里就不能进行PROFIBUS通信设置。非常感谢,我说的对吗?
hhjauto
级别: 探索解密
精华主题: 0
发帖数量: 26 个
工控威望: 139 点
下载积分: 480 分
在线时间: 11(小时)
注册时间: 2009-11-24
最后登录: 2015-07-01
查看hhjauto的 主题 / 回贴
461楼  发表于: 2009-12-25 16:45
在FC中,定义临时变量#TEMP12、#TEMP4、#TEMP5、#TEMP6、#TEMP7均为DWord类型。#TEMP12用于计算指针偏移量,#TEMP4-7用于指向4个ARRY[1……112]BOOL类型的数组)STL代码如下:
   OPN   #IN0                 //打开相应的DB
     ……   ……
      L     DBW    8               //DBW8保存了一个值为112的INT数据
      L        8
      /I    
      SLD   3
      L     P#DBX 0.0           //这里为何是用P#DBX0.0而不是用P#0.0?可否用P#0.0?
      +D    
      T     #TEMP12              //相加之后#TEMP12的内容是怎样的?
       L     P#DBX 10.0
      T     #TEMP4          
      L     #TEMP12
      +D    
      T     #TEMP6                //我的问题是:用到P#DBX byte.bit来相加,则高字节的内容是否相加?对寻址有无影响?
      L     #TEMP12
      +D    
      T     #TEMP7
      L     #TEMP12
      +D    
      T     #TEMP5
       L     DBW    8
M001: T     #TEMP3
           ……  ……
   A    DBX[#TEMP4]
      A    DBX[#TEMP5]
      =    DBX[#TEMP6]
     …… ……
   L     #TEMP3
      LOOP  M001
hhjauto
级别: 探索解密
精华主题: 0
发帖数量: 26 个
工控威望: 139 点
下载积分: 480 分
在线时间: 11(小时)
注册时间: 2009-11-24
最后登录: 2015-07-01
查看hhjauto的 主题 / 回贴
462楼  发表于: 2009-12-25 22:43
就我的理解,将P#DBX  byte.bit装入到32位指针中,指针的内容为1000_0100_0000_0BBB_BBBB_BBBB_BBBB_BXXX。而若是将这样的2个32位指针相加,那么第25、26、27位是否一样地也相加呢??则相加的结果是否会导致寻址不再指向DBX了??然而别人程序就是这么编的应该是没错的,有点想不通。我是新手,刚接触S7300,望前辈或是明白人给予指点,感激不尽。
deanhao
级别: *
精华主题: * 篇
发帖数量: * 个
工控威望: * 点
下载积分: * 分
在线时间: (小时)
注册时间: *
最后登录: *
查看deanhao的 主题 / 回贴
463楼  发表于: 2009-12-26 11:30
引用
引用第523楼hhjauto于2009-12-25 22:43发表的 楼上的问题,哪位大侠帮忙解答下?万分感谢 :
就我的理解,将P#DBX  byte.bit装入到32位指针中,指针的内容为1000_0100_0000_0BBB_BBBB_BBBB_BBBB_BXXX。而若是将这样的2个32位指针相加,那么第25、26、27位是否一样地也相加呢??则相加的结果是否会导致寻址不再指向DBX了??然而别人程序就是这么编的应该是没错的,有点想不通。我是新手,刚接触S7300,望前辈或是明白人给予指点,感激不尽。

这个编程我觉得有点不严谨,有可能会有莫名的问题。
首先要肯定你的理解是正确的,两个双字相加,是没有那个位被放弃的,正如你说的25、26、27位也是相加。而这程序之所以出现正确结果是因为:他使用的是存储器间接寻址,而该寻址类型都是区域内间接寻址,也就说1000_0100_0000_0BBB_BBBB_BBBB_BBBB_BXXX,比B高的位都是无效的,原则上是应该给清零的,以免出现不必要的麻烦。
就本程序而言,只有位号和字节号有效,高位也是相加只是无效,,因此你所说的区域代码DBX DIX等就是无用的,所以编程的结果的会出现对的,但是建议把高位都清零,因此这个编程是不严谨的。
还有就是要会利用仿真监控,你可以监视累加器,地址寄存器,状态字等等,很容易能看出来到底高位有没有变化。
deanhao
级别: *
精华主题: * 篇
发帖数量: * 个
工控威望: * 点
下载积分: * 分
在线时间: (小时)
注册时间: *
最后登录: *
查看deanhao的 主题 / 回贴
464楼  发表于: 2009-12-26 11:33
罗嗦一下,你说的区域代码是区域间间接寻址用的,可使用寄存器间接寻址。
本帖最近评分记录:
  • 下载积分:+2(hhjauto) 热心助人
    hhjauto
    级别: 探索解密
    精华主题: 0
    发帖数量: 26 个
    工控威望: 139 点
    下载积分: 480 分
    在线时间: 11(小时)
    注册时间: 2009-11-24
    最后登录: 2015-07-01
    查看hhjauto的 主题 / 回贴
    465楼  发表于: 2009-12-27 00:21
    引用
    引用第525楼deanhao于2009-12-26 11:33发表的  :
    罗嗦一下,你说的区域代码是区域间间接寻址用的,可使用寄存器间接寻址。

    感谢deanhao的指点,也就是说寻址正确的原因在于A   DBX[#TEMP4]这样的指令中已经指定了寻址DBX了是吗?就是说区域内寻址一般使用P#byte.bit装入指针中,而在区域间寻址才使用P#M byte.bit这样的数据装入指针中,而后面的指令就可以直接使用A  #TEMP4的形式了。PLCSIM电脑上有装,还不熟悉怎么监视,还需慢慢摸索。总之很感谢你的回答……一个人摸索真的是很郁闷的一件事情。此论坛真是个好地方。
    hhjauto
    级别: 探索解密
    精华主题: 0
    发帖数量: 26 个
    工控威望: 139 点
    下载积分: 480 分
    在线时间: 11(小时)
    注册时间: 2009-11-24
    最后登录: 2015-07-01
    查看hhjauto的 主题 / 回贴
    466楼  发表于: 2009-12-27 01:26
    “而后面的指令就可以直接使用A  #TEMP4的形式了”,似乎不对,这样的指令似乎是错的,必须使用A  DBX[#TEMP4],百度了一下,总算是明白了,寄存器间接寻址支持X [AR1,P#byte.bit]的形式。区域代码的作用就在这里是吧??
    deanhao
    级别: *
    精华主题: * 篇
    发帖数量: * 个
    工控威望: * 点
    下载积分: * 分
    在线时间: (小时)
    注册时间: *
    最后登录: *
    查看deanhao的 主题 / 回贴
    467楼  发表于: 2009-12-27 11:14
    引用
    引用第527楼hhjauto于2009-12-27 01:26发表的  :
    “而后面的指令就可以直接使用A  #TEMP4的形式了”,似乎不对,这样的指令似乎是错的,必须使用A  DBX[#TEMP4],百度了一下,总算是明白了,寄存器间接寻址支持X [AR1,P#byte.bit]的形式。区域代码的作用就在这里是吧??

    你的理解是正确的,以为上面已经指定区域,即区域内间接寻址,所以剩下的只用指定字节号和位号就可以了。
    而寄存器的寻址可以使用你说的区域间,这时候的区域代码就是很重要了。
    但是我不赞成你给的程序的编程方式,因为很不规范回造成一些错误。
    还有什么问题欢迎讨论。