27用户编程.pdf
《27用户编程.pdf》由会员分享,可在线阅读,更多相关《27用户编程.pdf(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、编程应用 27.用户编程.27-1.27.27.27.27.用户编程用户编程用户编程用户编程?使用使用使用使用 APIAPIAPIAPI 访问系统访问系统访问系统访问系统?在系统附件目录下,有两个分别使用 VC60 和 VB60 编写的访问系统的例子程序,供学习参考,分别为fmAPIVCDemo、fmAPIVBDemo:?在系统目录下提供以下 3 个文件,作为系统的 API 访问库:fmvisiter.h、fmvisiter.lib、fmvisiter.dll;需要把它们拷贝到自己编写的应用程序中;?API 提供了以下接口函数:/1打开与关闭数据库,建议访问多个变量时使用,能明显提高效率;/打
2、开或关闭运行数据库成功返回 1,否则返回 0;/打开数据库失败时,不要访问变量;BOOL OpenRunDB();BOOL CloseRunDB();编程应用 27.用户编程.27-2./2通过变量索引访问变量,建议使用,可提高访问变量速度;/VarType 为变量类型,取值 1-8,对应 AI/AO/AR/DI/DO/DR/VA/VD;/VarName为变量名称,最大长度20个字符;VarIndex为变量索引,VarIndex=0;fValue为变量值;#define AI 1#define AO 2#define AR 3#define DI 4#define DO 5#define DR
3、 6#define VA 7#define VD 8 FMVISITER_API BOOL GetVarIndex(BYTE VarType,char*VarName,int*VarIndex);FMVISITER_API BOOL GetVarValue(BYTE VarType,int VarIndex,float*fValue);FMVISITER_API BOOL SetVarValue(BYTE VarType,int VarIndex,float fValue);/3通过变量名称访问变量,建议只在简单慢速访问某变量时使用;FMVISITER_API BOOL GetAIValue(
4、char*VarName,float*retValue);FMVISITER_API BOOL GetAOValue(char*VarName,float*retValue);FMVISITER_API BOOL SetAOValue(char*VarName,float setValue);FMVISITER_API BOOL GetARValue(char*VarName,float*retValue);FMVISITER_API BOOL SetARValue(char*VarName,float setValue);FMVISITER_API BOOL GetDIStatus(char
5、*VarName,BYTE*retStatus);FMVISITER_API BOOL GetDOStatus(char*VarName,BYTE*retStatus);FMVISITER_API BOOL SetDOStatus(char*VarName,BYTE setStatus);FMVISITER_API BOOL GetDRStatus(char*VarName,BYTE*retStatus);FMVISITER_API BOOL SetDRStatus(char*VarName,BYTE setStatus);FMVISITER_API BOOL GetVAValue(char*
6、VarName,float*retValue);FMVISITER_API BOOL SetVAValue(char*VarName,float setValue);FMVISITER_API BOOL GetVDStatus(char*VarName,BYTE*retStatus);FMVISITER_API BOOL SetVDStatus(char*VarName,BYTE setStatus);FMVISITER_API BOOL GetVTText(char*VarName,char*retText);FMVISITER_API BOOL SetVTText(char*VarName
7、,char*setText);/4读写设备数据表/DevNo为设备号,取值1-2000;/StartByte为开始字节单元,取值0-1023;/ByteLength为字节长度,取值1-1024;/pBuffer为设备号数据缓存区;BOOL GetDevTable(int DevNo,int StartByte,int ByteLength,PBYTE pBuffer);BOOL SetDevTable(int DevNo,int StartByte,int ByteLength,PBYTE pBuffer);编程应用 27.用户编程.27-3.?使用 VB 编程时,需要把 API 函数导入到项
8、目中:*打开与关闭运行数据库*Declare Function OpenRunDB Lib fmVisiter.dll()As Long Declare Function CloseRunDB Lib fmVisiter.dll()As Long*通过变量索引访问变量 AI=1、AO=2、AR=3、DI=4、DO=5、DR=6、VA=7、VD=8;*Declare Function GetVarIndex Lib fmVisiter.dll(ByVal VarType As Byte,ByVal VarName As String,varIndex As Long)As Long Declar
9、e Function GetVarValue Lib fmVisiter.dll(ByVal VarType As Byte,ByVal varIndex As Long,varValue As Single)As Long Declare Function SetVarValue Lib fmVisiter.dll(ByVal VarType As Byte,ByVal varIndex As Long,ByVal varValue As Single)As Long*通过变量名称访问变量*AI Declare Function GetAIValue Lib fmVisiter.dll(By
10、Val VarName As String,varValue As Single)As Long AO Declare Function GetAOValue Lib fmVisiter.dll(ByVal VarName As String,varValue As Single)As Long Declare Function SetAOValue Lib fmVisiter.dll(ByVal VarName As String,ByVal varValue As Single)As Long AR Declare Function GetARValue Lib fmVisiter.dll
11、(ByVal VarName As String,varValue As Single)As Long Declare Function SetARValue Lib fmVisiter.dll(ByVal VarName As String,ByVal varValue As Single)As Long DI Declare Function GetDIStatus Lib fmVisiter.dll(ByVal VarName As String,varValue As Byte)As Long DO Declare Function GetDOStatus Lib fmVisiter.
12、dll(ByVal VarName As String,varValue As Byte)As Long Declare Function SetDOStatus Lib fmVisiter.dll(ByVal VarName As String,ByVal varValue 编程应用 27.用户编程.27-4.As Byte)As Long DR Declare Function GetDRStatus Lib fmVisiter.dll(ByVal VarName As String,varValue As Byte)As Long Declare Function SetDRStatus
13、 Lib fmVisiter.dll(ByVal VarName As String,ByVal varValue As Byte)As Long VA Declare Function GetVAValue Lib fmVisiter.dll(ByVal VarName As String,varValue As Single)As Long Declare Function SetVAValue Lib fmVisiter.dll(ByVal VarName As String,ByVal varValue As Single)As Long VT Declare Function Get
14、VTText Lib fmVisiter.dll(ByVal VarName As String,ByVal varValue As String)As Long Declare Function SetVTText Lib fmVisiter.dll(ByVal VarName As String,ByVal varValue As String)As Long*访问设备数据表*Declare Function GetDevTable Lib fmVisiter.dll(ByVal Devno As Long,ByVal StartByte As Long,ByVal Bytelen As
15、Long,ByteBuffer As Byte)As Long Declare Function SetDevTable Lib fmVisiter.dll(ByVal Devno As Long,ByVal StartByte As Long,ByVal Bytelen As Long,ByteBuffer As Byte)As Long Declare Function SetDevTablBit Lib fmVisiter.dll(ByVal Devno As Long,ByVal ByteNo As Long,ByVal BitNo As Long,Status As Byte)As
16、Long?以 VC+为例:?把文件 fmvisiter.h、fmvisiter.lib 拷贝到项目目录下,并加入到项目中:?使 fmvisiter.dll 文件与编译后的可执行文件在同一目录下;?读取 AI.VAR1 变量 float fValue=0;BOOL bValue=GetAIVarValue(VAR1,&fValue);CString s;if(bValue=TRUE)s.Format(读取变量成功!VAR1=%.2f,fValue);else s=读取变量失败!;?读取 DI.VAR1 变量 BYTE byteValue=0;BOOL bValue=GetDIVarValue(V
17、AR1,&byteValue);CString s;编程应用 27.用户编程.27-5.if(bValue=TRUE)s.Format(读取变量成功!VAR1=%i,byteValue);else s=读取变量失败!;?修改 AR.VAR1 变量=123.45 BOOL bValue=SetARVarValue(VAR1,123.45);CString s;if(bValue=TRUE)s.Format=修改变量成功!;else s=读取变量失败!;?修改 DR.VAR1 变量=1 BOOL bValue=SetDRVarValue(VAR1,1);CString s;if(bValue=TR
18、UE)s.Format=修改变量成功!;else s=读取变量失败!;?从设备表 D2 中读取 100 个字节数据,从 0 字节单元开始 BYTE Buffer100;GetDevTable(2,0,100,Buffer);?根据变量索引读取 AI.AI1 变量 int VarIndex=-1;float VarValue=0;if(GetVarIndex(1,AI1,&VarValue)=TRUE)GetVarValue(1,VarIndex,&VarValue);?修改多个 VT 变量(VT0001-VT0300):char varName21;char varText100;CStrin
19、g ts;CTime ct=CTime:GetCurrentTime();for(int i=1;i=300;i+)memset(varName,0,21);ts.Format(VT%.4i,i);memcpy(varName,ts,ts.GetLength();ts=ct.Format(%Y-%m-%d%H:%M:%S);memset(varText,0,100);memcpy(varText,ts,ts.GetLength();SetVTText(varName,varText);编程应用 27.用户编程.27-6.?访问多个变量(如 VA.VA0001-VA10000),建议打开运行数据
20、库,并通过索引访问;/定义变量索引数组 int varIndex10000;/得到变量索引,首次得到索引耗时较多,获得 1 万个变量索引大概需要 3 秒左右;CString ts;char ch21;if(OpenRunDB()=TRUE)for(int i=0;i10000;i+)ts.Format(VA%.4i,i+1);memset(ch,0,21);memcpy(ch,ts,ts.GetLength();if(GetVarIndex(VA,ch,&varIndexi)=FALSE)varIndexi=-1;CloseRunDB();/访问变量,访问 1 万个变量,大概需要 1 秒左右;
21、if(OpenRunDB()=TRUE)float fValue=0;for(int i=0;i=0)GetVarValue(VA,varIndexi,&fValue);fValue+;SetVarValue(VA,varIndexi,fValue);CloseRunDB();?访问设备数据表:if(OpenRunDB()=TRUE)BYTE Buffer100;if(GetDevTable(2,0,100,Buffer)=TRUE)if(SetDevTable(2,0,100,Buffer)=TRUE)CloseRunDB();编程应用 27.用户编程.27-7.?以 VB 为例:?访问设备
22、数据表:Dim Buffer(1000)As Byte Dim ret As Long ret=OpenRunDB()If ret=1 Then ret=GetDevTable(1,0,1000,Buffer(0)Buffer(0)=Buffer(0)+1 SetDevTable 1,0,1000,Buffer(0)ret=CloseRunDB()End If?通过索引号访问变量:Dim ret As Long ret=OpenRunDB()If ret=1 Then Dim varIndex As Long ret=GetVarIndex(7,%VA1,varIndex)If varInde
23、x=0 Then Dim varValue As Single ret=GetVarValue(7,varIndex,varValue)varValue=varValue+1 ret=SetVarValue(7,varIndex,varValue)Text2.Text=varValue End If ret=CloseRunDB()End If?通过名称直接访问变量:Dim Value As Single Dim ret As Long ret=GetVAValue(%VA1,Value)Value=Value+1 ret=SetVAValue(%VA1,Value)编程应用 27.用户编程.
24、27-8.?使用使用使用使用 COMCOMCOMCOM 组件访问组件访问组件访问组件访问本地本地本地本地系统系统系统系统?系统提供了 COM 组件可访问本地变量,名称为fmDMO.RunDb,对应文件 fmDMO.dll,提供以下方法:?打开运行数据库:VARIANT Open();/打开成功返回 1,否则返回 0;?关闭运行数据库:Close();/使用完毕,必须关闭运行数据库;?得到变量类型和名称得到变量索引号:VARIANT GetVarIndex(VarType,VarName)VarType 为变量类型,1=AI,2=AO,3=AR,4=DI,5=DO,6=DR,7=VA,8=VD,
25、9=VT;VarName 为变量名称;返回值为 VT_I4 类型的索引编号,通过此编号来访问变量;?通过变量类型和索引得到变量值:VARIANT GetVarValue(VarType,VarIndex)VarType 为变量类型,1=AI,2=AO,3=AR,4=DI,5=DO,6=DR,7=VA,8=VD,9=VT;VarIndex 为通过 GetVarIndex 得到的变量索引;AI/AO/AR/DI/DO/DR/VA/VD 返回 VT_R4 类型的浮点数,VT 返回 VT_BSTR 类型的字符串;?通过变量类型和索引修改变量值:SetVarValue VarType,VarIndex,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 27 用户 编程
限制150内