您现在所在的是:

西门子SIEMENS

回帖:14个,阅读:6201 [上一页] [1] [2] [下一页]
* 帖子主题:

求助AG_SEND

974
hbgongdeng
文章数:9
年度积分:50
历史总积分:974
注册时间:2005/6/29
发站内信
发表于:2007/4/2 19:16:00
#0楼
若AG_SEND块中SEND这一脚填的地址为"P#DB1.DBX0.0 BYTE 40",请问这里"P"是什么意思?这里的"40"是这个DB块的长度还是什么?
2392
robertjml
文章数:630
年度积分:50
历史总积分:2392
注册时间:2006/2/23
发站内信
发表于:2007/4/3 9:49:00
#1楼
SEND这一引脚需要定义"发送报文的起始地址和数据长度".

1. P#-----发送报文的指针固定格式

2. DB1.DBX0.0-----发送报文的起始地址

3. BYTE 40-----发送报文的数据长度, "40"可以是整个DB块的长度, 当然"40"也可以是DB块的一段数据.

974
hbgongdeng
文章数:9
年度积分:50
历史总积分:974
注册时间:2005/6/29
发站内信
发表于:2007/4/3 12:48:00
#2楼
我想通过以太网将A PLC的几个点(如I1.0,I2.2,I3.6等不连续的点)送到B PLC中,我在A CPU中加了一个AG_SEND,在B CPU中加了一个AG_RECV,然后建了相应的DB1和DB2,那么请问我怎样把这几个点加进DB1中去呢?它们之间连接类型选哪种(S7,ISO,ISO-ON-TCP,TCP)哪种更合适?
(新手提的问题有点可笑,大家见谅)I1.0,I2.2,I3.6等不连续的点的值赋给DB1的具体操作是怎样的呢?
2392
robertjml
文章数:630
年度积分:50
历史总积分:2392
注册时间:2006/2/23
发站内信
发表于:2007/4/3 15:04:00
#3楼
PLC A 程序示范:

Network 1

A        I 1.0
=DB1.DBX0.0

A        I 2.2
=DB1.DBX0.1

A        I 3.6
=DB1.DBX0.2

......

如果你的网卡( CP343-1或者CP443-1 )仅有MAC地址, 连接类型选项有(S7 connection, ISO transport connection)!

如果你的网卡( CP343-1或者CP443-1 )既有MAC地址, 又有IP地址. 连接类型选项有(S7 connection, ISO transport connection, ISO-on-TCP connection, TCP connection, UDP connection)!

FC5 "AG_SEND" (ISO, ISO-on-TCP, TCP, UDP), 该FC发送的报文最大长度240个字节.
推荐: 采用SFB12和SFB13 (S7 connection), 此SFB12发送的报文最大长度300个字节. 效率很高!
974
hbgongdeng
文章数:9
年度积分:50
历史总积分:974
注册时间:2005/6/29
发站内信
发表于:2007/4/3 20:14:00
#4楼
只是单向通讯时,能否只在发送的300里调用AG_SEND,在接收的300里调用AG_RECV?另外发送和接收有没有条件,传送的数据量不是很大,只有十几个字节.
974
hbgongdeng
文章数:9
年度积分:50
历史总积分:974
注册时间:2005/6/29
发站内信
发表于:2007/4/3 20:15:00
#5楼
我B300里要传到ACPUR的点有连续的DI点,也有不连续的DI点,有些是一个字节都要传到A300里,有些是一个字节中的六位要传到A300里,对于这种情况,是将每一位分别赋值给DB块,还是可以将所有字节全部用数组形式赋值给DB,然后再调用其中需要的DI点?
974
hbgongdeng
文章数:9
年度积分:50
历史总积分:974
注册时间:2005/6/29
发站内信
发表于:2007/4/3 20:42:00
#6楼
我现在选的是ISO transport connection,用AG_SEND和AG_RECV发送接收数据,因为数据传送量不是很大。但是我不知道两个300的发送和接收可否同时进行?还是收完之后再发?
2392
robertjml
文章数:630
年度积分:50
历史总积分:2392
注册时间:2006/2/23
发站内信
发表于:2007/4/4 9:43:00
#7楼
To hbgongdeng:

如果只是单向通讯时,完全可以只在发送的CPU-300里调用AG_SEND,在接收的CPU-300里调用AG_RECV.

发送是有条件, 注意如下:

     L     100
     T     MW    10       // 注意这里! 必须预先赋值给MW10!

     CALL  "AG_SEND"
      ACT   :=M0.0       // M0.0必须保持"true", 发送才能进行!
      ID    :=1
      LADDR :=W#16#100
      SEND  :=P#DB1.DBX0.0 BYTE 100  
      LEN   :=MW10     // 你必须预先赋值给MW10, 该值<=100!
      DONE  :=M0.1
      ERROR :=M0.2
      STATUS:=MW12

以上的例子仅做示范!

2392
robertjml
文章数:630
年度积分:50
历史总积分:2392
注册时间:2006/2/23
发站内信
发表于:2007/4/4 9:58:00
#8楼
To hbgongdeng:

问题: PLC-B里要传到PLC-A的点有连续的DI点,也有不连续的DI点,有些是一个字节都要传到PLC-A里,有些是一个字节中的六位要传到PLC-A里.

规范的做法:

1. 将所有的DI点映射到一个共享的数据块.
2. 将需要发送的位/字节从上述的共享数据块映射到一个发送区数据块.

确认发送区数据块的每一个位,每一个字节都被充分使用!
2392
robertjml
文章数:630
年度积分:50
历史总积分:2392
注册时间:2006/2/23
发站内信
发表于:2007/4/4 10:03:00
#9楼
To hbgongdeng:

如果你现在选的是ISO transport connection,用AG_SEND和AG_RECV发送接收数据.两个S7-300的发送和接收是同时进行!

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2025 Gkong.com, All Rights Reserved

62.4004