搬家第42天-citect2018使用cicode定制过程分析器趋势笔链接变量

前几天在一个wincc技术讨论群上,有人问过这样一个问题,在一个页面上有一个listbox控件和一个趋势控件,listbox上是一些趋势变量,要求实现运行时鼠标点击哪一个变量,趋势控件中就显示那个变量的曲线。我的电脑上没有安装wincc,我也在想如果同样的需求出现在citect软件上,如何实现点击listbox控件,在过程分析器中显示相应的趋势曲线。经过两天的摸索和尝试,实现了这样的功能,把实现过程和代码记录下来。 1. 在citect中新建5个内部变量,因为没有连接实际的PLC变量,需要用代码模拟数据变化。 搬家第42天-citect2018使用cicode定制过程分析器趋势笔链接变量 2.新建一个cicode函数,模拟现场数据变化 FUNCTION SetValue() flow1=TimeSec(TimeCurrent()) flow2=TimeSec(TimeCurrent())+10 flow3=TimeSec(TimeCurrent())+20 flow4=TimeSec(TimeCurrent())+30 flow5=TimeSec(TimeCurrent())+40 END 3. 新建5个趋势变量,关联前面的5个内部变量 搬家第42天-citect2018使用cicode定制过程分析器趋势笔链接变量 4. 设置事件,定义数据赋值的周期 搬家第42天-citect2018使用cicode定制过程分析器趋势笔链接变量 4.新建一个画面main,上面放置listbox控件和过程分析控件,listbox控件的编号是AN4,过程分析控件编号是AN5。 5. 新建一个cicode函数,用于刚才新建的listbox控件和过程分析控件的初始化。 FUNCTION ctrlIni()//控件初始化 //listbox填入选项 OBJECT objlistbox objlistbox=ObjectByName("AN4") _OBJECTcallmethod(objlistbox,"clear")//先清空列表 _OBJECTcallmethod(objlistbox,"additem","流量1的趋势") _OBJECTcallmethod(objlistbox,"additem","流量2的趋势") _OBJECTcallmethod(objlistbox,"additem","流量3的趋势") _OBJECTcallmethod(objlistbox,"additem","流量4的趋势") _OBJECTcallmethod(objlistbox,"additem","流量5的趋势") //设置listbox控件默认的选项 _OBJECTsetproperty(objlistbox,"text","流量3的趋势") //设置趋势控件(过程分析控件) OBJECT objPA OBJECT hPanes OBJECT hPane OBJECT hPens OBJECT hPen INT panescount,penscount objPA=ObjectByName("AN5") hPanes=_OBJECTGetproperty(objPA,"panes")//得到面板集 panescount=_OBJECTGetproperty(hPanes,"count")//得到板数量 penscount=_OBJECTGetproperty(hPens,"count")//得到板1下面趋势笔数量 IF panescount>1 THEN //删除除1#之外其他面板 WHILE panescount>1 DO hpane=_OBJECTCallMethod(hPanes,"get_item",2)//得到面板2 _ObjectCallMethod(hPane, "Delete")//删除2#面板 panescount=_OBJECTGetproperty(hPanes,"count")//得到板数量 END END hPane=_OBJECTCallMethod(hPanes,"get_item",1)//得到面板1 hPens=_OBJECTgetproperty(hPane,"pens")//得到面板1下面的所有趋势笔 penscount=_OBJECTGetproperty(hPens,"count")//得到板1下面趋势笔数量 //删除面板1下除趋势笔1之外所有趋势笔 IF penscount>1 THEN WHILE penscount>1 DO hPen=_OBJECTCallMethod(hPens,"get_item",2)//得到面板1下面的趋势笔1 _ObjectCallMethod(hPen, "Delete")//删除2#趋势笔 penscount=_OBJECTGetproperty(hPens,"count")//得到板1下面趋势笔数量 END END //給面板1下趋势笔1起一个名字 hPen=_OBJECTCallMethod(hPens,"get_item",1) _ObjectSetProperty(hPen, "Name", "流量3") //给面板1下面的趋势笔1重新定义纵坐标量程范围 _ObjectCallMethod(hPen, "PutVerticalAxisSpan", 0, 80); //给面板1下面的趋势笔1重新定义横坐标范围 _ObjectCallMethod(hPen, "SetDefaultSpan", 0, 0, 0, 30, 0, 0)//设置面板1下面趋势笔1的缺省跨度为0周,0天,0小时,30分钟,0秒,0毫秒 _ObjectCallMethod(hPen, "ResetToDefaultSpan");//设置面板1下面趋势笔1为缺省跨度设置 //设置面板1下面趋势笔1为trdflow5 _ObjectSetProperty(hPen, "DataPoint", "trdflow3") //显示数据点 _ObjectSetProperty(hPen, "PointsVisible", -1) //时间跳转到当前 _ObjectCallMethod(hPen, "GoToNow")   END   6.在main页面的打开事件中调用ctrlIni()函数   7. 新建一个cicode函数,用于鼠标点击listbox控件更改选项时,修改过程分析控件的趋势笔连接变量。 FUNCTION PATrendPenConfig()//根据listbox选项定制过程分析器趋势笔连接的趋势变量 OBJECT objlistbox OBJECT objPA OBJECT hPanes OBJECT hPane OBJECT hPens OBJECT hPen STRING SelectedText,SelectedTrendTagName,TrendPenname objlistbox=ObjectByName("AN4") selectedtext=_OBJECTGetproperty(objlistbox,"text") //根据选择的不同,得到趋势笔的名字和趋势变量的名字 SELECT CASE selectedtext CASE "流量1的趋势" SelectedTrendTagName="trdflow1" TrendPenname="流量1" CASE "流量2的趋势" SelectedTrendTagName="trdflow2" TrendPenname="流量2" CASE "流量3的趋势" SelectedTrendTagName="trdflow3" TrendPenname="流量3" CASE "流量4的趋势" SelectedTrendTagName="trdflow4" TrendPenname="流量4" CASE "流量5的趋势" SelectedTrendTagName="trdflow5" TrendPenname="流量5" END SELECT objPA=ObjectByName("AN5") hPanes=_OBJECTGetproperty(objPA,"panes")//得到面板集 hPane=_OBJECTCallMethod(hPanes,"get_item",1)//得到面板1 hPens=_OBJECTgetproperty(hPane,"pens")//得到面板1下面的所有趋势笔 hPen=_OBJECTCallMethod(hPens,"get_item",1)//得到板1下面的趋势笔1 //給面板1下趋势笔1起一个名字 hPen=_OBJECTCallMethod(hPens,"get_item",1) _ObjectSetProperty(hPen, "Name", TrendPenname) //给面板1下面的趋势笔1重新定义纵坐标量程范围 _ObjectCallMethod(hPen, "PutVerticalAxisSpan", 0, 80); //给面板1下面的趋势笔1重新定义横坐标范围 _ObjectCallMethod(hPen, "SetDefaultSpan", 0, 0, 0, 30, 0, 0)//设置面板1下面趋势笔1的缺省跨度为0周,0天,0小时,30分钟,0秒,0毫秒 _ObjectCallMethod(hPen, "ResetToDefaultSpan");//设置面板1下面趋势笔1为缺省跨度设置 //设置面板1下面趋势笔1为trdflow5 _ObjectSetProperty(hPen, "DataPoint", SelectedTrendTagName) //显示数据点 _ObjectSetProperty(hPen, "PointsVisible", -1) //时间跳转到当前 _ObjectCallMethod(hPen, "GoToNow") END   新建一个citectVBA函数,用于listbox事件中调用这个前面的cicode函数。我藏试过直接在cicode定义listbox控件的鼠标点击事件,始终无效,可能是方法不当吧 Sub main_AN4_click() cicodecallopen("PATrendPenConfig") End Sub 8.保存编译,没有出错。设置计算机向导,定义启动画面是main,运行项目程序时启动定义的事件setValue   9. 设置计算机向导,定义启动画面是main,运行项目程序时启动定义的事件setValue   10.运行项目程序,和设想的功能一样。       总结一下,对过程分析控件各个属性的定义一开始没有找到方向,不知道那些属性、方法的语法描述到底是什么,折腾了一番终于找到了相关的资料。看来“绝知此事要躬行”不是一句空话,现场需求多种多样,闲一点的时候多学习一点多练习一点总归不是坏事,遇到事儿来了,自己拿不下来,那才是要命的。 上面的代码没有对趋势笔的颜色等进行定义,也暂时不知道如何定义,会继续关注这个的,这个练习主要针对过程趋势控件做了以下功能: 1.删除板、笔 2. 定义趋势笔纵坐标范围 3. 定义一屏时间跨度 4. 定义趋势笔链接的趋势变量 5. 定义在过程分析控件上显示数据点 6. 定义趋势笔的名称。 这个练习的编号是citect2018prj17,已经上传到我的百度网盘,有需要的可以下载参考 链接:https://pan.baidu.com/s/1TwSlyxvgSHBYtJl9fMM9sw  提取码:qhfm 搬家第42天-citect2018使用cicode定制过程分析器趋势笔链接变量  
上一篇:Day 42 CSS Layout


下一篇:42授权命令grant之后要跟着 flush privileges 吗?