实际工程中用过的PLC 以太网通信案例,需要把PLC型号、与PLC通信的设备、通信的各种参数及情况、通信实现的功能等说明清楚,贴出程序并加以说明。
PLC及与PLC通信的设备类型不限。
工控PLC擂台每周一期,本期下周结贴。奖项设置:一等奖1名:50MP,二等奖5名:10MP,三等奖10名:30积分。
MP介绍:gongkongMP即工控币,是中国工控网的用户积分与回馈系统的一个网络虚拟计价单位,类似于大家熟悉的QB,1个MP=1元人民币。
MP有什么用?兑换服务:以1个MP=1元来置换中国工控网的相关服务。 兑换现金:非积分获得的MP可兑换等值现金(满100MP后、用户可通过用户管理后台申请兑换)。
S7-200 之间的以太网通信
S7-200 之间的以太网通信,S7-200 既可以做为Server(服务器)端,也可以做为Client(客户端)。
1、S7-200 做为Server 端
S7-200 做为Server 端时,只响应Client 端的数据请求,不需要编程,只要组态CP243-1 就可以了。
(1)选择“工具”菜单下的“以太网向导...”。
(4)设定CP243-1 模块的IP 地址和子网掩码,并指定模块连接的类型(本例选为自动检测通讯),点击“下一步”。
TSAP:由两个字节构成,第一个字节定义了连接数,其中:
Local TSAP 范围:16#01,16#10~16#FE
Remote TSAP 范围:16#01,16#03,16#10~16#FE
第二个字节定义了机架号和CP 槽号。
如果只有一个连接,可以指定对方的地址,否则可以选中接受所有的连接请求。
“保持活动”功能是CP243-1 以设定的时间间隔来探测通信的状态,此时间的设定在下步设定。
“保持活动间隔”即是上步中的探测通信状态的时间间隔。
(8)选定CP243-1 组态信息的存放地址,此地址区在用户程序中不可再用。
参数说明:ETH0_CTRL 为初始化和控制子程序,在开始时执行以太网模块检查。应当在每次扫描开始调用该子程序,且每个模块仅限使用一次该子程序。每次CPU 更改为RUN(运行)时,该指令命令CP243-1以太网模块检查V 组态数据区是否存在新配置。如果配置不同或CRC保护被禁用,则用新配置重设模块。
当以太网模块准备从其他指令接收命令时,CP_Ready 置1。Ch_Ready的每一位对应一个指定,显示该通道的连接状态。例如,当通道0 建立连接后,位0 置1。Error(错误)包含模块通信状态。
S7-200 做Client 端时,组态步骤前5 步同S7-200 做Server 时,注意在第4 步中客户端的地址要设主192.168.147.2。
(1)~(5)步同Server 端时的步骤。
(7)在弹出的画面中点击“新传输”。
区,如有多个数据传输(最多32 个,0~31),可按“新传输”按钮
定义新的数据传输。
个人主页给TA发消息加TA为好友发表于:2011-03-06 15:21:364楼
通过调用S7通讯提供的SAPI-S7应用程序接口实现PC机与S7300/400PLC基于工业以太网的数据通讯
1、SIMATIC NET工业以太网
SIMATIC NET工业以太网是用于大型集散控制系统的高速网络系统,最高通信速率可达100Mbps,通讯距离为1.5Km(同轴电缆)或4.5Km(光纤)网络可连接多于1000个节点。它是基于IEEE802.3的工业标准总线系统,采用CSMA介质访问控制协议。节点之间通过连接方式进行数据传输,由主动站建立连接,被动站加以确认。PG/PC和PLC之间可建立无穷多个连接,而每个PLC最多可建立16个PLC-PLC连接。每一个连接最多一次可发送240个字节;传送的数据为:I/O地址,中间寄存器和DB数据块。可按位、字节、字、双字等方式读写。
工业以太网由独立的网段组成,每个网段最多500m,最多可连接100个站点,网段之间用中继器连接。两站之间最多接两个中继器,构成1000米得远程中继站。每个数据终端设备DTE通过耦合器连接到网上,DTE可以是工作站PC和编程器PG,S7、S5、M7等系列得PLC设备,以及其他支持ISO传输的非西门子系统。网络通讯接口设备为自带CPU的CP(通讯处理器)模块,在它的固件中固化了ISO参考模型的1到7层协议。CP完成所有的通讯任务,可大大减轻DTE的CPU负担。S7-300一般采用CP343-1板,S7-400一般采用CP443-1板。PC/PG上一般装有网卡CP1613,也可以用CP1413、CP1511、CP1411。
2、 S7通讯
S7通讯是SIMATIC S7 PLC之间得最佳化通讯协议,它也允许用户通过S7协议连接PC和工作站。每个作业的用户的最大用户数据量可到64K(中等到大型的数据量)。可以被MPI、PROFIBUS和工业以太网所支持,是西门子公司开发的基于应用层的一个协议。S7通讯提供了简明、强有力的通讯服务和与网络无关的用户接口,用于工业以太网、PROFIBUS和MPI。需要安装SIMATIC Net软件,目前最新版本是V6.2。
3、 数据通讯的实现
S7通信协议不公开,管理计算机和调试计算机上第三方软件编制的程序如何实现PC机与西门子S7 300/400 PLC之间的信息通讯是个棘手的问题。为了允许PC机和工作站上的应用程序与西门子S7系列产品进行S7通讯,西门子公司提供了一个SAPI-S7应用程序接口,通过它可以灵活而方便地跟西门子S7系列产品进行通信。安装SIMATIC Ner软件后,会在系统system32目录下生成一个s732.dll文件,该动态链接库提供了大量基于WindowsNT、Window95/98、Windows3.11和MS-DOS的函数,这样就使得用户解决PLC和PC机的数据交换和数据处理问题变为可能。通信编程包括两个部分:(1)CP连接组态(2)PLC与上位机通信编程。
4、 CP连接组态
可采用step7软件或step7软件中用于工业以太网的NCMS7软件对CP进行网络组态。通讯处理器CP可连接PC,PC/PG上一般装网卡CP1613。在Windows控制面板下的“set PC/PG”下安装所用网卡驱动程序,并设协议、站号、波特率、是否为主站,完成对VFDs(Virtual Field Device)和S7 connections的配置[4]。
8、 PLC和上位机的通讯编程
S7-300/400PLC有以下各类资源:①输入点I:接收外部开关量信号 ②输出点Q:输出给外部的开关量信号 ③内部辅助点M:存放所需中间结果 ④时间继电器T ⑤计数器 ⑥数据块DB:存放程序数据的存储区域 ⑦外设输入PI:主要接收模拟量输入信号经A/D转换⑧外设输出PQ:给出模拟两输出值[5]。要读/写这些资源,首先要建立PLC和PC机的连接。
(1) 初始化与PLC的连接
SAPI-S7应用程序接口提供的管理服务模块(Administrative Services)提供了一些可供读出配置信息和登录/退出通讯系统的函数,下面作一些简要介绍:
Ø s7_get_device() :通过此函数,用户程序可以查询所有已安装的CP的CP名。
Ø s7_get_vfd() :通过此函数,用户程序可以查询任一指定CP的所有已配置的VFD。
Ø s7_init():通过此函数,用户程序可登录通讯系统。
Ø s7_get_cref() :此函数提供了一个指向所选S7 connection名的指针。
Ø s7_get_conn():此函数返回已登录VFD的所有S7 connection名和指向他们的指针。
Ø s7_shut():通过此函数,用户程序可退出通讯系统。
一个应用程序可以登录一个或多个CP的若干个VFD,只有当应用程序登录CP及其所选的VFD,在配置期间指定给该VFD的所有连接才是有效的。
(2)读/写PLC内部资源
初始化与PLC的连接成功后,就可以对PLC进行读写操作。对PLC存储区即数据块DB的读写是实现监控的最基本操作。SAPI-S7应用程序接口提供的变量服务模块(Variable Services)提供了一些读写函数,由于篇幅有限,现选一些经常用到的函数作一些简单介绍。
Ø s7_cycl_read():此函数通知服务方准备对单存储单元循环读一个变量。
Ø s7_get_cycl_read_ind():此函数接收来自服务方发送的数据。
Ø s7_multiple_read_req():此函数通知服务方准备对多存储单元读一个或多个变量。
Ø s7_get_multiple_read_cnf():此函数接收来自服务方的一个或多个变量的值。
Ø s7_multiple_write_req():此函数通知服务方准备对多存储单元写一个或多个变量。
Ø s7_get_multiple_write_cnf():此函数接收来来自服务方的执行上述写请求的结果。
需要特别注意的是:S7 300/400PLC遵循“高地址、低字节”的规律,这与某些习惯用法不同。例如在C++Builder6中,变量类型为word的变量,它的数据存放顺序是“低地址,低字节”的规律。因此在对所读取的数据进行操作或给PLC数据块中写数据字时要进行相应的处理。
为解决上位机不能因前台的信息处理而中断后台的监听等问题,可采用多线程编程技术,将对PLC内部资源的读/写功能模块交给一个后台线程来完成。多线程编程技术能提高CPU利用率,加快信息处理,提高系统的实时性,在由多台计算机组成的分布式实时控制系统中应用多线程技术是完全必要的。
(3) 后台读/写线程模块部分代码
·····
do
{
ret = s7_receive(cp_descr,&cref,&orderid);
switch(ret)
{
case S7_NO_MSG:
break;
case S7_INITIATE_CNF:
Synchronize(my_get_initiate_cnf);
Synchronize(my_multiple_read_req);
break;
case S7_MULTIPLE_READ_CNF:
Synchronize(my_get_multiple_read_cnf);
Synchronize(my_multiple_read_req);
break;
·
·
case S7_ABORT_IND:
Synchronize(my_get_abort_ind);
break;
case S7_VFD_STATE_CNF:
Synchronize(my_get_vfd_state_cnf);
Synchronize(my_abort);
break;
case S7_VFD_USTATE_IND:
Synchronize(my_get_vfd_ustate_ind);
break;
default :
·····
}
}while(ret != last_event_expected)
个人主页给TA发消息加TA为好友发表于:2011-03-06 23:47:008楼
个人主页给TA发消息加TA为好友发表于:2011-03-07 08:56:399楼
关于以太网通讯我感觉主要有3点:1.主要是看好以太网模块在模组中所在的位置
2.设置好以太网的网址
3.确定联接的线没有故障
下面我以三菱Q系列PLC为例,是一台负荷区分设备,主要的PLC构成如图:
个人主页给TA发消息加TA为好友发表于:2011-03-07 20:42:0512楼
通过CP343-1 实现S7-300 之间的以太网通讯
一、硬件组态
首先搭建一套测试设备,设备的结构图如下:
2 套S7-300 系统由PS307 电源、CPU314C-2DP、CPU314C-2PTP、CP343-1、CP343-1 IT、
PC、CP5611、STEP7 组成,PLC 系统概貌如下图:
第一步:打开SIMATIC Manager,根据我们系统的硬件组成,进行系统的硬件组态,如图:
插入 2 个S7300 的站,进行硬件组态:
个人主页给TA发消息加TA为好友发表于:2011-03-07 20:56:3113楼
二、网络组态
组态完2套系统的硬件模块后,分别进行下载,然后点击Network Configration按钮,打开系统的网络组态窗口NetPro,选中CPU314,如下图:
个人主页给TA发消息加TA为好友发表于:2011-03-07 20:59:3614楼
到此为止,系统的硬件组态和网络配置已经完成。下面进行系统的软件编制,在SIMATIC Manager界面中,分别在CPU314C-2PTP、CPU314C-2DP中插入OB35定时中断程序块和数据块DB1,DB2,并在两个OB35中调用FC5(AG_Send)和FC6(AG_Recv)程序块,如下图:
如下界面说明了将CPU314C-2DP 的DB1中的数据发送到CPU314C-2PTP 的DB2中的监视界面:
a. 选择Data View,切换到数据监视状态:
个人主页给TA发消息加TA为好友发表于:2011-03-10 02:20:3520楼
1、采用PLC与PLC通过以太网访问,需要增加以太网模块,如CP343-1,CP443-1的模块,或者采用带有PN接口的PLC,如CPU315-2DP/PN的PLC。
2、采用两块CP343-1互连,先在同一个项目里做好两套PLC的硬件组态,分配好IP地址,打开NetPro,选择其中一个PLC,双击连接列表上的空白行,添加一个
S7 conection。选择连接的另一个PLC,记住连接的ID号。通讯双方的其中一个站为Client端,激活“Establish an active connection”的选项(默认是激活的)。这样NetPro的配置就完成了,编译、下载完成
3、打开其中两套PLC的OB1,调用FB12(BSEND)块发送数据,FB13(BRCV)块接收数据,1#PLC的发送对应2#PLC的接收,1#PLC的接收对应2#PLC的发送。
4、调用FB12的时候几个参数的含意,a、REQ,发送开始,上升沿触发发送工作;b、ID,连接ID号,这个ID号是在NetPro组态时生成的ID号;c、R_ID,连接号,相同连接号的FB块互相对应发送接收数据,这个是由用户编程时定义的,例如1#PLC的FB12的R_ID是DW#16#2,则2#PLC的FB13的R_ID也是DW#16#2,这样才能保证正常接收发送;d、DONE,发送完成,如果REQ端是一个不停的脉冲,正常情况下DONE端也应该也是一个不停的脉冲反馈;e、SD_1,发送的开始地址,以P# x.x byte xxx来表示,f、LEN,发送数据的长度。
5、采用FB12、FB13来进行发送/接收是比较麻烦的,一方面需要两端的以太网模块都支持双边发送,如Cp343-1-Lean就不支持了,另一方面,两边都要写程序,对于增加的系统不太方便,所以这时可以在NetPro里把One-way(单边通讯,激活后FB12、FB13不能使用)激活,采用FB14(GET)取数据、FB15(PUT)发送数据来做,FB14的参数定义和FB12差不多,只是少了R_ID和LEN,这样更方便一些,而且还有一个好处,不需要对原有的系统进行什么更改,只需要把单边的PLC组态和程序下载就可以了
6、需要注意的另一个问题是FB和SFB的区别,在S7-400上采用SFB,在S7-300上采用FB,在S7-300集成的PN口上,采用SFB,这个问题曾经折磨过我一两天才解决。
S7-300PLC利用S7通信协议进行工业以太网通信
1、新建项目
在STEP 7中创建一个项目,取名为“IE_S7” ,点击右键,再弹出的菜单中选择“Ins ert New Object”→“SIMATIC 300 Station”,插入一个300站。用同样的方法在项目“IE_S7”下插另一个300站,如图所示。
单击“SIMATIC 300(1)”,双击“Hardware”进入“HW Config”界面。在机架中插入所需的CPU和CP模块
用同样的方法,建立另一个S7-300站,CP模块为CP 343-1,设置CP模块的MAC地址,连接到同一个网络“Ethernet(1)”上。
打开“NetPro”设置网络参数,选中一CPU,点击鼠标右键,选择“In sert New Connection”建立新的连接,在连接类型中,选择“S7 connection”连接
通信双方的其中一个站(本例中为CPU 314C-2DP)为Client端,激活“Establish an active connection”选项;另一个站(本例中为CPU 314C-2PtP)为Server端,在相应属性中不激活。
“One-way”表示单边通信,如果选择该项,则双边通信的功能块FB12“BSEND”和FB13“BRCV”将不再使用,需要调用FB14“PUT”和FB15“GET”。
设置好后保存编译并下载到各PLC中。
4、编写程序
(1)双边通信
由于事先选择了双边通信的方式,故在编程时需要调用FB12“BSEND”和FB13“BRCV”,即通讯双方均需要编程,一端发送,则另外一端必须接受才能完成通信。
FB12“BSEND”和FB13“BRCV”可以在指令库“Libraries”→“SIMATIC_NET_CP”→“CP 300”中可以找到,如图所示
此时,S7连接属性中需要设定“One-way”方式,如图所示。
FB14“PUT”和FB15“GET”同样在指令库“Libraries”→“SIMATIC_NET_CP”→“CP 300”中可以找到,如图所示。