发表于:2003-01-13 18:04:00
3楼
“NETR/NETW”是S7为用户提供的一种“主从”通信协议的指令。它使用时只需填两个参数(1)TBL:缓冲区第一个字节的地址(……)(2)PORT:通信端口(如同选电脑的COM1/COM2)。所以调用此两条指令很易,关键是在写程序之前时做好“缓冲区”的规划。
如果是看书重点在理解好用作“收/发缓冲区”数据块中前“1~7”个字节的用意:
第一个字节用途:由PLC“填写”,供你选用的本次通信联络完成状况信息;
第二个字节用途:由你“填写”的从站站号;
第3~6字节用途:由你用 “填写”从站“被读(或写)区”第一个字节的地址(特点有二处:1、以32位作一个“双字”使用,2、前冠“&”表示为“指针型”的数据结构);
第七个字节用途:由你“填写”的本次通信数据长度(即在本字节以下有多少个字节,它的最大值只可指定16个字节)。
最简例程:
现场需求:
山上:有一水库,用“超声波液位仪”检测水位,用8个电动阀门分别控制8根输水管往山下8个储水池送水;山下:分别用8个浮球开关的“断/通”报告8个储水池的“高/低”状态并对应地控制山上阀门的“关/开”,用“LCD”显示山上水库的水位。
使用“NETR/NETW”的具体操作:
第一步(安排I/O使用):山下设为主站:I0.0~I0.7接8个浮球,AIW0输出4~20mA给“显示表”(该表自动A/D转换),“端口0”作通信口;山上设为从站:Q0.0~Q0.7对应8个浮球分别控制电动阀门,AIW0接“超声波液位仪” 4~20mA输入,“端口0”作通信口。
第二步(规划通信缓冲区):主站“接收区”VB93~VB115;“发送区”VB193~VB215(其中VB200用于装8个浮球状态,其余备用);从站“被读区”VB100~VB115(其中VB100~VB101用于装“超声波数据”,其余备用),“被写区”VB200~VB215。
注:只要地址连续和有足够长度,西门子PLC的通信缓冲区可在该内存段内任意指定。这里规划的“地段”选择是为了让主从站的“接收/被读、发送/被写”字节编号一一对应。
第三步(编写PLC程序):
《主站》
//初始化:设波特率、站形式等
LD SM0.1 //上电一次ON;
MOV-B 0000 0010,SMB30 //设为主站(其余缺省)
//“接收区”初始准备(装入站号、被读区首地址)
LD SM0.0 //上电后常ON
MOV-B 1,VB94 //对象为1#从站
MOV-DW &VB100,VD95 //用“指针型”装入从站“被读区”首址
MOV-B +16,VB96 //数据长度为16个字节
//应用(读入从站数据后将数据解用)
LD XXX //启动条件依实情“自定”
NETR VB93,0 //使用“端口0”访问从站被读区
LD XXX //启动条件依实情“自定”
MOVW VW100,AQW0 //从“接收区”数应用(送LCD仪显示)
(MOV …… ,….. //需要时可以多至16个字节)
//“发送区”初始准备(装入站号、被读区首地址)
LD SM0.0 //上电后常ON
MOV-B 1,VB194 //对象为1#从站
MOV-DW &VB200,VD195 //用“指针型”装入从站“被写区”首址
MOV-B +16,VB196 //数据长度为16个字节
//应用(装入待发信息后写往从站)
LD XXX //启动条件依实情“自定”
MOV-B IB0,VB200 //把“浮球状态”装入“发送区”
(MOV …… ,….. //需要时可以多至16个字节)
LD XXX //启动条件依实情“自定”
NETW VB193,0 //使用“端口0”写从站被写区
《从站》
//初始化:设波特率、站形式等
LD SM0.1 //上电一次ON;
MOV-B 0000 0000,SMB30 //设为从站,其余与主站一致
//信息应用
LD XXX //启动条件依实情“自定”
MOV-W AIW0,VW100 //“液位数据”装入“被读区”(占2个字节)
(MOV …… ,….. //需要时可以多至16个字节)
MOV-B VB200,QB0 //从“被写区”取出数据应用(启动阀门)
(MOV …… ,….. //需要时可以多至16个字节)
注:此例仅可供联机实验参仿,如实用要与实情配合(如:通信失败时的安全性等问题)