关于WinCC中C脚本的变量循环问题
作者:***
来源:《教育教学论坛》2017年第47期
        摘要:本文介绍了WinCC组态软件中的C脚本采用循环方式对变量及画面对象进行连接的方法,对于处理大量的同类数据和画面对象,具有很大的方便性和灵活性,减轻了画面烦琐的连接工作,提高了工作效率和画面质量,在实际的工程应用中,取得了良好的效果。
        关键词:WinCC;C-Script;循环
        中图分类号:G712 文献标志码:A 文章编号:1674-9324(2017)47-0237-02
        新型的工业自动控制系统通常划分为控制层、监控层、管理层三个层次结构,其中监控层对下连接控制层,对上连接管理层,它不但实现对现场的实时监测与控制,且常在自动控制系统中完成上传下达、组态开发的重要作用。[1]
        组态软件又称组态监控软件,属于工业应用软件的一部分,它是数据采集监控系统SCAD
A(Supervisory Control and Data Acquisition)的软件平台工具,用于数据采集与过程控制的专用软件,位于自动控制系统监控层一级的软件平台和开发环境,使用灵活的组态方式,为用户提供快速构建工业自动控制系统监控功能的、通用层次的软件工具。组态软件具有强大的界面显示组态功能,有良好的开放性和丰富的功能模块,配有强大的数据库支持,支持一些可编程的用户语言,提供强大的仿真功能使系统并行设计。
while循环语句的程序流程图
        1996年由西门子公司开发的SIMATIC WinCC(Windows Control Center西门子视窗控制中心)是HMI/SCADA软件中的后起之秀,在设计思想上,SIMATIC WinCC秉承西门子公司传统的企业文化理念,追求产品性能最全面、技术最先进、系统最开放。WinCC(Windows Control Center)面向工业自动化,用于在生产和过程自动化环境中实现可视化和过程控制任务。它提供了适用于工业控制的图形显示、消息、归档以及报表的功能模板,界面友好,直观方便,可以与多种编程控制器配合完成生产过程的监控与操作。同时WinCC集成了ANSI-C和Visual Basic脚本功能,遵守标准C语言规范,提供了基于C脚本规范的系统函数,为组态工程师进行全开放的自由编程和深层次的二次开发提供了良好的编辑平台。[2]
        一、C脚本循环的基本原理
        在程序设计时,一般情况下语句是按顺序从第一行依次往下执行:函数中的第一个语句先执行,接着是第二个语句,依此类推。但是根据要求有时候需要多次执行同一段代码,因此编程语言提供了更为复杂执行路径的多种控制结构,比如循环、跳转等。循环语句即允许先多次执行一个语句或语句组,再顺次往下执行,它改变代码的执行顺序,实现代码的跳转,如图1是大多数编程语言中循环语句的流程图。
        C脚本提供了以下几种循环类型。
        while循环:当给定条件为真时,重复语句或语句组。它会在执行循环主体之前测试条件,先判断while后面括号里的值,如果为真则执行其后面的代码;否则不执行。
        for循环:多次执行一个语句序列,简化管理循环变量的代码。for循环可以很容易地控制循环次数,多用于事先知道循环次数的情况下。
        do...while循环:与while语句类似,区别在于此循环是在循环主体结尾测试条件外。先执行do后面的代码,然后再判断while后面括号里的值,如果为真,循环开始;否则,循环不开始。其用法与while循环没有区别,但相对较少用。[3]
        在WinCC里C脚本语法和C语言完全一致,例如for循环可以通过条件缺省构造无限循环,printf函数在WinCC里可以直接输出到诊断窗口,sprintf是规格话字符串的函数在C语言和WinCC里都是普遍使用的。对于WinCC里的C脚本,只要熟练掌握C语言基本的语法,数据类型、逻辑运算、字符指针、函数调用这些就可以在WinCC里灵活编写脚本程序。同时在C脚本里还有一个对象指针类型__object,用它来访问WinCC里的对象,或其他如Excel、ADO等可以和VBS脚本里一样便捷地操作对象。
        二、程序代码举例
        现在监控系统的开发设计中随着监控要求的提高,工程发展对画面丰富性、安全性要求越来越高,需要监控或者显示的变量个数也在不断增加,大量的画面对象与变量之间的连接变得非常烦琐,不止加大了设计人员的设计时间而且容易在相似的变量连接中出现疏漏。WinCC组态软件中集成的C脚本可以利用循环脚本,采用循环的方式对组态变量和画面对象进行操作,将烦琐的连接变得简单和便捷,对于初期制作和后期维护都非常方便,可以降低工作量,节约设计时间。
        首先在变量命名时采用统一的后缀递增方式,例如:TAG_1,TAG_2,TAG_3等,Win
CC画面对象命名亦参照同样的规律,例如:io_1,io_2,io_3等,然后将一对相同后缀的变量和画面对象进行连接,最后利用循环方式对多组变量与画面对象进行统一修改处理。
        由于变量名是作为中间变量参数来传递,在C脚本中需要对变量名的存储分配一定的空间,这就需要用到WinCC中的系统函数SysMalloc来分配存储空间。Malloc的全称是memory allocation,中文叫动态内存分配,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存,malloc向系统申请分配指定size个字节的内存空间。SysMalloc函数为动作保留存储器,将存储器空间分配给动作,当动作完成并结果送出时,系统释放存储器。
        例如实现将变量TAG_1~TAG_10的值显示到画面对象输入输出域io_1~io_10中,程序代码如下:
        //头文件等略
        char *iofield,*tag; // 定义字符型中间变量,输入输出域,和变量名称
        int i,j; // 定义整数型中间变量,用于循环语句
        WORD value; // 定义数值型中间变量,用于存贮变量中数值
        tag=SysMalloc(50);
        iofield=SysMalloc(50); // 分配存储空间
        //********************************************************************
        for (i=1;i
        {
        sprintf(tag,“TAG_%d”,i); // WINCC中变量名称指定,TAG_1~TAG_10
        sprintf(iofield,“io_%d”,i); // WINCC画面中IO域名称指定,io _1~ io _10
        value=GetTagWord((tag)); // 依次读取TAG_1~10中的值,并赋给中间变量value
        SetPropWord(lpszPictureName,(iofield),“OutputValue”,value); // 依次将val
ue中的值写入WINCC当前画面中io_1~10的输出属性
        }
        在实际的工程应用中,采用循环方式对变量进行读写可以方便地对大量数据进行操作,从而对于提高工作效率具有非常重要的意义。
        参考文献:
        [1]欧金成,欧世乐,林德杰.组态软件的现状与发展[J].工业控制计算机,2002,15(4).
        [2]苏昆哲.深入浅出西门子WinCC V6[M].北京航空航天大学出版社,2004.
        [3]黄容,赵毅.c语言程序设计[M].北京:清华大学出版社,2013.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。