1. 新建画面
使用同一个画面窗口利用按钮切换不同变量前缀的内容画面,并实现不同系统之间的切换。
首先新建两个子画面(电机,风机)内容包括一个小标题,两个按钮,两个状态显示。
然后建立一个弹窗画面用来切换子画面包括两个切换按钮,两个画面窗口,实现电机和风机的切换。
建立一个主画面用来调用弹窗画面,实现系统的切换。
2. 建立变量
名称 | 注释 | 数据类型 | 长度 | 连接 | 分组 |
---|---|---|---|---|---|
1_Motor_start | 1#电机启动 | 二进制变量 | 1 | 内部变量 | 弹窗 |
1_Motor_stop | 1#电机停止 | 二进制变量 | 1 | 内部变量 | 弹窗 |
1_ventilator_start | 1#风机启动 | 二进制变量 | 1 | 内部变量 | 弹窗 |
1_ventilator_stop | 1#风机停止 | 二进制变量 | 1 | 内部变量 | 弹窗 |
2_Motor_start | 2#电机启动 | 二进制变量 | 1 | 内部变量 | 弹窗 |
2_Motor_stop | 2#电机停止 | 二进制变量 | 1 | 内部变量 | 弹窗 |
2_ventilator_start | 2#风机启动 | 二进制变量 | 1 | 内部变量 | 弹窗 |
2_ventilator_stop | 2#风机停止 | 二进制变量 | 1 | 内部变量 | 弹窗 |
BT_motor | 电机标题 | 文本变量 8 位字符集 | 255 | 内部变量 | 弹窗 |
BT_ventilator | 风机标题 | 文本变量 8 位字符集 | 255 | 内部变量 | 弹窗 |
BT_弹窗 | 弹窗标题 | 文本变量 8 位字符集 | 255 | 内部变量 | 弹窗 |
Picture | 画面切换 | 文本变量 16 位字符集 | 255 | 内部变量 | 弹窗 |
Prefix_motor | 电机变量前缀 | 文本变量 16 位字符集 | 255 | 内部变量 | 弹窗 |
Prefix_ventilator | 风机变量前缀 | 文本变量 16 位字符集 | 255 | 内部变量 | 弹窗 |
temp | 前缀选择 | 无符号的 16 位值 | 2 | 内部变量 | 弹窗 |
Temp_motor | 电机显示 | 二进制变量 | 1 | 内部变量 | 弹窗 |
Temp_ventilator | 风机显示 | 二进制变量 | 1 | 内部变量 | 弹窗 |
Temp_弹窗 | 弹窗弹出 | 二进制变量 | 1 | 内部变量 | 弹窗 |
X_弹窗 | 弹窗坐标 | 无符号的 16 位值 | 2 | 内部变量 | 弹窗 |
XBT_motor | 电机小标题 | 文本变量 8 位字符集 | 255 | 内部变量 | 弹窗 |
XBT_ventilator | 风机小标题 | 文本变量 8 位字符集 | 255 | 内部变量 | 弹窗 |
Y_弹窗 | 弹窗坐标 | 无符号的 16 位值 | 2 | 内部变量 | 弹窗 |
3. 连接变量
首先打开电机子画面连接变量,连接小标题(@NPTP:XBT_motor),因为小标题没有变量前缀所以要这这样写。屏蔽掉前缀。
连接启动按钮(停止按钮也这样设置,但是连接stop变量),这样是按下置1,再按一下复0。
同理修改风机的变量连接。
转到切换画面修改电机按钮属性
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
int n;
SetTagBit("Temp_motor",1); //打开电机画面
SetTagBit("Temp_ventilator",0); //关闭风机画面
n = GetTagWord("temp"); //获取主画面系统编号的赋值
if (n==0) //根据1号系统编号分配变量前缀
{
SetTagChar("Prefix_motor","1_Motor_");//Prefix_motor是电机的变量前缀的中间变量,1_Motor_是变量前缀
SetTagChar("XBT_motor","1号电机");//XBT_motor是电机画面的标题变量,1号电机是要显示的内容
}
if (n==1) //根据2号系统编号分配变量前缀
{
SetTagChar("Prefix_motor","2_Motor_");
SetTagChar("XBT_motor","2号电机");
}
修改电机画面窗口的属性
修改电机窗口的变量前缀
同理修改风机按钮和风机窗口
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
int n;
SetTagBit("Temp_ventilator",1);
SetTagBit("Temp_motor",0);
n = GetTagWord("temp");
if (n==0)
{
SetTagChar("Prefix_ventilator","1_ventilator_");
SetTagChar("XBT_ventilator","1号风机");
}
if (n==1)
{
SetTagChar("Prefix_ventilator","2_ventilator_");
SetTagChar("XBT_ventilator","2号风机");
}
回到主界面设置弹窗的属性
设置主画面1号系统按钮的事件
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
SetTagWord("X_弹窗",180);//弹窗画面窗口的位置
SetTagWord("Y_弹窗",180);//弹窗画面窗口的位置
SetTagBit("Temp_弹窗",0);//关闭上一个弹窗画面窗口
SetTagChar("BT_弹窗","1号系统");//BT_motor是1号弹窗画面窗口的标题变量
SetTagBit("Temp_弹窗",1);//打开弹窗弹窗画面窗口
SetTagWord("temp",0);//识别系统编号赋值便于给弹窗画面的变量前缀
SetTagBit("Temp_motor",1); //默认打开电机
SetTagBit("Temp_ventilator",0); //默认关闭风机
SetTagChar("Prefix_motor","1_Motor_"); //给当前1号系统的电机分配前缀
SetTagChar("XBT_motor","1号电机");//给弹窗画面中的标题分配内容
}
同理修改2号系统按钮
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
SetTagWord("X_弹窗",180);//弹窗画面窗口的位置
SetTagWord("Y_弹窗",240);//弹窗画面窗口的位置
SetTagBit("Temp_弹窗",0);//关闭上一个弹窗画面窗口
SetTagChar("BT_弹窗","2号系统");//BT_motor是1号弹窗画面窗口的标题变量
SetTagBit("Temp_弹窗",1);//打开弹窗弹窗画面窗口
SetTagWord("temp",1);//识别系统编号赋值便于给弹窗画面的变量前缀
SetTagBit("Temp_motor",1); //默认打开电机
SetTagBit("Temp_ventilator",0); //默认关闭风机
SetTagChar("Prefix_motor","2_Motor_"); //给当前1号系统的电机分配前缀
SetTagChar("XBT_motor","2号电机");//给弹窗画面中的标题分配内容
}
此时在切换画面的时候弹窗画面会自动显示出来,因此需要在画面切换按钮设置关闭全部的弹窗
#include "apdefap.h"
void OnLButtonUp(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)
{
SetTagBit("Temp_弹窗",0);
SetTagBit("Temp_motor",0);
SetTagBit("Temp_ventilator",0);
}
演示一下: