西门子PLC的通信协议主要是PPI、MPI、Profibus、CP243/CP343/CP443 网络协议,prodave是早期完成的程序接口,除了网络协议外其它的主要协议都支持,SoftNet是西门子最新推出的通信协议接口,稳定,并且大而全,目前西门子所有主流的协议都支持(我的blog文章:西门子Softnet驱动的成功开发已经做了简单介绍),由于好多朋友对prodave都比较关注,所以我这里专门写篇blog来简单介绍一下。
我所知道的最新的Prodave的版本是V5.5,完整版的要45兆左右,由于出的比较早,所以动态库“W95_s7.dll”的名称保留至今,我最早接触是在01~02年,不过当时版本好像不到V5.5,与S7-200通信很不稳定,并且访问周期比较长。给我的感觉Prodave好像专门为S7-300制作的(从库函数的声明可以看出),连S7-300相对而言比较顺利。
组态王、力控好多主流工控软件访问西门子PLC都是通过Prodave或Softnet的,可以在驱动程序中看到熟悉的W95_s7.dll,所以通信能力大家还是应该放心的。
题外话,对嵌入式系统,如WinCE,由于不能直接使用Prodave和Softnet,所以要实现与西门子PLC通信,一般只有破解了(西门子的通信协议都是保密的,并且也是加密的,一般不公开给客户),目前实现的较好的主要有PPI,MPI(需要MPI适配器,不同适配器通信协议有一定区别),CP243,CP343/CP443。
下面是我在开发相关西门子通信程序时,做的一个VC测试程序,仅供参考(Prodave简版驱动和相关测试代码,我已经上传,文章后面附下载连接)。
voidCTestDlg::OnProdave()
{
intiRes;
CStringmyStr;
signedcharBuffer[2048];
WORD*Buffer_int=(WORD*)Buffer;
unsignedchar*Buffer_byte=(unsignedchar*)Buffer;//WORDwValue;
//m_field_readMB200
iRes=m_field_read(200,1,Buffer);
if(iRes==0)
{
m_Dis.SetSel(100000,100000);
m_Dis.ReplaceSel(" ");
myStr.Format("MB200=%3d",Buffer_byte[0]);
m_Dis.ReplaceSel(myStr);
UpdateData(false);
}
else
{
//myStr.Format("m_field_readerrorno:%d",iRes);
AfxMessageBox(ErrString(iRes));
}
//m_field_read
iRes=m_field_read(100,1,Buffer);
if(iRes==0)
{
m_Dis.SetSel(100000,100000);
m_Dis.ReplaceSel(" ");
myStr.Format("MB100=%3d",Buffer_byte[0]);
m_Dis.ReplaceSel(myStr);
UpdateData(false);
}
else
{
AfxMessageBox(ErrString(iRes));
}
//m_field_read
iRes=a_field_read(0,1,Buffer);
if(iRes==0)
{
m_Dis.SetSel(100000,100000);
m_Dis.ReplaceSel(" ");
myStr.Format("QB0=%3d",Buffer_byte[0]);
m_Dis.ReplaceSel(myStr);
UpdateData(false);
}
else
{
AfxMessageBox(ErrString(iRes));
}
//写数据MB110
unsignedlongvalue;
value=100;
memcpy(Buffer,&value,4);
iRes=m_field_write(111,1,Buffer);
if(iRes==0)
{
m_Dis.SetSel(100000,100000);
m_Dis.ReplaceSel(" ");
myStr.Format("MB110=%3d",Buffer[0]);
m_Dis.ReplaceSel(myStr);
UpdateData(false);
}
else
{
AfxMessageBox(ErrString(iRes));
}
//写数据MB4
BYTEvalue1;
value1=33;
memcpy(Buffer,&value,1);
iRes=m_field_write(4,1,Buffer);
if(iRes==0)
{
m_Dis.SetSel(100000,100000);
m_Dis.ReplaceSel(" ");
myStr.Format("MD4=%3d",Buffer[0]);
m_Dis.ReplaceSel(myStr);
UpdateData(false);
}
else
{
AfxMessageBox(ErrString(iRes));
}
}
voidCTestDlg::OnLoad()
{
adr_table_typemyTable[2];
myTable[0].adr=3;
myTable[0].segmentid=0;
myTable[0].slotno=2;
myTable[0].rackno=0;
myTable[1].adr=0;
myTable[1].segmentid=0;
myTable[1].slotno=2;
myTable[1].rackno=0;
intiRes;
CStringmyStr;
//初始化ProDave300
iRes=load_tool(1,"S7ONLINE",myTable);
if(iRes==0)
{
m_Dis.SetSel(30000,30000);
m_Dis.ReplaceSel(" ");
m_Dis.ReplaceSel("load_toolok!");
UpdateData(false);
}
else
{
AfxMessageBox(ErrString(iRes));
unload_tool();
return;
}
}
voidCTestDlg::OnUnloadtool()
{
intiRes;
CStringmyStr;
iRes=unload_tool();
if(iRes==0)
{
m_Dis.SetSel(30000,30000);
m_Dis.ReplaceSel(" ");
m_Dis.ReplaceSel("unload_toolok!");
m_Dis.ReplaceSel(" ");
UpdateData(false);
}
else
{
AfxMessageBox(ErrString(iRes));
}
}
voidCTestDlg::OnStatus()
{
intiRes;
CStringmyStr;
charmyInfo[512];
iRes=ag_zustand(myInfo);
if(iRes==0)
{
m_Dis.SetSel(30000,30000);
m_Dis.ReplaceSel(" ");
m_Dis.ReplaceSel("ag_zustandok!");
UpdateData(false);
if(myInfo[0]==0)
{
m_Dis.ReplaceSel(" ");
m_Dis.ReplaceSel("RUN");
}
else
{
m_Dis.ReplaceSel(" ");
m_Dis.ReplaceSel("STOP");
}
UpdateData(false);
}
else
{
AfxMessageBox(ErrString(iRes));
}
}
LPSTRCTestDlg::ErrString(WORDwErrCode)
{
LPSTRmyStr1;
switch(wErrCode)
{
case517:
{
return"PRODAVEnotinitialized.";
break;
}
case787:
{
return"Incorrectrate/Interruptvector.";
break;
}
case789:
{
return"MPIAddresserror.";
break;
}
case800:
case818:
{
return"hardwarefault.";
break;
}
case820:
{
return"comnotavaliable.";
break;
}
case898:
case900:
{
return"nodriverordevicefound.";
break;
}
case16386:
{
return"Connectionnotestablished.";
break;
}
default:
{
CStringmyStr;
myStr.Format("%d",wErrCode);
myStr1=myStr.GetBuffer(0);
myStr.ReleaseBuffer();
returnmyStr1;
}
}
}
voidCTestDlg::OnNewss()
{
//激活连接
intiRes;
iRes=new_ss(1);
if(iRes==0)
{
m_Dis.SetSel(100000,100000);
m_Dis.ReplaceSel(" ");
m_Dis.ReplaceSel("new_ssok!");
UpdateData(false);
}
else
{
AfxMessageBox(ErrString(iRes));
unload_tool();
return;
}
}
voidCTestDlg::OnAginfo()
{
//读PLC信息
intiRes;
charmyInfo[512];
iRes=ag_info(&myInfo[0]);
if(iRes==0)
{
m_Dis.SetSel(100000,100000);
m_Dis.ReplaceSel(" ");
m_Dis.ReplaceSel("ag_infook!");
UpdateData(false);
m_Dis.ReplaceSel(" ");
m_Dis.ReplaceSel(&myInfo[4]);
UpdateData(false);
}
else
{
AfxMessageBox(ErrString(iRes));
unload_tool();
return;
}
}
prodave 测试程序:http://download.csdn.net/source/228758
Prodave简版驱动:http://download.csdn.net/source/228765
分享到:
相关推荐
标题中的“PRODAVE 5.5.rar”表明这是一个名为“PRODAVE”的软件的版本5.5的压缩包文件,格式为RAR。RAR是一种流行的压缩格式,通常用于存储和分发大型文件集,因为它可以提供更好的压缩比和错误修复功能。 描述中...
PRODAVE5.5.part2.rar PC PLC开发包
**Prodave 5.5** 是西门子推出的一款用于编程和调试SIMATIC S7系列PLC(可编程逻辑控制器)的专业软件。该软件的主要功能是为用户提供一个友好的编程环境,以便他们能够高效地创建、编辑、测试和诊断与S7 PLC相关的...
在描述中提到的“下载Prodave5.5_a,Prodave5.5_b”,这通常意味着软件的分发采用了多部分文件的形式,可能是因为文件太大,为了方便用户下载和管理,被分成了多个部分。用户需要下载这些文件(例如:disk4、Disk1、...
### 西门子PLC Prodave 5.5 编程...综上所述,《西门子PLC Prodave 5.5编程手册》详细介绍了Prodave 5.5的基本功能、操作指南、与不同编程环境的集成方法等内容,为用户提供了一个全面了解并使用该工具箱的指导手册。
**PRODAVE S7 V5.5** 是西门子为PGs(编程设备)和PCs设计的一款工具箱软件,用于通过MPI接口及PC/MPI电缆在PG/PC与SIMATIC S7系列PLC之间建立数据链路。此手册详细介绍了如何安装和操作PRODAVE S7 V5.5,并提供了...
西门子PLC的通信协议主要是PPI、MPI、Profibus、CP243CP343CP443 网络协议,prodave是早期完成的程序接口,除了网络协议外其它的主要协议都支持
在安装或使用Prodave5.5_b之前,用户需要先把这些分卷文件全部下载并放在同一目录下,然后使用相应的解压工具(如WinRAR或7-Zip)进行合并和解压缩,这样完整的软件安装包才能被恢复。 在处理"prodave"软件...
西门子Prodave相关资料,在开发pc机与西门子PLC通信的驱动程序时要用的。
### 西门子Prodave6.0在C#中的应用:深入解析与实践 #### 一、引言 在工业自动化领域,与可编程逻辑控制器(PLC)的通信是必不可少的一部分,尤其对于西门子S7系列PLC,其在工业现场控制中的广泛应用使其成为了...
1. **选择示例程序**:安装目录(例如`C:\Program Files (x86)\SIEMENS\PRODAVE_S7\6.2`)下包含了一些示例程序,如“Sample_VB”,可以帮助用户快速上手。 2. **配置通讯参数**:根据实际需求设置通讯参数,包括...
《基于Prodave 6.2的西门子PLC数据导出及VC源码解析》 在工业自动化领域,西门子PLC(可编程逻辑控制器)被广泛应用于各种控制系统中,而数据的读取与导出是系统监控、调试和故障诊断的重要环节。Prodave是西门子...
西门子开发包 可直接写电脑程序和PLC通信
西门子开发包,PRODAVE MPI IE V6.0,是西门子为工业自动化领域提供的一个强大的软件工具,主要用于编程和调试S7系列的PLC(可编程逻辑控制器)。这款开发包集成了多种功能,包括编程、通信、诊断和项目管理,使得...
-使用PRODAVE6_IE.dll类库,其中的接口均为中文接口; -读取的数据长度测试最长为40组数据; -PRODAVE6.Dll控件请与接口类库控件放在一起使用; -类库使用没有任何限制; -西门子通讯的前提需要安装西门子编程软件,建立好...
西门子PRODAVE(Programmable Data Exchange)是一款由西门子提供的软件工具,用于实现PLC(可编程逻辑控制器)与计算机之间的数据交换。在这个特定的场景中,我们关注的是如何使用PRODAVE 6.0版本与S7-300系列PLC...
- 如Delphi下的示例程序展示了如何使用Prodave S7 V5.6进行数据读写操作。 #### 四、注意事项与区别 ##### 4.1 注意事项 - **S7-200系列**:需要注意的是,该系列的功能相比S7-300/400较为有限。 - **S7-300/400...
**产品介绍** `prodave` 是一款用于与西门子PLC(200/...综上所述,`prodave` 是一种强大的工具,帮助开发者在VB或VC环境中实现与西门子PLC的有效通讯。通过学习和实践,你可以创建出满足各种需求的自动化控制应用。
将该文件放在程序所在目录下,即可通过error_message函数获得错误的具体信息,便于调试和发现问题。 具体信息可参见上传的另一资源“西门子Prodave S7 V5.6工具箱英文手册"第57页。
本文将详细介绍如何使用PRODAVE这一工具来实现对Siemens PLC(可编程逻辑控制器)的编程访问,尤其是在Visual Basic (VB) 和 Visual C++ (VC) 环境下的应用。PRODAVE 是 Siemens 提供的一款用于在 PC 上开发 PLC ...