西门子授权代理-金华市西门子PLC-S7-1500 S7-400PLC 西门子s7 200 smart代理商
- 供应商
- 广东湘恒智能科技有限公司
- 认证
- PLC触摸屏代理商
- 西门子代理商
- 伺服电机驱动电缆
- 西门子一级代理商
- 变频器直流调速器
- 西门子一级总代理商
- 联系电话
- 13922889745
- 手机号
- 18475208684
- 经理
- 向小姐
- 所在地
- 惠州大亚湾澳头石化大道中480号太东天地花园2栋二单元9层01号房
- 更新时间
- 2024-11-05 08:00
simaticwincc是西门子推出的强大的scada和hmi系统,其带有vbscript、c脚本、和vba脚本功能。基于脚本功能可以大大扩展wincc的功能。
vbscript:wincc提供了使用visual basic脚本,可以用来编写全局动作程序和函数,以及在runtime中动态化图形对象和触发动作。与vba不同,vbs既不能在编辑状态下创建对象和画面,也不能修改对象和画面。
vba脚本:在图形设计器中,wincc提供vba编辑器,可以通过编写 vba自动创建配置图形。该vba编辑器与微软office产品中的vba编辑器相同。工程师可以直接利用office中的vba编程经验。
ansic:在runtime中,后台任务,例如打印日常报告、监控变量或执行特定的计算,都可以使用c脚本来执行。wincc存在大量的函数,可以由工程师使用,也可以基于c语言开发自己的功能。
本文“simatc winccv7.5脚本应用—c脚本参数应用”为您提供wincc事件脚本、内部函数和项目函数的使用方法,掌握后您可以大幅提高wincc项目的组态效率。
wincc的事件脚本(例如按钮按下触发的脚本)、标准函数、内部函数以及项目函数(用户自定义函数)都带有接口参数,本文档将通过一个例子来介绍这些参数的应用。
案例功能概述
本例实现通过画面模板结合结构变量来实现多个电机的控制功能。点击画面中的不同按钮弹出相应电机的控制画面,并且画面标题与按钮文本保持一致,同时操作画面弹出位置和按钮位置对应。
首先创建 “motor”结构类型,包括start、stop和run三个元素,分别用来控制电机的启动、停止以及反馈电机的状态。然后,创建4个数据类型为“motor”的结构变量,分别为motor1、motor2、motor3和motor4。
创建画面作为模板画面,添加如下图所示的对象并调整画面大小。运行状态文本及文本颜色根据“run”元素的值发生变化,因此为文本创建文本及字体颜色的动态对话框动画,使用变量“.run”。
“启动”按钮置位结构变量的“start”元素,复位结构变量的“stop”元素,编写如下c脚本:
settagbit(".start",1);
settagbit(".stop",0);
“停止”按钮置位结构变量的“stop”元素,复位结构变量的“start”元素,同样编写如下c脚本:
settagbit(".stop",1);
settagbit(".start",0);
接下来介绍如何使用c脚本来设置画面窗口的属性,将介绍直接使用标准函数和使用项目函数两种方法:
使用标准函数实现
新建画面,在画面中添加四个按钮和一个画面窗口,四个按钮分别用来打开电机的控制画面,按钮文本设置为“电机一”、“电机二”、“电机三”和“电机四”,设置画面窗口对象的名称为“picw1”,其它对象和属性保持默认即可。
为按钮编写以下c脚本,用来设置画面窗口的变量前缀、对应画面名称并显示画面窗口,读取按钮的文本并设置画面标题,根据按下按钮时鼠标的位置来确定弹出画面的位置
脚本运行结果如下图:
首先来看按钮事件脚本的参数: void onlbuttondown(char* lpszpicturename, char*lpszobjectname, char* lpszpropertyname, uint nflags, int x, inty),其中lpszpicturename为按钮所在的画面名称,lpszobjectname为按钮对象的名称,lpszpropertyname为触发事件的按钮属性名称,x、y为点击按钮时鼠标所处的位置。这些接口参数可以被其下面的脚本直接使用。
接着来看具体的脚本,这里使用的都是wincc内部函数。
设置画面窗口的变量前缀使用函数settagprefix(lpctstr lpszpicturename, lpctstrlpszobjectname,char*sztagprefix),其中lpszpicturename是画面窗口所在画面的名称,lpszobjectname是画面窗口对象的名称,sztagprefix为变量前缀,这三个参数都可以设置为字符串数据。例如,本例为画面窗口的变量前缀设置为“motor1”的脚本为settagprefix(lpszpicturename,"picw1","motor1"),由于事件接口参数已经包括画面名称lpszpicturename,因此这里可以直接使用此参数。
设置画面窗口的画面名称使用setpicturename(lpctstr lpszpicturename, lpctstrlpszobjectname, char*szpicturename) ,其中lpszpicturename是画面窗口所在画面的名称,lpszobjectname是画面窗口对象的名称,szpicturename为画面名称。例如,本例画面窗口加载画面“motor”的脚本为setpicturename(lpszpicturename,"picw1","motor")。
设置某个对象是否显示使用函数setvisible(lpctstr lpszpicturename, lpctstrlpszobjectname, bool bvisible),其中参数lpszpicturename和lpszobjectname分别是画面名称和对象名称,bvisible=0时对象隐藏,bvisible=1时对象显示。例如,本例中设置画面窗口"picw1"显示的脚本为setvisible (lpszpicturename, "picw1",1)。
获取对象文本的函数为gettext(lpszpicturename,lpszobjectname),本例中获取按钮对象的文本,由于事件接口参数已经包括按钮对象名称,因此可以直接使用事件参数lpszpicturename和lpszobjectname ,脚本为gettext(lpszpicturename, lpszobjectname) ;
设置对象属性的函数为setpropxxxx,xxxx和属性的类型相关,本例中设置画面窗口的标题,标题为文本,因此使用函数setpropchar(lpctstr lpszpicturename, lpctstr lpszobjectname, lpctstrlpszpropertyname, char*szvalue) ,其中lpszpropertyname代表属性名称。本例中读取按钮文本并设置画面窗口的标题的脚本为setpropchar(lpszpicturename, "picw1", "captiontext",gettext(lpszpicturename,lpszobjectname)),"captiontext"是画面窗口的标题属性名称。
设置对象位置的函数为setleft(lpctstr lpszpicturename, lpctstr lpszobjectname,long int ltop)、settop(lpctstr lpszpicturename, lpctstrlpszobjectname, long intltop)。本例中,设置画面窗口弹出位置的脚本为setleft(lpszpicturename,"picw1",x);settop(lpszpicturename, "picw1",y),由于事件参数已经包括鼠标位置x、y,这里可以直接使用。
这些函数对应参数的说明可以从wincc帮助系统中获得。
另外,在事件中使用函数时,会弹出参数选择对话框,在这里可以为各个参数选择对应的对象或输入数值,也可以点击“确认”按钮之后在脚本编辑器中修改参数。
通过项目函数实现
本例中多个按钮实现相同的功能,因此可以使用项目函数来提高组态效率。首先创建项目函数,并为项目函数添加接口参数,包括对象所在画面名称、画面窗口的名称、画面窗口加载的画面名称、变量前缀、对象名称以及画面窗口的显示位置,本例中创建的项目函数为:voidmotor_op(char* lpszpicturename, char* picwname,char* picname,char*tagpname,char* lpszobjectname,int x, int y)
函数下面的脚本就可以直接使用项目函数的接口参数,具体脚本:
settagprefix(lpszpicturename,picwname,tagpname);//设置画面窗口的变量前缀
setpicturename(lpszpicturename,picwname,picname);//设置画面窗口的画面名称
setvisible(lpszpicturename,picwname,1); //设置画面窗口显示
setpropchar(lpszpicturename,picwname,"captiontext",gettext(lpszpicturename,lpszobjectname));//读取按钮文本并设置画面窗口的标题
setleft(lpszpicturename,picwname,x); //设置画面窗口显示位置left
settop(lpszpicturename,picwname,y); //设置画面窗口显示位置top
项目函数zui终结果如下图:
在画面按钮事件中调用项目函数,由于画面名称、按钮对象名称和鼠标位置已经在事件接口参数中提供,因此只需要设置画面窗口名称、画面窗口加载的画面名称和变量前缀三个参数即可。
4个按钮的zui终脚本如下:
motor_op(lpszpicturename,"picw1","motor","motor1",lpszobjectname,x,y); //电机一
motor_op(lpszpicturename,"picw1","motor","motor2",lpszobjectname,x,y); //电机二
motor_op(lpszpicturename,"picw1","motor","motor3",lpszobjectname,x,y); //电机三
motor_op(lpszpicturename,"picw1","motor","motor4",lpszobjectname,x,y); //电机四
使用项目函数后运行项目,点击“电机一”、“电机二”、“电机三”、“电机四”弹出相应电机的控制画面,画面标题与按钮文本保持一致,同时画面弹出位置和按钮位置相对应。
展开全文