wincc-全套脚本总结 联系客服

发布时间 : 星期一 文章wincc-全套脚本总结更新完毕开始阅读

}

SetTagDWord(\

然后用一个按钮控制二进制变量Q,为启动信号。物体的X位置对应的是变量P,设置为模拟量。当P为1的时候对应的X位置。P为2的时候对应X的位置,以此类推,就可以做出物体移动画面了,要做全局脚本 -----------------------------------------------

——————10、WinCC

中调用SQL语言 ——————

1、创建一个 SQL文件,此文件在ISQL中建立,文件内包含所要执行的SQL语句。Windows对话框实现。具体如下:

2、在WinCC中用C Script 调用上述SQL文件,如下所示: #include"apdefap.h"

void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags,int x,int y) {

char*a="c:siemenscommonSQLANYISQL-q-b-c UID=DBA;PWD=SQL;DBF=E:testsqltestsqlRT.DB; DBN=CC_testsql_99-12-03-12:48:26R;READ E:testsqltest.sql"; Printf("%srn",a); ProgramExcute(a); }

下面是一个简单的SQL文件内容: select *from pde#hd#t#test;

output to e:test2.txt FORMAT ascii 注意:文件名及路径中不要带空格。

——————11、设置或重置一个变量——————

void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) {

BOOL z;

z=GetTagBit("MyBitVariable");//获得变量值 if (z==0)

SetTagBit("MyBitVariable",1); //设置变量值 else

SetTagBit("MyBitVariable",0); }

——————12、运行时图形产生动态旋转——————

#include "apdefap.h"

long _main(char* lpszPictureName, char* lpszObjectName, char*

5

lpszPropertyName) {

static int x=25,y,z;//x为半径的初始值为25,y为切换变量,z为搅拌机运行状态变量 z=GetTagBit("202搅拌机运行"); //取得PLC搅拌机的运行状态 if(z!=0) {

switch(y) {

case 0: x=x-4; if(x<=0) y=1; break; default : x=x+4;

if(x>=25) y=0; break; } }

return x; }

——————13、WINCC--如何在程序中动态修改用户密码 —————— 1、点击“开始”--》“设置”--》“控制面板”--》“管理工具”--》“数据源(ODBC)”,打开ODBC数据源管理器

2、在用户DSN页面的用户数据源中找到与当前项目所关联的一项,其名称为“CC_项目名_项目建立日期时间”,记下该项的名称 3、在脚本中加入以下代码: #pragma code(\ #include \.H\ #pragma code()

LPCMN_ERROR err; //定义的LPCMN_ERROR型变量,在函数调用中需使用 if (PWGENConnect(\建立与数据库的联接,其中CC_ass_04-09-21_16:35:22用第二步中记下的名称取代 { if

(PWGENChangePassword(GetTagChar(\(\修改密码,user,oldpassword,password分别为存贮用户名,原密码,新密码的内部变量,类型为文本变量8位字符集 {

//密码修改成功后的操作,如给用户提示等 } }

6

PWGENDisconnect(err); //断开与数据库的联接 4、编译运行程序 5、工作完成

6、与用户管理相关的函数定义存贮在APPLIB目录下的USEGENAP.H文件中,可根据上面示例自行完成添加用户,修改权限等功能。

——————14、WinCC如何实现鼠标OnMouseOVer事件 —————— 用WINDOWAPI函数GetCusorPos获取当前鼠标位置,用GetWindowRect函数获取窗口位置,两值相减得鼠标在WINCC frame上的相对位置。用全局脚本(设定为1s定时刷新),然后获取要OnMouseOver事件的物体的位置,并与鼠标位置相比较,如一致则触发自己定义的动作。

#include \int gscAction( void ) {

#pragma code(\

BOOL GetCusorPos(POINT lpPoint); //获取鼠标的位置(绝对位置-对应屏幕分辨率) BOOL GetWindowRect(HWND hwnd,LPRECT lpRect); //获取窗体位置 #pragma code(); POINT pPos; RECT rRec; HWND hwnd; BOOL bRet,bRet2;

long lLeft,lTop,lWidth,lHeight; long lX,lY; char szStr[100];

hwnd=FindWindow(NULL,\如语言为中文应为\运行系统-\if (hwnd==0) {printf(\bRet=GetCursorPos(&pPos); if (bRet==0) goto over;

bRet2=GetWindowRect(hwnd,&rRec); if (bRet2==0) goto over;

lX=pPos.x-rRec.left; //鼠标 对{置 lY=pPos.y-rRec.top; //鼠标 位置

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

//printf(\ lLeft=GetLeft(\ lTop=GetTop(\ lWidth=GetWidth(\ lHeight=GetHeight(\

if ((lX>=lLeft)&&(lY>=lTop)&&(lX<=lLeft+lWidth)&&(lY<=lTop+lHeight)) { sprintf(szStr,\

7

SetText(\}

//printf(\ over: return 0; }

——————————————————————————————————————— ——————15、如何在退出

WINCC监控时直接关闭电脑 ——————

1.利用动态向导

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

——————16、过

WINCC API函数读出当前报警消息 ——————

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

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

3、使用MSRTGetMsgText函数读出该文本ID的文本。 信息到达处理:如果读取文本成功,则置文本变量MSG。

信息离去处理:如果MsgNr与上一次相同,则复位MSG,如果不是,则继续保持信息。 具体函数说明请看ODK文档

BOOL GMsgFunction( char* pszMsgData) {

#pragma code(\ #i nclude \ #pragma code();

MSG_TEXT_STRUCT tMeld; MSG_CSDATA_STRUCT sM; CMN_ERROR err; BOOL bRet;

DWORD dwTextID1; DWORD dwMsgNum; char szMsg[255];

#define TAG_MSG \

MSG_RTDATA_STRUCT mRT;

memset( &mRT, 0, sizeof( MSG_RTDATA_STRUCT ) ); if( pszMsgData != NULL ) {

printf( \ sscanf( pszMsgData, \ &mRT.dwMsgNr, // Meldungsnummer

&mRT.dwMsgState, // Status MSG_STATE_COME, .._GO, .._QUIT, .._QUIT_SYSTEM &mRT.stMsgTime.wYear, // Tag

8