搬家第三天-81.Wincc V7.3用户归档初步使用3- c脚本做简单的新增、上载、下载用户归档功能

前面一篇博客介绍了用户归档的建立、与PLC的连接、使用控件的上载、下载、修改、删除方法(http://blog.sina.com.cn/s/blog_724246b90102woov.html)。有时候这些操作可能是定时的,或者在满足某个条件自动执行的,这种情况下我们就需要借助脚本来完成了。本文逐一介绍如何使用c脚本完成这些功能。假设用户归档已经建立完毕,与PLC连接也配置好。

1. 单击按钮从PLC上载数据添加一条记录到用户归档末尾

#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END

// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END
SetTagSDWord("@UA_UA_1_ID",-1); 
SetTagSDWord("@UA_UA_1_JOB",6); 
}

 

2. 单击按钮从PLC上载数值更新第一条记录

#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END

// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END
SetTagSDWord("@UA_UA_1_ID",-6); 
SetTagSDWord("@UA_UA_1_JOB",6); 
}

这里如果不确定第一条记录ID是多少,可以使用-6来指代

 

3. 单击按钮从PLC上载数值更新最后一条记录

#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END

// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END
SetTagSDWord("@UA_UA_1_ID",-9); 
SetTagSDWord("@UA_UA_1_JOB",6); 
}

 

4.单击按钮从PLC上载数据更新ID=5的记录

#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END

// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END
SetTagSDWord("@UA_UA_1_ID",5); 
SetTagSDWord("@UA_UA_1_JOB",6); 
}

如果不确定ID=5是否存在,就需要连接用户归档数据库相应表,遍历查询ID=5是否存在,连接数据库查询的脚本,会在后续的博客中介绍,这里假设ID=5是存在的。要注意不能在job.write 6后面紧跟if job.read=-1 then来判断是否成功执行job从而判断id=5是否存在,因为修改用户归档可能会有一些延时,此时job并没有完全结束,会造成误判。

 

5. 点击按钮删除第一条用户归档记录

#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END

// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END
SetTagSDWord("@UA_UA_1_ID",-6); 
SetTagSDWord("@UA_UA_1_JOB",8); 
}

 

6. 点击按钮删除用户归档最后一条记录

#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END

// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END
SetTagSDWord("@UA_UA_1_ID",-9); 
SetTagSDWord("@UA_UA_1_JOB",8); 
}

 

7.点击按钮删除ID=5的记录

#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END

// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END
SetTagSDWord("@UA_UA_1_ID",5); 
SetTagSDWord("@UA_UA_1_JOB",8); 
}

8. 点击按钮用第一条记录修改PLC的数值

#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END

// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END
SetTagSDWord("@UA_UA_1_ID",-6); 
SetTagSDWord("@UA_UA_1_JOB",7); 
}

 

9. 点击按钮用最后一条记录修改PLC数值

#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END

// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END
SetTagSDWord("@UA_UA_1_ID",-9); 
SetTagSDWord("@UA_UA_1_JOB",7); 
}

 

10.点击按钮用ID=5的记录修改PLC数值

#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END

// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END
SetTagSDWord("@UA_UA_1_ID",5); 
SetTagSDWord("@UA_UA_1_JOB",7); 
}

以上语句如果加上时间判断放在全局脚本,就可以做成定时添加删除修改PLC/用户归档的脚本了.

posted @ 2021-01-31 15:10  来自金沙江的小鱼  阅读(1525)  评论(0编辑  收藏  举报