WINCC中使用C脚本获得操作记录的方法(原创)
更新时间:2023-11-28 02:03:01 阅读量: 教育文库 文档下载
文档号 版本 日期 页数
技术总结 C脚本获得操作记录的方法 版本 0 日期 作者 校对 批准 说明
53925891.doc
文档号 版本 日期 页数
目录
1
应用范围 ..................................................................................................................................................... 3 1.1 1.2 2 3
详述 ................................................................................................................................................... 3 适用的系统 ........................................................................................................................................ 4
硬、软件配置 .............................................................................................................................................. 4 解决方法 ..................................................................................................................................................... 4
附件
附件
文档号
说明
53925891.doc
文档号 版本 日期 页数 1 1.1
应用范围 详述
在生产中,有很多时候需要记录操作员的操作,以便进行事故分析。WINCC本身提供了一些对象可以产生操作记录,但是在复杂的情况下是无法兼顾既获得操作记录又满足特殊操作的要求。这时,可以使用C脚本来获得操作记录。
目前,在WINCC中以下对象可以很方便地获得操作记录:
? 任何对象,将Event\\Direct Connection\\Operator Input Message选中。
?
图1 通过DirectConnection获得操作记录的组态
Check Box对象和Option Group对象,将property\\Operator Input Message属性选择为yes。
?
图2 Check Box对象和Option Group对象获得操作记录的组态
IO Field对象和Slider对象:将property\\Operator Input Message属性选择为yes;或将property\\Operator Activities Report属性选择为yes。Operator Input Message和Operator Activities
53925891.doc
文档号 版本 日期 页数
Report的区别是后者可以输入操作理由,确认之后操作记录的Comment中可以查看到操作理由。
图3 IO Field对象和Slider对象获得操作记录的组态
以上方法可以快捷地实现获取操作记录的功能,但是在某些情况下,功能要求更复杂,通过以上方法并不能满足要求。比如:操作员操作一个启动按钮,要求系统能够记录操作员操作信息。在单步操作的情况下,通过Direct Connection能够很方便地实现这一功能。但是在两步操作的情况下,需要操作员先确认,在得到确认之后操作才能生效,由于Direct Connection并没有提供操作确认功能,显然通过Direct Connection并不能满足要求。在这一的情况下,可以考虑采用C脚本来实现这一功能,通过MessageBox()函数来完成操作确认的功能,然后通过特别的函数来使系统产生操作记录。 1.2 适用的系统
该方法适用于安装有WINCC的系统中。
2 3
硬、软件配置
安装有WINCC软件,无版本限制。
解决方法
通过C脚本产生操作记录主要完成两部分组态工作,首先要在Alarm Logging中组态消息类型和定制消息内容;然后编写C脚本来产生操作记录。
第一步:在Alarm Logging中组态消息类型和定制消息内容。 1. 新建消息并定义消息类型。系统产生的消息(包括了操作记录)和定制的消息都存储在Alarm
Logging中,编号从1000000开始的消息为系统使用的消息,不能组态。如果需要定制消息,可以使用1~1000000之间的消息号。在WINCC explorer中打开Alarm Logging,新建一条消息,消息号为1,打开该消息的属性对话框,如图4所示。在Parameters一栏中,将Class和Type都选为Operator Input Message,保留其余默认设置。
53925891.doc
文档号 版本 日期 页数
图4 消息的参数组态
2.
定制操作记录的内容。每条操作记录都在单独的消息行中显示,消息行的内容取决于选定的消息块,每个选定的消息块组成消息行中的一列。如图5所示,系统提供了三种不同类型的消息块:① 系统块显示预定义的消息,如日期、时间、持续时间、注释…;② 用户文本块允许最多为一条消息指定十个可定义文本,包含操作来源、操作内容、时间等信息。③ 过程值块:系统提供了十个过程值,通过过程值块可以在消息行中显示已定义的标签值。并非消息块中每一项都需要在消息中显示,可以在系统图形文件@AlarmOperation.pdl 中进行定制。
图5 消息块类型
通常,在进行事故分析时,需要了解操作日期、时间、操作来源以及操作内容。前面提到,系统块提供了操作日期和时间信息,只需要选中这两个选项,无需特别的组态。因此,定制操作记录只需要再对操作来源和操作内容进行组态就可以了。
53925891.doc
文档号 版本 日期 页数
先来了解下通过Direction Connection产生的操作记录的内容,如图6所示:操作来源中显示的是变量名称,变量包含了工厂层级信息。操作内容中包含了用户名、新值和旧值的信息。变量名、用户名、新值和旧值可以从过程值块的变量中获得。先对过程值模块中10个过程值的用处作如表1中的定义:
过程值 用处 1 消息号 图6 操作记录列表
2 3 4 5 6 变量的变量的备备当前登录新值 旧值 用 用 的用户名 表1 过程值块变量用处的定义
8 9 10 备备备变量名 用 用 用 7
在进行上述的定义之后,进入消息组态对话框,选择Text一栏,进行用户文本块的定义,如图7所示:
图7 用户文本块的组态
用户文本块中的内容可以手动输入,也可以通过点击右边的态,如图8所示:
进入文本组态对话框进行消息格式的组
53925891.doc
文档号 版本 日期 页数
图8 用户文本块中输出格式的组态
到这里,我们就完成了在Alarm Logging中操作记录的组态工作,接下来就要进行C脚本的编写了。
第二步:编写C脚本。
C脚本中要做的工作主要有分两步,先是进行变量的赋值,然后再创建消息。 1. 变量的赋值。在触发消息的事件(如按钮的鼠标左键释放事件)的C脚本中定义变量并给变量赋
值,根据表1中的定义,需要定义两个数组,一个是数值类型为Double,另一个数值类型为字符指针,前者用于存放消息号、变量的新值和旧值,后者用于存放当前登录的用户名和变量名。以下是按钮鼠标释放事件的C脚本程序。
*************************************************************************** #include \
void OnLButtonUp(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y) {
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction \// next TagID : 1
#define Apc_CurrentUserName \#define Var \// WINCC:TAGNAME_SECTION_END
//定义消息号,并赋值 int nMsgNr = 1; int iNewValue=1; int iOldValue; int RetMsg;
double dValue[5] = {0,0,0,0,0}; //定义double型数组,对应过程值块的前5个变量 char* lpszVal[5] = {\//定义字符指针数组,对应过程值块的后5个变量 //确认操作
53925891.doc
文档号 版本 日期 页数
RetMsg = MessageBox (NULL, \确定要启动吗?\启动确认\if (RetMsg==IDOK) {
//获取旧值、赋予新值
iOldValue=GetTagBit(Var);
SetTagBitWait(Var,(WORD)iNewValue);
//将用户名、变量名、消息号、新值和旧值放到定义的数组中 lpszVal[0] = GetTagCharWait(Apc_CurrentUserName); lpszVal[1] =Var; dValue[0] = nMsgNr; dValue[1] = iNewValue; dValue[2] = iOldValue;
//调用产生消息的函数
OperationLog_V6(lpszPictureName,nMsgNr,dValue,lpszVal); } }
************************************************************************************************ 2. 创建消息。
消息创建函数需定义为全局脚本函数,主要将值传递给消息块的结构变量并创建消息。以下是产生消息函数的C脚本。
***************************************************************************
#ifndef RUN_ON_WEBNAVIGATOR #include \
#pragma code (\ #include \ #pragma code () #endif
void OperationLog_V6(char* lpszPictureName, int nMsgNr,double dValue[5],char* lpszVal[5]) {
BOOL bOkay;
CMN_ERROR Error;
MSG_RTDATA_INSTANCECOMMENT_STRUCT MsgCreate; //定义为消息到达
MsgCreate.dwMsgState = MSG_STATE_COME; //赋消息号给将要创建的消息
MsgCreate.dwMsgNr = nMsgNr; //定义用到了过程值块中的哪些过程值 MsgCreate.wPValueUsed = 0x001F; //定义用到了用户文本块中的哪些选项
MsgCreate.wTextValueUsed = 0x03E0;
// 拷贝数值到消息块的过程值中
MsgCreate.dPValue[0] = dValue[0]; // @1%x@ ; x can be replaced by d,f MsgCreate.dPValue[1] = dValue[1]; // @2%x@ ; x can be replaced by d,f MsgCreate.dPValue[2] = dValue[2]; // @3%x@ ; x can be replaced by d,f MsgCreate.dPValue[3] = dValue[3]; // @4%x@ ; x can be replaced by d,f MsgCreate.dPValue[4] = dValue[4]; // @5%x@ ; x can be replaced by d,f
strcpy(MsgCreate.mtTextValue[5].szText, lpszVal[0]); // @6%s@ strcpy(MsgCreate.mtTextValue[6].szText, lpszVal[1]); // @7%s@ strcpy(MsgCreate.mtTextValue[7].szText, lpszVal[2]); // @8%s@ strcpy(MsgCreate.mtTextValue[8].szText, lpszVal[3]); // @9%s@ strcpy(MsgCreate.mtTextValue[9].szText, lpszVal[4]); // @10%s@ // 发送消息到Alarm Logging
53925891.doc
文档号 版本 日期 页数
bOkay = MSRTCreateMsgInstanceWithComment(0,&MsgCreate,&Error); if (!bOkay) printf(\\\r\\n\}
后记:通过C脚本不仅可以产生操作记录,也可以产生报警记录、日志记录,只需要在Alarm Logging中将消息类型改成对应的类型。
53925891.doc
正在阅读:
新龟兔赛跑管理学公开课课件案例教学ppt04-23
TD―LTE系统间干扰排查的基本方法研究01-23
食堂管理制度03-10
变的阅读短文答案03-09
青蒿不同组织采集时期和干燥方式对青蒿素含量影响研究05-16
2015英语专转本后有解析10-24
商贸操作手册09-12
2006-2007机械制造技术基础110-14
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 脚本
- 获得
- 操作
- 记录
- 方法
- 使用
- 原创
- WINCC
- 中国人保财险2015年校园招聘笔试试题及答案答案解析 - 图文
- 读戴维 迈尔斯《社会心理学》有感
- 2018年温州大学624-无机化学考研专业课真题硕士研究生入学考试试题
- 五年级下册单位换算练习题
- 河北镇城镇化建设的思考(三稿)
- 物理习题
- 会计实务案例
- 《暖通空调》思考与习题2011(1-7)
- 毕业设计论文-自动旋盖机设计论文
- 《第二爱情》观后感
- 普通话水平测试试卷样卷1
- 采掘工作面探放水钻孔设计及说明书
- 微机接口技术模拟试题(开卷)
- 高职院校提升社会服务能力的实践与创新
- 2019年高考化学第一轮复习精品教案 - 图文
- 初中历史教师个人专业发展年度计划和阶段计划
- 钳工工作总结
- 山东省人民政府办公厅关于印发山东省道路交通事故社会救助基金管理暂行办法的通知
- 2013年江苏省对口单招试卷(电子电工专业,含答案,2010新课标,缺电子电工专业答案)
- 原材料的功能介绍