21 MPI通信接口的基本原理
MPI通信的最高速率达187.5KB/S。IPC与PLC的通信分为两种物理连接方法一种是
在工控机PCI总线上插接CP5611卡通过此卡和MPI电缆将IPC连接到S7系列PLC本机
上集成的MPI接口形成MPI网络另一种方法是直接使用PC/MPI编程电缆将连接具体
连接方式见图1二者的通信速度不一样。
MPI通信协议属于S7系列Siemens公司的内部通信协议因此必须借助于专用的MPI
通信软件包PRODOVE S7来实现与第三方软件的通信接口设计【5】。PRODAVE S7软
件包提供了各种IPC与PLC进行MPI通信的函数并将这些函数封装DLL动态链接库
中为了能在程序中调用这些函数开发人员需要在开发环境中导入相关的DLL并编写相
应代码。
Labwindows/CVI应用程序
PRODOVE S7 DLL
CP5611卡MPI电缆
PC/MPI 编程电缆
S7系列PLC
PCIRS232
MPI
图 1 LabWindows/CVI与PLC的MPI通信接口方案
2.2 MPI通信接口软件设计
2.2.1 加载DLL库
由于PRODOVE软件提供的是DLL库函数故软件设计的首要的关键点就是如何将此
DLL库函数加载到LabWindows/CVI开发环境中并能被应用程序所调用。
LabWindows/CVI中只能使用由Borland C++、Microsoft Visual C++、Symantec C++ 和
Watcom C++四种编译器生成的外部模块不能使用Microsoft Visual C ++ 6.0生成的DLL导
出库文件。由于PRODAVE S7软件包是使用Microsoft Visual C++ 6.0开发的所以需要利
用LabWindows/CVI从DLL生成相应的导出库文件具体按如下步骤实施
1安装PRODAVE S7软件包到LabWindows/CVI工程项目所在的目录安装完毕后
在目录中会出现W95_S7.LIB的静态库文件将此文件删除。
2在LabWindows/CVI开发环境下打开W95_S7.h文件分别单击文件窗口的“Option”
菜单栏并点击“Generate Import Library”选项。在弹出的对话框中选择“Generate import
library for current compatibility mode”选项。
3在DLL文件选择对话框中选择W95_S7.DLL文件生成与头文件同名的导出库
文件W95_S7.LIB。按照以上方法重新生成名为KOMFORT.LIB文件
4重新生成“W95_S7.LIB”和“KOMFORT.LIB”文件后在LabWindows/CVI开
发环境下打开需要加载导出库文件的源文件包含“W95_S7.h”和“KOMFORT.h”文件即
可。
完成上述步骤后即可在LabWindows/CVI环境下调用PRODAVE S7软件包中的各种
功能函数了。
222 接口程序设计
Prodove S7提供的功能函数可以访问PLC的存储区主要有输入I、输出Q、位
存储区M、定时器T、计数器C、外设输入PI、外设输出PQ、数据块DB
程序数据存储区等。其通信函数与PLC存储区的对应关系见表1。
odove S7功能函数 功能介绍 对应存储区
e_field_read( ) 读输入过程映像 I
a_field_read( )/a_field_write( ) 读/写输出过程映像Q
mb_bittest( ) 位状态检测 M
mb_setbit( )/mb_resetbit( ) 置位/复位位 M
m_field_read( )/m_field_write()读/写位存储器 M
db_buch( ) 数据块测试 DB
d_field_read( )/d_field_write( ) 读写数据块中数据 DB
db_read( )/db_write( ) 整块数据读/写 DB
z_field_read( )/z_field_write( ) 读/写计数器 C
t_field_read( ) 读计时器 T
ag_zustand( ) PLC启停状态检测
要对PLC存储区进行读写操作首先建立IPC与PLC的连接。对于S7系列PLC的
MPI网络来说最多可同时建立32个连接。用STEP7软件包可以为每一个节点分配MPI
地址然后就可以对MPI通信进行编程操作了下面结合“变极性等离子弧焊”过程监控
软件中MPI通信接口程序编程过程说明LabWindows/CVI与PLC之间的MPI通信的实现方
法。
1建立地址表
PRODAVE S7软件中有一个结构体“adr_table_type”定义如下
typedef struct
{
unsigned char adr; /*MPI站地址*/
unsigned char segmentid; /*MPI网络段ID号*/
unsigned char slotno; /*PLC CPU 槽号*/
unsigned char rackno; /*PLC 架号*/
} adr_table_type;
此结构体中四位数字分别表示站、段、槽、架的位置号第一位表示PLC的MPI地址
第二位表示MPI网段的编号第三位表示PLC的CPU当前的槽号第四位表示PLC当前
的架号。在此采用默认设置建立地址表
adr_table_type plc_adr_table[1]= {{2,0,2,0}}
2建立连接
用load_tool (char nr, char * device, char * adr_table) 功能函数建立连接第一个参数代表
连接中的节点个数第二个参数代表设备驱动器的名称第三个参数代表地址表人口。用
new_ss (char no)功能函数激活连接参数代表所要建立的连接号即地址表中的第几个连接。
两个函数返回值均为整数若操作成功返回“0”。unload_tool是断开连接的功能函数。
int res1, res2;
if((res1=load_tool(1,"S7ONLINE",plc_adr_table)) ! = 0)
{
MessagePopup("异常","与PLC连接失败");
unload_tool();
}
if((res1=load_tool(1,"S7ONLINE",plc_adr_table)) = = 0)
{
res2 = new_ss(1); //激活连接
}
3读写PLC内部的存储区
在“变极性等离子弧焊”控制软件需要通过读取PLC内部系统状态位的当前值来显示
焊接作业所处的状态。在PRODAVE S7软件包中读取状态位当前值的功能函数为mb_bittest
int mbno, int bitno, char * retwert其中mbno为字节地址bitno为位地址retwert为存
储返回值的缓冲区地址。程序如下
char buffer ; //建立缓冲区
for( ; ; )
{
mb_bittest10buffer; //读取PLC中状态位的值
if (buffer = = 1)
{
……//状态指示灯亮起程序
}
else if (buffer = = 0)
{
……//状态指示灯熄灭程序
}
Sleep200;
}
以上程序可以以200毫秒为间隔来检测PLC中状态位M1.0的当前值并根据这个值
来控制程序界面上相应指示灯的状态如图2。
图2 焊接进程状态监测界面
将用户设定的焊接工艺参数传送给PLC是通过功能函数db_writeint dbno, int dwno, int
* amount, void * buffer来实现的。此函数功能是将参数写到DB块中。dbno为目的数据块
号dwno为数据的起始地址amount为数据的个数buffer为数据的值程序如下
int buffer = 100; //数据的值为100
int dbno = 2; //选择数据块2
int dwno = 5; //写入数据的起始地址为DW5
int amount = 1; //写入数据的个数为1个
int res; //保存写操作的返回结果
res = db_writedbno, dwno, &amount, buffer; //写入数据到PLC的DB块中
以上程序是将整数100写入到PLC数据块DB2中地址为DW5的存储区中。
3 MPI通信速度测试
本文利用VC6.0开发MPI通信测试程序进行了基于CP5611卡方案1和基于
PC/MPI编程电缆方案2的MPI通信速度测试实验。测试实验的软件平台选用
Windows2000硬件平台为Advantech IPC其CPU为PIV 2.4G256M内存。
测试原理测试程序在传输数据时控制API定时函数开始计时待到测试程序成功接
收PLC返回数据标志位自动停止计时这段时间间隔就定义为MPI通信时间。基于方案1
向PLC存储区中分别写入1个Bit数据基于方案2向PLC存储区写入1个Bit的数据
各进行10次测试记录完成通信所用的时间。
测试结果如图3所示图中的横坐标为试验序号纵坐标为测试通信时间。其中利用方
案1平均时间为20ms利用方案2通信的平均时间为192ms。前者比后者的速度快大约10
倍。
01234567891011
020406080100120140160180200
Communication Time Span(ms)
Test Number
Method 1
Method 2
图 3 MPI数据通信时间测试结果
5 结论
本文的创新点在于研究了虚拟仪器软件LabWindows/CVI与S7系列PLC的MPI数据通
信接口原理给出了MPI通信接口实现方案详细说明了MPI通信接口程序设计方法利
用所设计的通信接口测试程序对基于CP5611卡和基于编程电缆的MPI数据通信方案进行了
测试后发现这两种方案适合于通信负载较轻的数据传输场合。综上所述本文对今后此类
MPI通信软件的开发具有指导意义。