pc从西门子plc读取数据的方法有两类:
1是通过wincc这类组态软件
2是自己用高级语言(vb、vc等等),方法主要有:
opc(西门子simaticnet opc、第三方kepware opc)
prodave(西门子的一个软件包,提高vb和c的通讯函数库)
simticnet软件提供了几个通讯dll(此法是一般的第三方scada所采用)
可以用其他组态软件,比如组态王。也可以用vb编写一程序然后从plc读取数据再写入数据库。如果不需要监控画面,我觉得vb好些。
.准备工作:载opc基金OPC Proxy DLL按照说明进行安装些态库opc程序运行所必须
1. 列文件拷贝至要运行OPC服务器OPC客户端机器SYSTEM32目录
copy opcproxy.dll C:\WINDOWS\system32
copy opccomn_ps.dll C:\WINDOWS\system32
copy opc_aeps.dll C:\WINDOWS\system32
copy opchda_ps.dll C:\WINDOWS\system32
copy aprxdist.exe C:\WINDOWS\system32
copy opcenum.exe C:\WINDOWS\system32
2. 注册些 dll 文件
REGSVR32 opcproxy.dll
REGSVR32 opccomn_ps.dll
REGSVR32 opc_aeps.dll
REGSVR32 opchda_ps.dll
3. windows 系统(\WINDOWS \system32)目存actxprxy.dll运行aprxdist.exe
4. 安装 opcenum.exe
opcenum /regserver
二.opcserver发
1. 新建vc工程比建控制台工程工程包含文件
#include "opcda.h"
#include "opc_ae.h"
#include "WTOPCsvrAPI.h"
#include "WtOPCsvrEXTapi.h"
文件例程序都能找拷贝自工程
WTOPCsvrAPI.h发包态库提供导函数文件面每函数具体说明调用候看说明
2. .cpp定义GUIDguid用标识opcserver唯id通操作系统工具编格式
const GUID
CLSID_OPCSimSvr = {0x99b8f472, 0xc037, 0x11d2, {0x80, 0xb8, 0x0, 0x60, 0x97, 0x58, 0x58, 0xbe}}
3. 工程加入WtOPCSvr态库连接
WTOPCsvr态库关文件都前例包面能找
WTOPCsvr.lib WTOPCsvr.dll应libdll
4. 初始化
(1)调用UpdateRegistry()函数完注册面调用参考例代码
BOOL COPCSimSvrApp::InitInstance()
{
TCHAR szTokens[] = _T("-/ ")
CString HelpPath
CString SvrName, SvrDescrip
int i
HelpPath = AfxGetApp()->m_pszHelpFilePath
i = HelpPath.ReverseFind('\\')
HelpPath = HelpPath.Left(i+1)
HelpPath += "OPCSIMSVR.EXE"
//
// Self-Registration code
// (look for cmdline options to register &unregister server)
//
SvrName = "WinTECH.OPCServer"
SvrDescrip = "WinTECH Software OPC Server Simulator"
CString tempCmdLine(m_lpCmdLine)
LPTSTR lpszToken = _tcstok(tempCmdLine.GetBuffer(1), szTokens)
while (lpszToken != NULL)
{
if (_tcsicmp(lpszToken, _T("UnregServer"))==0)
{
UnregisterServer ((BYTE *)&CLSID_OPCSimSvr, SvrName)
return (FALSE)
}
else if (_tcsicmp(lpszToken, _T("RegServer"))==0)
{
UpdateRegistry ((BYTE *)&CLSID_OPCSimSvr,
SvrName,
SvrDescrip,
HelpPath)
return (FALSE)
}
lpszToken = _tcstok(NULL, szTokens)
}
(2)调用InitWTOPCsvr完发包dll初始化
两步骤颠倒
5. 创建item
item服务器所item些item通opc库户端能浏览创建item函数CreateTag().
Opc两种址空间形式:扁平层结构
比调用创建点item1、item2、item3.类结构扁平各点类似与文件系统文件
比调用创建点test.item1、test.item2、test.item3种点名发包自形层点结构Test类似与文件系统文件夹item类似与文件系统文件夹文件扁平式层结构客户端浏览点名体现
层结构点名间默认用.隔简单我opcserver设计扁平结构
创建点返handle用标识点我程序需要自建立handle数据库保存设备实值应关系部参考例代码
6. 建立定器采集设备数据
定数据库取各handle应item值比较各item值否读取值变化变化调用UpdateTagToList放入应队列发包自变化值送客户端
致流程
(1) 数据库采集遍所点实值
(2) 调用StartUpdateTags()
(3) 循环读取每item数据库数据读取进行比较变化调用UpdateTagToList()
(4) 用调用EndUpdateTags()完所item更新
7. 客户端控制
客户端写tag值候opcserver通调函数响应
服务器端必须调用EnableWriteNotification()指定写值调函数调函数格式:
typedef VOID (CALLBACK* WRITENOTIFYPROC)(HANDLE, VARIANT*, DWORD*)
调函数内部实现HANDLE指定tag写具体控制设备应变量
8. 其用函数
RequestDisconnect()般opcserver关闭调用用通知客户端opcserver自要关闭
NumbrClientConnections()用计算前少客户端连接opcserver
UninitWTOPCsvr()程序退清理
SetVendorInfo()设置厂商信息
三.opc客户端测试
面本机opcquickclient.exe例说明服务器客户端间应用关系
1. 运行opcquickclient.exe
2. 点击edit->new server connection 菜单弹server properties框展opc data access server version 2.0.浏览本机安装所opcserver选我自发opcserver点击确定完与服务器连接
3. 点击edit->new group 用默认值添加组
4. 点击edit->new item 弹框(图层结构址空间例单层更简单)选左侧某父节点右侧显示各tag选要向opcserver查询tag点击add leaves点击ok
5. 客户端主界面能看刚才要查询tag自跟随opcserver端数据变化变换
6. 右键要控制tag菜单选择同步写或者异步写(般建议用异步避免阻塞客户端运行)键入要写入值查看设备否作检验opcserver否编写确
1、 OPC服务介绍西门子提供的最新软件:Simatic Net PC-Software CD 2005为各种组态软件的开发提供了一个统一的平台,它建立的PC站既为一些组态软件,如:WinCC、Protol等提供了与PLC的通讯平台,也提供了一套编程接口,可使用高级语言编程通过Simatic Net访问PLC数据。本文讨论的主要就是这个编程接口,最新版的Simatic NET支持五种编程方式:
<1>、ActiveX控件
提供了一系列数据访问控件,以便于向VB6这种语言使用控件的方式与PLC通讯。
<2>、OPC自动化
为VB6、Dephi等语言运用OLE 自动化的方式进行编程。
<3>、OPC用户接口
这是专门为VC++提供的一种高效编程方式,其灵活程度与执行效率比前面的两种方式均要高得多。
<4>、针对微软的.NET平台的OPC用户接口
这也是一种非常灵活的编程接口,不过它针对的是.NET平台,其提供了大量的.NET类库,以便于像VC#、VB.NET等高级语言编程。本文将详细的介绍该接口。
<5>、OPL XML接口
顾名思义,主要是针对XML编程的。
对于<2>、<3>、<4>编程方式,他们各自又可以分为同步访问方式和异步访问方式。按西门子的文档解释:同步通讯指的是当一个客户在访问服务器时,其他客户的访问必须等待,直到服务器处理完该客户的请求,才能继续进行下一个服务,异步访问与之正好相反,本文主要讲的是同步编程篇,异步篇以后再提供。
2、 配置OPC服务器
要进行编程,必须先配置服务器。本文以Prfibus DP网络为例,介绍PC站的配置。其内容主要来自西门子文档。
需要的软件:
Step7 V5.3
Simatic Net PC-Software CD 2005
需要的硬件:
至少为CP5611或以上级别,笔记本可以为CP5511,带DP口的S7-300 PLC(若使用Simatic NET的仿真功能可以不需要这些硬件,后面会介绍到)
<1>、组态一个S7站,配置Profibus DP网络,其DP地址设为3,并下载到PLC,然后把网线由MPI口转到DP口。S7站的配置这里就不介绍了。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)