在 WinCC 中如何在一个画面中显示不同的趋势图?
显示订货号
描述
在同一个 WinCC 在线趋势控件中,通过不同的按钮来选择显示不同测量点的曲线,有两种方法。
选择 1: 用脚本分配变量 选择 2: 画中画技术
两种方法都是在 \"Trend_Function_Main.PDL\和 \"Trend_Function_2.PDL\" 画面中实现的。这几个画面可以在例子中找到。
准备:
变量“testvar1”和“testvar2”分别显示在两个在线控件 Trend 1 和 Trend 2 中。
页脚内容1
安装说明
No. 步骤 1 在变量记录中,新建过程值归档“TestArchive”。 2 在归档中建立相应的变量归档(testvar1 and testvar2)。 Fig. 01 选择1:WinCC V7.0 中脚本分配变量 在本例中,WinCC 在线趋势控件的名称为 “Control1”。另外,建立了两个趋势,但是并没有分配给某个变量。分配由 VBS 脚本或 C 脚本完成。 VBS 和 C 脚本在文件 “M1_button_assign_tag.txt”中。 页脚内容2
安装说明
No. 步骤 1 将 WinCC 在线趋势控件组态为显示最多趋势。 2组态一个按钮(在对象选项板中选择“标准”〉“窗口对象”〉“按钮”)。 3右键按钮选择属性,选择“事件”〉“按钮”〉“鼠标”。 右键“鼠标动作”对应的闪电符号,选择 VBS 动作。 45通过如下脚本,创建一个对象(如“objCon1”) (C 脚本不需要创建对象) Dim objCon1 Set objCon1 = HMIRuntime.ActiveScreen.ScreenItems(\"Control1\") 6将变量联系到相应的趋势中(Index 0 = Trend 1, Index 1 = Trend 2, ... )。 'testvar1 objCon1.TrendIndex = 0 页脚内容3
安装说明
objCon1.TrendTagName = \"TestArchive\estvar1\" 'testvar2 objCon1.TrendIndex = 1 objCon1.TrendTagName = \"TestArchive\estvar2\" 注意: 更多关于使用 VBS 或 C 脚本建立变量变化请参考条目: 10259719 更多关于 WinCC 在线趋势控件的动态方法及属性设置请参考 WinCC Information System: \"使用 WinCC\" > \"VBS for creating procedures and actions\" > \"VBS Reference \" > \"Object types of the ScreenItem object\" > \"Controls\" > \"WinCC Online Trend Control \" 选择2:画中画技术 本例中,在画面“Trend_Function_Main.PDL”中组态了一个画面窗口,画面窗口中调用了“Trend_Function_1.PDL”和“Trend_Function_2.PDL”两个已经组态好在线趋势控件的画面。VBS 和 C 脚本在文件“M2_pic_in_pic.txt”中。 N步骤 页脚内容4
安装说明
o. 1在图形编辑器中,创建第一个测量点的画面。 注意: 这个 PDL 画面的名称最好来自于测量点的名字,并且可以从变量列表中复制其名字。 2在画面中插入 WinCC 在线趋势控件。连接趋势到测量点(WinCC V7.0)的归档变量(如 testvar1)。 在图片中插入一个应用程序窗口并且连接到测量点的趋势模板(老板本)。 3然后相应的调整图像的几何属性和应用程序窗口。 本例中,高350像素,宽550像素。这个大小是根据画面窗口的大小定的。 4重复步骤3和4,为其他的测量点创建画面。 将应用程序窗口链接到每一个曲线模板上,然后用测量点的名字保存图像。 5下一步创建一个新图片,可以用不同的按钮调用不同的趋势。 在这个画面中,为已经建好的画面插入一个宽(550 pixels)高(350 pixels)的画面窗口。属性可自由选择。 警告: 不要将画面窗口连接到某个画面,这个工作是运行时动态完成的。 页脚内容5
安装说明
6在鼠标单击事件中插入如下源代码。注意根据您的项目更改图片名称。 C 动作 SetVisible(\"Trend_Function_Main\SetPictureName(\"Trend_Function_Main\ VBS 动作 Dim objCon1 'create objects Set objCon1 = HMIRuntime.ActiveScreen.ScreenItems(\"PictureWindow1\") 'configuration objCon1.Visible = 1 objCon1.PictureName= \"Trend_Function_1.PDL\" 7现在可以通过 Picture Tree Manager 将画面“Trend_Function_Main.PDL”合并到画面图层。 例子: 为了在项目中可以使用这些图片,必须按照前面“准备”中提到方式建立归档变量 “testvar1”和“testvar2”。此外,将下面三个 PDL 文件拷贝到项目文件夹下的 “GraCS”中。 (...Siemens\\WinCC\\WinCCProjects\\ 安装说明 此例是在 WinCC V.0.中建立的。 ZIP 文件中包含了三个 PDL 文件(WinCC 画面)和两个 TXT 文件(VBS and C 脚本)。 如何使用 C 或 VBS 脚本通过新变量提供 WinCC 在线趋势控件的单个趋势? 显示订货号 说明: 例如,在初始条件下,过程值归档 \"TestArchive\" 中的变量 \"testvar1\" 被分配给趋势控件的曲线1(图01)。 页脚内容7 安装说明 图. 01 C 脚本: 现在按下面的步骤利用 C 脚本将过程值归档中的变量 \"testvar2\" 分配给趋势控件的曲线1。 No. 步骤 1首先,将在线趋势控件的 \"Index\" 属性设置为对应曲线号的数值。 WinCC V6.x 和 WinCC V7.0 SetPropWord(lpszPictureName,\"Control1\ 2将WinCC在线趋势控件(= Control1)中选择出的曲线的 \"TagName\" 属性或者 TrendTagName 设置为新的变量: 页脚内容8 安装说明 WinCC V6.x SetPropChar(lpszPictureName,\"Control1\ WinCC V7.0 SetPropChar(lpszPictureName,\"Control1\ 3将WinCC 在线趋势控件(= Control1) 中选择出的曲线的 \"Command\" 属性设置为 \"Reload\": WinCC V6.x SetPropChar(lpszPictureName,\"Control1\ WinCC V7.0 不需要(趋势自动更新) VBS 脚本: 现在按下面的步骤利用 VBS 脚本将过程值归档中的变量 \"testvar2\" 分配给趋势控件的曲线1。 No. 步骤 1为WinCC 在线趋势控件 \"Control1\" 创建一个对象 \"objCon1\" 。 页脚内容9 安装说明 WinCC V7.0 Dim objCon1 Set objCon1 = HMIRuntime.ActiveScreen.ScreenItems(\"Control1\") 2首先将趋势控件的 \"Index\" 属性设置为对应曲线号的数值。 WinCC 7.0 objCon1.TrendIndex = 0 3将在线趋势控件 (= Control1) 中选择出的曲线的 \"TrendTagName\" 属性设置为新的变量: WinCC 7.0 objCon1.TrendTagName = \"TestArchive\estvar2\" 注意: 如何在运行时分配不同变量给趋势请参考条目 ID: 1804857。 在任何情况下 \"Index\" 代表了在线趋势控件中 CurveX 的设置 (更多信息请参考图形编辑器的在线帮助)。 请注意 C 脚本中变量名和归档名之间必须用\" \\\\\" 分隔。 如何使用 Tag Prefix 的属性? 页脚内容10 安装说明 显示订货号 说明: 在 WinCC Online Help 中,通过路径“WinCC Information System > Working with WinCC > VBS for Creating Procedures and Actions > VBS Reference > Characteristics > T > TagPrefix Property”,可以看到关于 Tag Prefix 属性的描述。 只有重新加载画面后,对 Tag Prefix 属性的任何更改才生效。这在画面更改时自动发生;若不然,可以重新指定“Picture Name”属性。下面两个图提供了可能的 C 和 VBS 脚本。 页脚内容11 安装说明 页脚内容12 安装说明 页脚内容13 安装说明 如何使用一个通用的C函数来动态的获得对象属性的连接变量? 显示订货号 介绍: 使用\"GetLinkedVariable()\"函数您可以读取连接到对象属性上的变量名称,\"GetLinkedVariable()\"函数返回的变量名称首先需要检查,检查正确之后您可以利用该变量名称在您的子程序段中根据需要进一步处理,如读写该变量或者修改其他对象的属性。 例子: 读取连接到IO域对象的上“输出值”属性的例子。 { char* pszVarName = NULL; char szVarName[_MAX_PATH+1]; 页脚内容14 安装说明 // //Read tag name of a direct connection // pszVarName = GetLinkedVariable(lpszPictureName,lpszObjectName,\"OutputValue\"); // //检查返回值 // if (strlen(pszVarName) <= 0){ printf(\"Error: the property is not linked to a WinCC tag!\\r\\n\"); } else if (strlen(pszVarName) >= sizeof (szVarName)){ printf(\"Error: the C tag occupies too little memory to be able to accept the complete tag name\\r\\n\"); } 页脚内容15 安装说明 else{ strncpy(szVarName,pszVarName,sizeof (szVarName)); printf(\"Info: szVarName=\\\"%s\\\" value=%f\\r\\n\//============================================ // //用户自定义的子程序段 // //============================================ //At this point you can program your //application-specific code } } GetLinkedVariable:函数的参数: lpszPictureName: 指向当前画面的指针 lpszObjectName: 指向当前对象的指针 页脚内容16 安装说明 \"OutputValue\": 对象属性的名称,该属性上连接着变量 程序流程: 1. 2. 3. 4. GetLinkedVariable函数的返回值返回给程序内部变量pszVarName。 GetLinkedVariable函数不会返回一个空指针,所以必须用strlen 检查返回值的长度, 如果返回值有效,将返回值赋值给变量szVarName,赋值长度最长是_MAX_PATH个字符 在用户自定义程序中使用该返回值。 触发条件注意: 您需要避免在过程画面中使用周期循环触发,因为这种方式会加大系统负担,触发方式最好选用变量触发。 当您使用变量触发时请确保过程值连接到对象属性上的时候,触发C动作的触发器变量能够正常地发生改变 面板技术如何与画面窗口的 \"Tag Prefix\" 属性结合使用? 显示订货号 页脚内容17 安装说明 使用说明: 可以 在组态中使用面板技术。从 WinCC V5 版本起,可以使用画面窗口的 \"Tag Prefix\" 属性。 重要信息: 画面窗口的变量前缀务必与全局定义一致。这表示画面窗口的变量前缀对在该画面窗口中处理的所有变量或以其它方式(脚本)修改的所有变量均有效。 因此,这些变量必须是结构的一部分,结构名称已经被用户指定为画面窗口的变量前缀。 例如,如果在上述结构之外声明一个名为 “Hallo” 的变量,并尝试在画面窗口中修改,更改变量名 \"TagPrefix.Hallo\"。这会导致出错, 因为该变量不存在。 请注意当同意画面窗口中的另一个变量前缀时,画面窗口的变量前缀也有效。 对于在第二次定义中处理或以其它方式(脚本)修改的变量,下列解释适用: \"TagPrefix1.TagPrefix2.TagName\"。 在该示例中通过变量链接、动态对话框和 C 语言脚本实现动态化。动态对话框和 C 语言脚本均使用变量触发。 变量前缀不仅可以与 WinCC 结构变量中独立的点一起使用,也可以用于 WinCC 变量名中的任何点 页脚内容18 安装说明 处。变量前缀也可以用于基本的 WinCC 变量。 关于动态对话框的注意事项 为了可以使用动态对话框,必须执行下列两点: 必须使用 \"Tag Prefix\" 属性指定点: 示例: \"ampel13.\" 动态对话框检查是否存在变量。因此,必须为结构的每个成员变量重新创建一个常规 变量。 示例: 该结构有三个成员:\"red\"、\"yellow\" 和 \"green\"。必须另外创建三个变量:\"red\"、 \"yellow\" 和 \"green\"。 该面板技术的优点 无需使用任何不必要的 C 语言脚本。变量触发也确保实现卓越的性能。 关于修改变量前缀的注意事项 请注意,只有当在画面窗口中修改了画面时,修改变量前缀才能在该画面窗口中生效。这已经在这个 样例项目中实现了。欲知详情,请参见图形编辑器在线帮助中的画面窗口\"Tag Prefix\" 属性。 怎样通过登陆/退出(log on/off)来关闭已打开的面板(faceplates)? 页脚内容19 安装说明 显示订货号 描述: 用户经常在登陆以后设置面板(faceplates)。例如, 用户名保存在 \"Static Text\"对象的\"Text\" 属性中 。根据面板的设置, 可能会发生以下情况,当切换用户后当前保存的用户权限并没有被修改。 在实际运用中,可能意味着未被授权的动作会被执行,或者由于当权用户没有这个权限而不能执行某些开关动作。 补救: 切换用户后面板将被关闭并且重启。 不要保存当前用户的登陆信息。每次用户操作,对于当前登陆用户总是做直接查询。 注解: 在某种情况下,例如:Safety Matrix 面板。 如果你使用了Basic Process Control 选件(例如使用PCS 7 或者OS 项目编辑),当切换用 户时面板默认会被关闭。这个行为的详细信息和授权的检查请参考 条目 ID 16626380. 如果是标准wincc, 你必须手动配置面板的管理(打开和关闭画面窗口)。根据 页脚内容20 安装说明 \"@CurrentUser\" 标签的变化触发全局脚本,登录/登出时,全局脚本动作将会自动关闭已打开的画面窗口。 下图显示怎样去构造一个切换用户后被执行的C动作。 动作中定义的画面被重新加 载成一个开始画面。如果画面窗口的 属性\"Display\"的静态属性是 \"False\",那么画面窗口会根据切换用户而关闭。 页脚内容21 安装说明 补充:在脚本中,可以通过ODK函数从用户管理查询权限设定。条目 ID 27068495 指出怎样在脚 页脚内容22 安装说明 本中使用ODK函数\"PWRTCheckPermission()\" 来查询权限 WinCC 7.0中,如何在运行系统中通过脚本来改变对象颜色(背景,边框,文本)? 显示订货号 说明: 从 WinCC 7.0 开始, 包含 32 位值的颜色也支持颜色透明度。有两种组态颜色的方法可以被用来在运行系统中使用脚本通过 alpha 通道/透明度来改变对象颜色(背景,边框,文本)。 1. 2. 在中央调色板指定颜色 除了传统颜色,WinCC 7.0 还允许您创建您自己的颜色调色板。您可以为一个项目创建 10 个颜色调色板,每个调色板可以包含 20 种颜色。颜色调色板中的颜色可以通过脚本及指派对象颜色(如文本颜色)来使用。这适用于常用颜色及需要统一改变的颜色,例如在颜色调色板中改变一种颜色后,指派到该颜色的对象颜色(如文本颜色)也就随之改变了。 3. 通过数值指定颜色 4. WinCC 7.0 允许您使用脚本来创建一个颜色值并将该值赋给一个对象颜色(如文本颜 页脚内容23 安装说明 色)。这适用于颜色很少使用及更改传统颜色或颜色调色板不影响创建的颜色的情况。 警告: 为了改变一个对象的颜色,“Central color scheme”属性必须被取消使能。您可以在图形编辑器中设置该属性。 打开图形编辑器。 右击相关对象并点击“属性”。 单击“属性”标签并双击“按钮”>“显示”。 在打开的窗口中更改属性。 要求: WinCC 7.0 分配一个中央调色板中的颜色: 序步骤 号 1创建对应于项目的颜色调色板: 在树形视图中右击项目名称然后单击“属性”来打开项目属性。 选择“User Interface and Design”标签并单击“中央颜色调色板”(参见图 01:位置 1)右侧的“编辑”按钮。 页脚内容24 安装说明 单击“创建颜色调色板”然后单击“重命名颜色调色板”(参见图 01:位置 2)。 为项目调色板输入一个名字(如 Test Color)。 2向调色板中添加颜色: 使用滚动条(透明度,红,绿和蓝)来设定所需要的颜色,或在相关输入域中输入 RGB 值和透明度(参见图 01:Transparency = 0;Red = 30;Green = 15;Blue = 170)。 单击“To Palette”按钮然后单击颜色调色板中的号码(如 2)。 图 01 然后单击“OK”来确认这两个对话框。 页脚内容25 安装说明 3创建 C 脚本: 在树形视图中右击“全局脚本”然后单击“打开 C 编辑器”。 在菜单栏中单击“文件”>“创建新项目函数”,并使用 C 脚本中的 Part 1 来替代函数模板中的内容。 图 02 单击“File”>“Save”,输入一个名字并单击“OK”按钮。 单击“Yes”来确认所做的设置并关闭 C 编辑器。 4通过单击鼠标来改变背景颜色: 在树形视图中单击“图形编辑器”并单击您的项目画面从而打开它。 通过在对象模板中选择“标准”>“窗口对象”>“按钮”来添加一个按钮到画面中。 右击插入的按钮然后单击“属性”,属性对话框被打开。 单击“事件”标签并双击“按钮”>“鼠标”。 页脚内容26 安装说明 在“鼠标单击”行右击“动作”列,然后单击“C 动作...”。 使用 C 脚本中的 Part 3 来替代绿色的注释行。 图 03 同时使用要改变其背景颜色的对象名称来替代名称“Testobjekt”(图 03:位置 1)。 使用来自项目颜色调色板(例 2)中新的背景颜色号来替代数字 4(图 03:位置 2)。 单击“OK”来确认对话框,关闭属性对话框并关闭画面。 注意: 如果您没有使用按钮,Part 3 必须要在一个动作中被调用。 使用数值指定颜色: 序步骤 号 1创建 C 脚本: 在树形视图中右击“全局脚本”然后单击“打开 C 编辑器”。 页脚内容27 安装说明 在菜单栏中单击“文件”>“创建新项目函数”并使用 C 脚本中的 Part 1 来替代函数模板中的内容。 图 04 单击“文件”>“保存”, 输入一个名字并单击“OK”按钮。 在菜单栏中单击“文件”>“创建新项目函数”并使用 C 脚本中的 Part 2 来替代函数模板中的内容。 图 05 页脚内容28 安装说明 单击“Yes”来确认设置并关闭 C 编辑器。 2通过单击鼠标来改变背景颜色: 在树形视图中单击“图形编辑器”并单击您的项目画面从而打开它。 通过在对象模板中选择“标准”>“窗口对象”>“按钮”来添加一个按钮到画面中。 右击插入的对象然后单击“属性”,属性对话框被打开。 单击“事件”标签并双击“按钮”>“鼠标”。 在“鼠标单击”行右击“动作”列,然后单击“C 动作...”。 使用 C 脚本中的 Part 4 来替代绿色的注释行。 Bild 06 同时使用要改变其背景颜色的对象名称来替代名称“Testobjekt”(图 06:位置 1)。 使用需要的颜色所对应的 RGB 值和透明度(本例中为 30(红), 15(绿), 170(蓝), 50(透明度))来替代值 255, 60, 100, 30(图 06:位置 2)。 单击“OK”来确认对话框,关闭属性对话框并关闭画面。 注意: 页脚内容29 安装说明 如果您没有使用按钮,Part 4 必须要在一个动作或函数中被调用。 如下的 TXT 文件包含了所需的 4 部分 C 脚本。 -------------------- Teil 1 ----------------- long GetPaletteColor(int ColorIndex) { if (ColorIndex > 199) ColorIndex = 199; return pow(2,31) + ColorIndex; } -------------------- Teil 2 -------------------------------------------------------------------- long CreateRGBColor32(int nRed, int nGreen, int nBlue, ...) { va_list argptr; 页脚内容30 安装说明 int Alpha; long Color; va_start (argptr, nBlue); if (argptr != NULL) Alpha = va_arg(argptr, int); else Alpha = 0; va_end(argptr); Color = nRed + (pow(2, 8)) * nGreen + (pow(2, 16)) * nBlue + (pow(2, 24)) * (Alpha + 1); return Color; } -------------------- Teil 3 ----------------------------------------- SetBackColor(lpszPictureName, \"Testobjekt\ 页脚内容31 安装说明 -------------------- Teil 4 ----------------------------------------------------------------------------------- SetBackColor(lpszPictureName,\"Testobjekt\ette\"))); { SetBackColor(lpszPictureName, \"Testobjekt\ } 页脚内容32 因篇幅问题不能全部显示,请点此查看更多更全内容