wincc的n个经典问题解答之三Word文档格式.docx

上传人:b****6 文档编号:20522912 上传时间:2023-01-23 格式:DOCX 页数:11 大小:19.96KB
下载 相关 举报
wincc的n个经典问题解答之三Word文档格式.docx_第1页
第1页 / 共11页
wincc的n个经典问题解答之三Word文档格式.docx_第2页
第2页 / 共11页
wincc的n个经典问题解答之三Word文档格式.docx_第3页
第3页 / 共11页
wincc的n个经典问题解答之三Word文档格式.docx_第4页
第4页 / 共11页
wincc的n个经典问题解答之三Word文档格式.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

wincc的n个经典问题解答之三Word文档格式.docx

《wincc的n个经典问题解答之三Word文档格式.docx》由会员分享,可在线阅读,更多相关《wincc的n个经典问题解答之三Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。

wincc的n个经典问题解答之三Word文档格式.docx

DBN=CC_testsql_99-12-03_12:

48:

26R;

READ

E:

\\testsql\\test.sql"

;

printf("

%s\r\n"

a);

ProgramExecute(a);

}

下面是一个简单的SQL文件内容:

select*frompde#hd#t#test;

outputtoE:

\\test2.txtFORMATascii

注意:

文件名及路径中不要带空格。

43:

如何整点启动归档?

在"

GlobalScript"

下的Projectfunctions编写函数:

cyclicarchive

BOOLcyclicarchive()

#pragmacode("

kernel32.dll"

);

voidGetLocalTime(SYSTEMTIME*lpst);

#pragmacode();

SYSTEMTIMEtime;

Intt1;

GetLocalTime(&

time);

t1=time.wMinute;

if(t1==00)

SetTagBit("

startarchive"

1);

return(BOOL)(GetTagBit("

));

}

在Tagloging中的"

Propertiesofprocesstag"

中的"

ArchiveTag"

tab下的Archivingtype选择Cycle-selective,在"

Event"

标签下的"

StartEvent"

内选择cyclicarchive函数。

44:

如何在按键组合被禁用的情况下,从WinCC运行环境进入WinCCControlCenter?

最好是做一个按钮,该按钮需要用用户权限保护,在该钮中编写如下C-action:

低于WinCC5.0版本:

user32.dll"

BOOLSetForegroundWindow(HWND);

HWNDhandle;

handle=FindWindow("

MCPFrameWndClass"

NULL);

If(!

SetForegroundWindow(handle))

Printf("

\r\nSetForegroundfails"

WinCC5.0版本以及更高的版本:

#pragmacode("

WinCCExplorerFrameWndClass"

45:

WinCC如何实现鼠标OnMouseOVer事件?

用WINDOWAPI函数GetCusorPos获取当前鼠标位置,用GetWindowRect函数获取窗口位置,两值相减得鼠标在WINCCframe上的相对位置。

用全局脚本(设定为1s定时刷新),然后获取要OnMouseOver事件的物体的位置,并与鼠标位置相比较,如一致则触发自己定义的动作。

#include"

intgscAction(void)

{

BOOLGetCusorPos(POINTlpPoint);

//获取鼠标的位置(绝对位置-对应屏幕分辨率)

BOOLGetWindowRect(HWNDhwnd,LPRECTlpRect);

//获取窗体_位置

POINTpPos;

RECTrRec;

HWNDhwnd;

BOOLbRet,bRet2;

longlLeft,lTop,lWidth,lHeight;

longlX,lY;

charszStr[100];

hwnd=FindWindow(NULL,"

WinCC-Runtime-"

//如语言为中文应为"

WinCC运行系统-"

if(hwnd==0){printf("

\r\nError!

WinCcHandleis%d"

hwnd);

gotoover;

bRet=GetCursorPos(&

pPos);

if(bRet==0)gotoover;

bRet2=GetWindowRect(hwnd,&

rRec);

if(bRet2==0)gotoover;

lX=pPos.x-rRec.left;

//鼠标对{置

lY=pPos.y-rRec.top;

//鼠标_位置

//如果为非全屏模式,需将上述数值中的高height判断减去标题栏的宽度

//printf("

TheCurrentCusorPosisx:

%d,y:

%d\r\n"

pPos.x,pPos.y);

TheCusorPosinWindowisx:

pPos.x-lLeft2,pPos.y-lTop2);

lLeft=GetLeft("

NewPdl0.Pdl"

"

Text1"

//Return-Type:

longint

lTop=GetTop("

lWidth=GetWidth("

lHeight=GetHeight("

if((lX>

=lLeft)&

&

(lY>

=lTop)&

(lX<

=lLeft+lWidth)&

(lY<

=lTop+lHeight)){

sprintf(szStr,"

%d,%d"

lX,lY);

SetText("

szStr);

char*

TheText1Posisx:

lLeft2,lTop-lTop2);

over:

return0;

46:

如何实现ASP与WinCCV6数据库sqlserver2000的连接?

WinCCV6用ODK获取DSN名,{后生成网址字符串,再用shellExecuteA函数打开网页

//----------------------------------------------------------------------------------

shell32.dll"

longShellExecuteA(HWND,LPCTSTR,LPCTSTR,LPCTSTR,LPCTSTR,int);

#pragmacode()

chardsnStr[100];

sprintf(dsnStr,"

http:

//dcount/test.asp?

dsnStr=%s"

GetDSN

(1));

//Return-Type:

LPCTSTR

\r\n%s"

dsnStr);

WinCC-Runtime"

ShellExecuteA(hwnd,"

open"

dsnStr,NULL,"

\\"

SW_SHOWNORMAL);

//-------------------------------------------------------------------------------------

ASP方面需要注意的是连接字符串的形式与普通acessODBC不太一样,而且需要用户名和密码

由于WINCC封装的sa用户的密码暂时不知道,所以必须用SQLServerEnterPriseManager建立自己的用户,添加systemAdministrator权限就可以了!

否则会出现错误提示

MicrosoftOLEDBProviderforSQLServer错误'

80040e4d'

Loginfailedforuser'

sa'

.

'

--------------------------------------------------------------------------------------

dsnStr=request("

dsnStr"

setconn=server.createobject("

adodb.connection"

setrs=server.createobject("

adodb.recordset"

conn.Provider="

sqloledb"

conn.open"

Server=DCOUNT\WINCC;

Database="

&

dsnStr&

"

UID=dcount;

pwd=;

"

rs.open"

select*fromtest"

conn,1,1

response.writers.recordcount

dowhilenotrs.eof

response.writers("

f1"

)&

---"

rs("

f2"

f3"

rs.movenext

loop

rs.close

conn.close

47:

如何在退出WINCC监控时直接关闭电脑?

1.利用动态向导

2.在脚本中加入DMExitWinCCEx(DM_SDMODE_SYSTEM);

也可以

如何通过WINCCAPI函数读出当前报警消息?

1、使用GMsgFunction中读出当前报警信息的ID(dwMsgNr);

2、使用MSRTGetMsgCSData函数读出该报警信息ID对应文本库TEXTLIB中的文本ID(dwTextID1);

3、使用MSRTGetMsgText函数读出该文本ID的文本。

信息到达处理:

如果读取文本成功,则置文本变量MSG。

信息离去处理:

如果MsgNr与上一次相同,则复位MSG,如果不是,则继续保持信息。

具体函数说明请看ODK文档

BOOLGMsgFunction(char*pszMsgData)

msrtcli.dll"

msrtapi.h"

MSG_TEXT_STRUCTtMeld;

MSG_CSDATA_STRUCTsM;

CMN_ERRORerr;

BOOLbRet;

DWORDdwTextID1;

DWORDdwMsgNum;

charszMsg[255];

#defineTAG_MSG"

MSG"

MSG_RTDATA_STRUCTmRT;

memset(&

mRT,0,sizeof(MSG_RTDATA_STRUCT));

if(pszMsgData!

=NULL)

{

printf("

Meldung:

%s\r\n"

pszMsgData);

sscanf(pszMsgData,"

%ld,%ld,%04d.%02d.%02d,%02d:

%02d:

%03d,%ld,%ld,%ld,%d,%d"

mRT.dwMsgNr,//Meldungsnummer

mRT.dwMsgState,//StatusMSG_STATE_COME,.._GO,.._QUIT,.._QUIT_SYSTEM

mRT.stMsgTime.wYear,//Tag

mRT.stMsgTime.wMonth,//Monat

mRT.stMsgTime.wDay,//Jahr

mRT.stMsgTime.wHour,//Stunde

mRT.stMsgTime.wMinute,//Minute

mRT.stMsgTime.wSecond,//Sekunde

mRT.stMsgTime.wMilliseconds,//Millisekunde

mRT.dwTimeDiff,//ZeitdauerderanstehendenMeldung

mRT.dwCounter,//InternerMeldungsz?

hler

mRT.dwFlags,//Flags(intern)

mRT.wPValueUsed,

mRT.wTextValueUsed);

//**************************************************************************************codefordcount

if(mRT.dwMsgState==MSG_STATE_COME)//信息到达处理

dwMsgNum=mRT.dwMsgNr;

printf("

\r\nTheAlarmMessageNois%d!

\r\n"

dwMsgNum);

bRet=MSRTGetMsgCSData(dwMsgNum,&

sM,&

err);

if(bRet==TRUE)

dwTextID1=sM.dwTextID[0];

\r\nTheTextIDofTheMessageNr%dis%d!

dwMsgNum,dwTextID1);

bRet=MSRTGetMsgText(1,dwTextID1,&

tMeld,&

sprintf(szMsg,"

%s"

tMeld.szText);

\r\nTheTextofTextID%dis%s!

dwTextID1,szMsg);

}

if(mRT.dwMsgState==MSG_STATE_GO)//信息离去处理

if(dwMsgNum==GetTagDWord(TAG_MSG_NR))SetTagChar(TAG_MSG,"

//Meldungsdateneinlesen

//Prozesswertelesen,fallsgew?

?

§

1nscht

Nr:

%d,St:

%x,%d-%d-%d%d:

%d:

%d.%d,Dur:

%d,Cnt%d,Fl%d\r\n"

mRT.dwMsgNr,mRT.dwMsgState,mRT.stMsgTime.wDay,mRT.stMsgTime.wMonth,mRT.stMsgTime.wYear,

mRT.stMsgTime.wHour,mRT.stMsgTime.wMinute,mRT.stMsgTime.wSecond,mRT.stMsgTime.wMilliseconds,mRT.dwTimeDiff,

mRT.dwCounter,mRT.dwFlags);

SetTagChar(TAG_MSG,szMsg);

return(TRUE);

49:

如何实现用户登陆日志(wincc中用c脚本实现?

)(柳树成林原创)

用户登陆日志:

(包括用户的登陆退出信息,以便查询在什么时间段是哪个用户在使用这个监控软件)

intgscAction(void)

VOIDGetLocalTime(LPSYSTEMTIMElpSystemTime);

#pragmacode()

char*username;

charbuf[128];

staticcharpreuser[128];

unsigneda,b,c,d,e,f;

FILE*fp;

SYSTEMTIMEsysTime;

//读取系统时间,并且复制给变量a,b,c,d,e,f

sysTime);

a=sysTime.wHour;

b=sysTime.wMinute;

c=sysTime.wSecond;

f=sysTime.wYear;

e=sysTime.wMonth;

d=sysTime.wDay;

//得到当前用户名称

username=GetTagChar("

@CurrentUser"

fp=fopen("

c:

\\wincclog.txt"

"

a+"

if(strcmp(username,preuser)!

=0)//如果当前用户名称和前一个用户名不同

if((strcmp(username,"

)!

=0)&

(strcmp(preuser,"

)==0))//如果当前用户名称不空同时前一个用户名为空

sprintf(buf,"

用户:

%s\t登陆时间是:

\t%d-%d-%d,%d-%d-%d\n"

username,a,b,c,d,e,f);

fputs(buf,fp);

}

else

)==0)&

=0))//如果当前用户名称为空同时前一个用户名不空

%s\t退出时间是:

preuser,a,b,c,d,e,f);

strcpy(preuser,username);

fclose(fp);

50:

在wincc画面编辑器里注册的OCX控件,由于开发时没有考虑到wincc标准控件中具备层次哪个属性!

所以不能够通过画面编辑器里的菜单进行设置OCX控件的层次关系!

建议不要把wincc中注册的OCX控件和wincc本身的标准控件重叠放置,否则wincc本身的标准控件将被覆盖!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1