技术论坛

s7-1500与s7-200smart通讯后,1500的DB块传输Bool到Smart的V区的问题

作者 主题
新手

经验值: 31
发帖数: 2
精华帖: 0
主题:【求助】s7-1500与s7-200smart通讯后,1500的DB块传输Bool到Smart的V区的问题


只看楼主 楼主 2023-03-07 21:13:45

目的:

s7-1500与s7-200smart在1500侧通过S7通讯后,将1500的DB块发送Bool到Smart的V区。

问题:

       建立PUT与GET块后,实验性的将1500侧的DB11.DBX0.0 BOOL 1发送到DB1.DBX0.0也就是200smart侧的V0.0,这一步成功了。

       但是改变发送的BOOL的数量,后,即DB11.DBX0.0 BOOL 2-DB11.DBX0.0 BOOL 7,bool后的数量在2-7之间时在SD上都显参数分配错误,如图所示。当发送数据为DB11.DBX0.0 BOOL 8时,不再提示参数错误,但PUT块数据发送不成功,无法完成一次完整的发送,200smart侧也读取不到。

       转换思路后,在一个PUT块上使用2个SD,分别发送DB11.DBX0.0 Bool 1和DB11.DBX0.1 Bool 1 到Smart的V区的v0.0和v0.1,这一步成功了,但是接下来在同一个块上使用第3个或者4个SD分别发送一个BOOL 到Smart的V区的v0.2和v0.3时,只有前两个bool发送成功,PUT块显示完成了发送,但是SD_3和SD_4发送的Bool在200Smart侧的v0.2和v0.3读取不到,程序反复检查了错误,重新建立PUT块和DB块,在一个PUT块上都只能发送两个Bool。

       然后在不同的PUT块上发送DB11.DBX0.2 Bool 1和DB11.DBX0.3 Bool 1,这个也成功了。但是同一个put块只能发送两个BOOL,多了不行的这种情况是哪里的问题,求大神指点一下。

 最后:一般情况下,传输bool型的数据应该不会这么麻烦吧,如果用byte字节传输,这个在在s7-1500侧DB块里应该怎么建立数据变量,变量是用byte型还是bool型。



求教大佬们问题:

如果说我想将DB11块上的7.0-7.7这8个bool量发送到smart的V区的V7.0-7.7,我看大家都推荐用BYTE字节传输,那么在PUT块上SD_1上写入DB11.DBX7.0 BYTE 1,在ADD_1上写入DB1.DBX7.0 BYTE 1,这样没问题吧?这样就一次性把DB11块的7.0-7.7的数据传输到Smart的V区的V7.0-7.7了么?想要传输的数据形式在SD或者ADDR这个位置不需要完全对应吗?我一直以为发送的DB块的数据类型为BOOL,那么在SD写入的数据就需要是DB11.DBX7.0 BOOL 8,但实际是DB11.DBX7.0 BYTE 1,不知道这个理解的对不对?


 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1814787&b_id=66&s_id=0&num=11

游侠

经验值: 338
发帖数: 36
精华帖: 0
回复:s7-1500与s7-200smart通讯后,1500的DB块传输Bool到Smart的V区的问题
推荐帖


只看楼主 1楼 2023-03-08 08:27:28

之前做过1200CPU+2个SR40,SR40作IO模块使用,用到了此种方式,简单说明供您参考。

1、数据块说明:DB1为GET数据块,DB2为PUT数据块。

2、程序说明:

GET指令将200smart的VW0-VW50共26个字传输1500的DB1.DBW0-DB1.DBW50。

PUT指令将1500的DB2.DBW0-DB2.DBW24共13个字传输到VW100-VW124。

3、对应关系说明:

由此GET指令形成的对应关系举例就是VD0就对应DB1.DBD0,VW0对应DB1.DBW0,VB0对应DB1.DBB0,V0.0对应DB1.DBX0.0,其它地址同理。

由此PUT指令形成的对应关系举例就是VD100对应DB2.DBD0,VW100对应DB2.DBW0,VB100对应DB2.DBB0,V100.0对应DB2.DBX0.0,其它地址同理。

4、1500变量建立说明:

借由这种对应关系,DB块就可以理解成200smart的数据存取。以GET指令对应关系举例。

200smart变量1:VD0,那么DB1的第1个变量是32位的数据类型,比如Dint型,地址为DB1.DBD0。

200smart变量2:VW4,那么DB1的第2个变量是16位的数据类型,比如int型,地址为DB1.DBW4。

200smart变量3:VB6,那么DB1的第3个变量是8位的数据类型,比如Byte型,地址为DB1.DBB6。

200samrt变量4:V7.0-V7.7,那么DB1的第4-11个变量是1位的数据类型,比如Bool型,地址为DB1.DBX7.0-DB1.DBX7.7。

如果有不需要用的变量,在变量表编写对应的备用变量把不用的地址占掉。




 
以下网友喜欢您的帖子:

  
侠士

经验值: 1654
发帖数: 64
精华帖: 0
回复:s7-1500与s7-200smart通讯后,1500的DB块传输Bool到Smart的V区的问题


只看楼主 2楼 2023-03-08 09:38:15

干嘛用S7通讯啊,用智能IO都不用编程


真空行业十余年,专业PVD设备。
以下网友喜欢您的帖子:

  
游士

经验值: 260
发帖数: 37
精华帖: 0
回复:s7-1500与s7-200smart通讯后,1500的DB块传输Bool到Smart的V区的问题


只看楼主 3楼 2023-03-08 09:44:49

感觉楼主在找PUT GET 的BUG,发送的字节数跟接受的字节数保持一致就行啊,还有发送接收最好以字节为单位。


 
以下网友喜欢您的帖子:

  
新手

经验值: 31
发帖数: 2
精华帖: 0
回复:s7-1500与s7-200smart通讯后,1500的DB块传输Bool到Smart的V区的问题


只看楼主 楼主 4楼 2023-03-08 15:08:50
以下是引用手机用户20220524772706在2023-03-08 08:27:28的发言 >1楼

之前做过1200CPU+2个SR40,SR40作IO模块使用,用到了此种方式,简单说明供您参考。

1、数据块说明:DB1为GET数据块,DB2为PUT数据块。

2、程序说明:

GET指令将200smart的VW0-VW50共26个字传输1500的DB1.DBW0-DB1.DBW50。

PUT指令将1500的DB2.DBW0-DB2.DBW24共13个字传输到VW100-VW124。

3、对应关系说明:

由此GET指令形成的对应关系举例就是VD0就对应DB1.DBD0,VW0对应DB1.DBW0,VB0对应DB1.DBB0,V0.0对应DB1.DBX0.0,其它地址同理。

由此PUT指令形成的对应关系举例就是VD100对应DB2.DBD0,VW100对应DB2.DBW0,VB100对应DB2.DBB0,V100.0对应DB2.DBX0.0,其它地址同理。

4、1500变量建立说明:

借由这种对应关系,DB块就可以理解成200smart的数据存取。以GET指令对应关系举例。

200smart变量1:VD0,那么DB1的第1个变量是32位的数据类型,比如Dint型,地址为DB1.DBD0。

200smart变量2:VW4,那么DB1的第2个变量是16位的数据类型,比如int型,地址为DB1.DBW4。

200smart变量3:VB6,那么DB1的第3个变量是8位的数据类型,比如Byte型,地址为DB1.DBB6。

200samrt变量4:V7.0-V7.7,那么DB1的第4-11个变量是1位的数据类型,比如Bool型,地址为DB1.DBX7.0-DB1.DBX7.7。

如果有不需要用的变量,在变量表编写对应的备用变量把不用的地址占掉。



更新了一下帖子,大佬看一下最后的问题啊,回复有字数限制,说不完


 
以下网友喜欢您的帖子:

  
侠士

经验值: 1654
发帖数: 64
精华帖: 0
回复:s7-1500与s7-200smart通讯后,1500的DB块传输Bool到Smart的V区的问题


只看楼主 5楼 2023-03-08 16:41:19

1500当IO控制器,200smart当IO设备,请参考官方文档

https://www.ad.siemens.com.cn/productportal/prods/s7-200-smart-portal/200smarttop/communication/Ethernet/PROFINET/S71500_vs_S7200SMART.htm


真空行业十余年,专业PVD设备。
以下网友喜欢您的帖子:

  
游侠

经验值: 338
发帖数: 36
精华帖: 0
回复:s7-1500与s7-200smart通讯后,1500的DB块传输Bool到Smart的V区的问题


只看楼主 6楼 2023-03-08 17:00:59

楼主可以查阅下西门子的数据存储和寻址方式的资料,了解位、字节、字、双字,数据长度,数据类型,寻址方式等。

这里以GET指令为例简单讨论一下:


图中,ADDR_1处的指针为P#DB1.DBX6.0 WORD 2,表示要从200smart读取起始地址为V6.0,长度为2个字,即32个位的数据。

RD_1处的指针为P#DB1.DBX0.0 WORD 2,表示我读取到的数据要存在1500中DB1数据块起始地址为0.0,长度为2个字,即32个位的区间。

这样指令GET到32位数据,这32个位上的数据是一一对应完全相同的,因为存放的起始地址是0.0,所以严格的对应关系是V6.0-V9.7对应DB1.DBX0.0-DB1.DBX3.7。

至于我们常说的VB6,VW6只是一种寻址方式。这32位数据寻址200smart表示可以是VB6-VB9,也可以是VW6-VW8,也可以是VD6,也可以是V6.0-V9.7;而在1500中寻址表示可以是DB1.DBB0-DB1.DBB3,也可以是DB1.DBW0-DB1.DBW2,也可以是DB1.DBD0,也可以是DB1.DBX0.0-DB1.DBX3.7。对这个32位数据你也可以在200smart定义变量V6.0-V6.7,VB7,VW8;在1500中定义变量VB0,VW1,V3.0-V3.7。

数据GET/PUT后形成了对应关系,每个位上二进制数据就一致了,至于你怎么寻址并无影响。





 
以下网友喜欢您的帖子:

  
侠士

经验值: 1692
发帖数: 194
精华帖: 1
回复:s7-1500与s7-200smart通讯后,1500的DB块传输Bool到Smart的V区的问题


只看楼主 7楼 2023-03-09 10:08:21

1500和smart 200不都支持profinet吗?为啥用这个繁琐的指令?


 
以下网友喜欢您的帖子:

  
侠士

经验值: 1692
发帖数: 194
精华帖: 1
回复:s7-1500与s7-200smart通讯后,1500的DB块传输Bool到Smart的V区的问题


只看楼主 8楼 2023-03-13 14:19:56

这里有个例子

http://www.siemens-jpg.gongboshi.com/news/index.php?itemid=180771


 
以下网友喜欢您的帖子:

  
侠士

经验值: 1693
发帖数: 236
精华帖: 2
回复:s7-1500与s7-200smart通讯后,1500的DB块传输Bool到Smart的V区的问题


只看楼主 9楼 2023-03-17 08:20:50

智能IO最简单有效,但有字节数限制。

看通信数据量。


 
以下网友喜欢您的帖子:

  
新手

经验值: 9
发帖数: 1
精华帖: 0
回复:s7-1500与s7-200smart通讯后,1500的DB块传输Bool到Smart的V区的问题


只看楼主 10楼 2023-06-04 17:05:16
请问楼主搞懂了吗,我也不理解这个
 
以下网友喜欢您的帖子:

  
侠客

经验值: 829
发帖数: 97
精华帖: 0
回复:s7-1500与s7-200smart通讯后,1500的DB块传输Bool到Smart的V区的问题


只看楼主 11楼 2023-06-05 12:46:06

过来学习学习,估计还是智能IO更方便些。


天道酬勤~
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
s7-1500与s7-200smart通讯后,1500的DB块传输Bool到Smart的V区的问题
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。