/*
 * 文件名:MitsubishiHMI_Script.ts
 * 程序描述:本程序是三菱触摸屏(GOT)的宏脚本,用于按钮点击检测与弹窗确认功能
 * 功能说明:
 *          1. 监控各种输入按钮信号的状态变化(从OFF到ON或从ON到OFF)
 *          2. 当检测到按钮点击(状态变化)时,更新相关寄存器值,触发弹窗显示
 *          3. 弹窗显示后,用户可按确认执行操作或按取消不执行操作
 *          4. 保存按钮状态的历史值,用于下一次循环检测状态变化
 *          5. 通过标志位控制脚本的执行流程
 * 注意事项:
 *          - 本脚本适用于三菱触摸屏的宏程序环境
 *          - 变量命名遵循三菱PLC的习惯:b:表示位变量,w:表示字变量
 *          - 请确保PLC中已正确定义相关的变量地址
 *          - 弹窗显示和确认取消操作的具体实现需要在触摸屏软件中配置
 * 类型:触摸屏宏脚本
 */

/* 主程序开始 */

/* 条件判断:只有当GB1020为0时才执行以下逻辑 */
/* GB1020是一个锁定标志位,当为1时表示正在处理某个操作,防止重复触发 */
if([b:GB1020]==0)

/* 以下代码块处理各种按钮状态变化并更新输出寄存器 */
{
    /* 处理GB201按钮状态变化 */
    /* 当GB201由OFF变为ON时(按钮被按下) */
    if(([b:GB201]) && !([b:GB1201])) /* 当GB201变为ON时 */
    {
        [w:GD500]=1;  /* 设置GD500为1(按钮组编号) */
        [w:GD501]=1;  /* 设置GD501为1(表示操作状态为"打开") */
        [w:GD502]=201; /* 设置GD502为201(按钮编号) */
        [w:GD300]=500; /* 设置GD300为500(触发标志,用于触发弹窗) */
    }

    /* 当GB201由ON变为OFF时(按钮被释放) */
    if(!([b:GB201]) && ([b:GB1201])) /* 当GB201变为OFF时 */
    {
        [w:GD500]=1;  /* 设置GD500为1(按钮组编号) */
        [w:GD501]=2;  /* 设置GD501为2(表示操作状态为"关闭") */
        [w:GD502]=201; /* 设置GD502为201(按钮编号) */
        [w:GD300]=500; /* 设置GD300为500(触发标志,用于触发弹窗) */
    }
    /* AV201 (注释:可能表示该按钮关联的设备或功能) */

    /* 处理GB202按钮状态变化 */
    /* 当GB202由OFF变为ON时(按钮被按下) */
    if(([b:GB202]) && !([b:GB1202])) /* 当GB202变为ON时 */
    {
        [w:GD500]=2;  /* 设置GD500为2(按钮组编号) */
        [w:GD501]=1;  /* 设置GD501为1(表示操作状态为"打开") */
        [w:GD502]=202; /* 设置GD502为202(按钮编号) */
        [w:GD300]=500; /* 设置GD300为500(触发标志,用于触发弹窗) */
    }

    /* 当GB202由ON变为OFF时(按钮被释放) */
    if(!([b:GB202]) && ([b:GB1202])) /* 当GB202变为OFF时 */
    {
        [w:GD500]=2;  /* 设置GD500为2(按钮组编号) */
        [w:GD501]=2;  /* 设置GD501为2(表示操作状态为"关闭") */
        [w:GD502]=202; /* 设置GD502为202(按钮编号) */
        [w:GD300]=500; /* 设置GD300为500(触发标志,用于触发弹窗) */
    }
    /* AV202 (注释:可能表示该按钮关联的设备或功能) */

    /* 处理GB203按钮状态变化 */
    /* 当GB203由OFF变为ON时(按钮被按下) */
    if(([b:GB203]) && !([b:GB1203])) /* 当GB203变为ON时 */
    {
        [w:GD500]=3;  /* 设置GD500为3(按钮组编号) */
        [w:GD501]=1;  /* 设置GD501为1(表示操作状态为"打开") */
        [w:GD502]=203; /* 设置GD502为203(按钮编号) */
        [w:GD300]=500; /* 设置GD300为500(触发标志,用于触发弹窗) */
    }

    /* 当GB203由ON变为OFF时(按钮被释放) */
    if(!([b:GB203]) && ([b:GB1203])) /* 当GB203变为OFF时 */
    {
        [w:GD500]=3;  /* 设置GD500为3(按钮组编号) */
        [w:GD501]=2;  /* 设置GD501为2(表示操作状态为"关闭") */
        [w:GD502]=203; /* 设置GD502为203(按钮编号) */
        [w:GD300]=500; /* 设置GD300为500(触发标志,用于触发弹窗) */
    }
    /* AV203 (注释:可能表示该按钮关联的设备或功能) */

    /* 以下省略了类似的GB204-GB802按钮处理逻辑... */
    /* 这些逻辑结构与上面相同,只是针对不同的按钮编号 */

    /* 处理GB101按钮状态变化 */
    /* 当GB101由OFF变为ON时(按钮被按下) */
    if(([b:GB101]) && !([b:GB1101])) /* 当GB101变为ON时 */
    {
        [w:GD500]=56; /* 设置GD500为56(按钮组编号) */
        [w:GD501]=1;  /* 设置GD501为1(表示操作状态为"打开") */
        [w:GD502]=101; /* 设置GD502为101(按钮编号) */
        [w:GD300]=500; /* 设置GD300为500(触发标志,用于触发弹窗) */
    }

    /* 当GB101由ON变为OFF时(按钮被释放) */
    if(!([b:GB101]) && ([b:GB1101])) /* 当GB101变为OFF时 */
    {
        [w:GD500]=56; /* 设置GD500为56(按钮组编号) */
        [w:GD501]=2;  /* 设置GD501为2(表示操作状态为"关闭") */
        [w:GD502]=101; /* 设置GD502为101(按钮编号) */
        [w:GD300]=500; /* 设置GD300为500(触发标志,用于触发弹窗) */
    }
    /* AV101 (注释:可能表示该按钮关联的设备或功能) */

    /* 处理GB102按钮状态变化 */
    /* 当GB102由OFF变为ON时(按钮被按下) */
    if(([b:GB102]) && !([b:GB1102])) /* 当GB102变为ON时 */
    {
        [w:GD500]=57; /* 设置GD500为57(按钮组编号) */
        [w:GD501]=1;  /* 设置GD501为1(表示操作状态为"打开") */
        [w:GD502]=102; /* 设置GD502为102(按钮编号) */
        [w:GD300]=500; /* 设置GD300为500(触发标志,用于触发弹窗) */
    }

    /* 当GB102由ON变为OFF时(按钮被释放) */
    if(!([b:GB102]) && ([b:GB1102])) /* 当GB102变为OFF时 */
    {
        [w:GD500]=57; /* 设置GD500为57(按钮组编号) */
        [w:GD501]=2;  /* 设置GD501为2(表示操作状态为"关闭") */
        [w:GD502]=102; /* 设置GD502为102(按钮编号) */
        [w:GD300]=500; /* 设置GD300为500(触发标志,用于触发弹窗) */
    }
    /* AV102 (注释:可能表示该按钮关联的设备或功能) */
}

/* 条件判断:当GD300为0时,重置GB1020为0 */
/* 当操作完成或取消后,GD300会被重置为0,此时释放锁定标志GB1020 */
if([w:GD300]==0)
{
    [b:GB1020]=0; /* 重置标志位GB1020,允许新的操作触发 */
}

/* 以下代码块将当前按钮状态保存到历史变量中,用于下一次循环检测状态变化 */

/* 保存GB201-GB216按钮的当前状态到历史变量GB1201-GB1216 */
[b:GB1201]=[b:GB201]; /* AV201 当前状态保存到历史变量,用于下周期比较 */
[b:GB1202]=[b:GB202]; /* AV202 当前状态保存到历史变量,用于下周期比较 */
[b:GB1203]=[b:GB203]; /* AV203 当前状态保存到历史变量,用于下周期比较 */
[b:GB1204]=[b:GB204]; /* AV204 当前状态保存到历史变量,用于下周期比较 */
[b:GB1205]=[b:GB205]; /* AV205 当前状态保存到历史变量,用于下周期比较 */
[b:GB1206]=[b:GB206]; /* AV206 当前状态保存到历史变量,用于下周期比较 */
[b:GB1207]=[b:GB207]; /* AV207 当前状态保存到历史变量,用于下周期比较 */
[b:GB1208]=[b:GB208]; /* AV208 当前状态保存到历史变量,用于下周期比较 */
[b:GB1209]=[b:GB209]; /* AV209 当前状态保存到历史变量,用于下周期比较 */
[b:GB1210]=[b:GB210]; /* AV210 当前状态保存到历史变量,用于下周期比较 */
[b:GB1211]=[b:GB211]; /* AV211 当前状态保存到历史变量,用于下周期比较 */
[b:GB1212]=[b:GB212]; /* AV212 当前状态保存到历史变量,用于下周期比较 */
[b:GB1213]=[b:GB213]; /* AV213 当前状态保存到历史变量,用于下周期比较 */
[b:GB1214]=[b:GB214]; /* AV214 当前状态保存到历史变量,用于下周期比较 */
[b:GB1215]=[b:GB215]; /* AV215 当前状态保存到历史变量,用于下周期比较 */
[b:GB1216]=[b:GB216]; /* AV216 当前状态保存到历史变量,用于下周期比较 */

/* 保存GB301-GB318按钮的当前状态到历史变量GB1301-GB1318 */
[b:GB1301]=[b:GB301]; /* AV301 当前状态保存到历史变量,用于下周期比较 */
[b:GB1302]=[b:GB302]; /* AV302 当前状态保存到历史变量,用于下周期比较 */
[b:GB1303]=[b:GB303]; /* AV303 当前状态保存到历史变量,用于下周期比较 */
[b:GB1304]=[b:GB304]; /* AV304 当前状态保存到历史变量,用于下周期比较 */
[b:GB1305]=[b:GB305]; /* AV305 当前状态保存到历史变量,用于下周期比较 */
[b:GB1306]=[b:GB306]; /* AV306 当前状态保存到历史变量,用于下周期比较 */
[b:GB1307]=[b:GB307]; /* AV307 当前状态保存到历史变量,用于下周期比较 */
[b:GB1308]=[b:GB308]; /* AV308 当前状态保存到历史变量,用于下周期比较 */
[b:GB1309]=[b:GB309]; /* AV309 当前状态保存到历史变量,用于下周期比较 */
[b:GB1310]=[b:GB310]; /* AV310 当前状态保存到历史变量,用于下周期比较 */
[b:GB1311]=[b:GB311]; /* AV311 当前状态保存到历史变量,用于下周期比较 */
[b:GB1312]=[b:GB312]; /* AV312 当前状态保存到历史变量,用于下周期比较 */
[b:GB1313]=[b:GB313]; /* AV313 当前状态保存到历史变量,用于下周期比较 */
[b:GB1314]=[b:GB314]; /* AV314 当前状态保存到历史变量,用于下周期比较 */
[b:GB1315]=[b:GB315]; /* AV315 当前状态保存到历史变量,用于下周期比较 */
[b:GB1316]=[b:GB316]; /* AV316 当前状态保存到历史变量,用于下周期比较 */
[b:GB1317]=[b:GB317]; /* AV217 当前状态保存到历史变量,用于下周期比较 */
[b:GB1318]=[b:GB318]; /* AV318 当前状态保存到历史变量,用于下周期比较 */

/* 保存GB401-GB405按钮的当前状态到历史变量GB1401-GB1405 */
[b:GB1401]=[b:GB401]; /* AV401 当前状态保存到历史变量,用于下周期比较 */
[b:GB1402]=[b:GB402]; /* AV402 当前状态保存到历史变量,用于下周期比较 */
[b:GB1403]=[b:GB403]; /* AV403 当前状态保存到历史变量,用于下周期比较 */
[b:GB1404]=[b:GB404]; /* AV404 当前状态保存到历史变量,用于下周期比较 */
[b:GB1405]=[b:GB405]; /* AV405 当前状态保存到历史变量,用于下周期比较 */

/* 保存GB501-GB502按钮的当前状态到历史变量GB1501-GB1502 */
[b:GB1501]=[b:GB501]; /* AV501 当前状态保存到历史变量,用于下周期比较 */
[b:GB1502]=[b:GB502]; /* AV502 当前状态保存到历史变量,用于下周期比较 */

/* 保存GB601-GB602按钮的当前状态到历史变量GB1601-GB1602 */
[b:GB1601]=[b:GB601]; /* AV601 当前状态保存到历史变量,用于下周期比较 */
[b:GB1602]=[b:GB602]; /* AV602 当前状态保存到历史变量,用于下周期比较 */

/* 保存GB701-GB703按钮的当前状态到历史变量GB1701-GB1703 */
[b:GB1701]=[b:GB701]; /* AV701 当前状态保存到历史变量,用于下周期比较 */
[b:GB1702]=[b:GB702]; /* AV702 当前状态保存到历史变量,用于下周期比较 */
[b:GB1703]=[b:GB703]; /* AV702 当前状态保存到历史变量,用于下周期比较 */

/* 保存GB801-GB802按钮的当前状态到历史变量GB1801-GB1802 */
[b:GB1801]=[b:GB801]; /* AV801 当前状态保存到历史变量,用于下周期比较 */
[b:GB1802]=[b:GB802]; /* AV801 当前状态保存到历史变量,用于下周期比较 */

/* 保存GB101-GB102按钮的当前状态到历史变量GB1101-GB1102 */
[b:GB1101]=[b:GB101]; /* AV101 当前状态保存到历史变量,用于下周期比较 */
[b:GB1102]=[b:GB102]; /* AV102 当前状态保存到历史变量,用于下周期比较 */

/* 主程序结束 */

/* 程序二:用户确认操作后的执行逻辑 */
/* 当用户在弹窗中点击确认按钮后,根据GD502的值执行相应按钮的状态翻转操作 */

/* 处理GB201-G216按钮的确认操作 */
if(([w:GD502]==201))
{
    alt([b:GB201]);
    [w:GD300]=0;
} /* 翻转GB201状态并重置触发标志 */

if(([w:GD502]==202))
{
    alt([b:GB202]);
    [w:GD300]=0;
} /* 翻转GB202状态并重置触发标志 */

if(([w:GD502]==203))
{
    alt([b:GB203]);
    [w:GD300]=0;
} /* 翻转GB203状态并重置触发标志 */

if(([w:GD502]==204))
{
    alt([b:GB204]);
    [w:GD300]=0;
} /* 翻转GB204状态并重置触发标志 */

if(([w:GD502]==205))
{
    alt([b:GB205]);
    [w:GD300]=0;
} /* 翻转GB205状态并重置触发标志 */

if(([w:GD502]==206))
{
    alt([b:GB206]);
    [w:GD300]=0;
} /* 翻转GB206状态并重置触发标志 */

if(([w:GD502]==207))
{
    alt([b:GB207]);
    [w:GD300]=0;
} /* 翻转GB207状态并重置触发标志 */

if(([w:GD502]==208))
{
    alt([b:GB208]);
    [w:GD300]=0;
} /* 翻转GB208状态并重置触发标志 */

if(([w:GD502]==209))
{
    alt([b:GB209]);
    [w:GD300]=0;
} /* 翻转GB209状态并重置触发标志 */

if(([w:GD502]==210))
{
    alt([b:GB210]);
    [w:GD300]=0;
} /* 翻转GB210状态并重置触发标志 */

if(([w:GD502]==211))
{
    alt([b:GB211]);
    [w:GD300]=0;
} /* 翻转GB211状态并重置触发标志 */

if(([w:GD502]==212))
{
    alt([b:GB212]);
    [w:GD300]=0;
} /* 翻转GB212状态并重置触发标志 */

if(([w:GD502]==213))
{
    alt([b:GB213]);
    [w:GD300]=0;
} /* 翻转GB213状态并重置触发标志 */

if(([w:GD502]==214))
{
    alt([b:GB214]);
    [w:GD300]=0;
} /* 翻转GB214状态并重置触发标志 */

if(([w:GD502]==215))
{
    alt([b:GB215]);
    [w:GD300]=0;
} /* 翻转GB215状态并重置触发标志 */

if(([w:GD502]==216))
{
    alt([b:GB216]);
    [w:GD300]=0;
} /* 翻转GB216状态并重置触发标志 */

/* 处理GB301-GB316按钮的确认操作 */
if(([w:GD502]==301))
{
    alt([b:GB301]);
    [w:GD300]=0;
} /* 翻转GB301状态并重置触发标志 */

if(([w:GD502]==302))
{
    alt([b:GB302]);
    [w:GD300]=0;
} /* 翻转GB302状态并重置触发标志 */

if(([w:GD502]==303))
{
    alt([b:GB303]);
    [w:GD300]=0;
} /* 翻转GB303状态并重置触发标志 */

if(([w:GD502]==304))
{
    alt([b:GB304]);
    [w:GD300]=0;
} /* 翻转GB304状态并重置触发标志 */

if(([w:GD502]==305))
{
    alt([b:GB305]);
    [w:GD300]=0;
} /* 翻转GB305状态并重置触发标志 */

if(([w:GD502]==306))
{
    alt([b:GB306]);
    [w:GD300]=0;
} /* 翻转GB306状态并重置触发标志 */

if(([w:GD502]==307))
{
    alt([b:GB307]);
    [w:GD300]=0;
} /* 翻转GB307状态并重置触发标志 */

if(([w:GD502]==308))
{
    alt([b:GB308]);
    [w:GD300]=0;
} /* 翻转GB308状态并重置触发标志 */

if(([w:GD502]==309))
{
    alt([b:GB309]);
    [w:GD300]=0;
} /* 翻转GB309状态并重置触发标志 */

if(([w:GD502]==310))
{
    alt([b:GB310]);
    [w:GD300]=0;
} /* 翻转GB310状态并重置触发标志 */

if(([w:GD502]==311))
{
    alt([b:GB311]);
    [w:GD300]=0;
} /* 翻转GB311状态并重置触发标志 */

if(([w:GD502]==312))
{
    alt([b:GB312]);
    [w:GD300]=0;
} /* 翻转GB312状态并重置触发标志 */

if(([w:GD502]==313))
{
    alt([b:GB313]);
    [w:GD300]=0;
} /* 翻转GB313状态并重置触发标志 */

if(([w:GD502]==314))
{
    alt([b:GB314]);
    [w:GD300]=0;
} /* 翻转GB314状态并重置触发标志 */

if(([w:GD502]==315))
{
    alt([b:GB315]);
    [w:GD300]=0;
} /* 翻转GB315状态并重置触发标志 */

if(([w:GD502]==316))
{
    alt([b:GB316]);
    [w:GD300]=0;
} /* 翻转GB316状态并重置触发标志 */

/* 处理GB401-GB405按钮的确认操作 */
if(([w:GD502]==401))
{
    alt([b:GB401]);
    [w:GD300]=0;
} /* 翻转GB401状态并重置触发标志 */

if(([w:GD502]==402))
{
    alt([b:GB402]);
    [w:GD300]=0;
} /* 翻转GB402状态并重置触发标志 */

if(([w:GD502]==403))
{
    alt([b:GB403]);
    [w:GD300]=0;
} /* 翻转GB403状态并重置触发标志 */

if(([w:GD502]==404))
{
    alt([b:GB404]);
    [w:GD300]=0;
} /* 翻转GB404状态并重置触发标志 */

if(([w:GD502]==405))
{
    alt([b:GB405]);
    [w:GD300]=0;
} /* 翻转GB405状态并重置触发标志 */

/* 处理GB501-GB502按钮的确认操作 */
if(([w:GD502]==501))
{
    alt([b:GB501]);
    [w:GD300]=0;
} /* 翻转GB501状态并重置触发标志 */

if(([w:GD502]==502))
{
    alt([b:GB502]);
    [w:GD300]=0;
} /* 翻转GB502状态并重置触发标志 */

/* 处理GB601-GB602按钮的确认操作 */
if(([w:GD502]==601))
{
    alt([b:GB601]);
    [w:GD300]=0;
} /* 翻转GB601状态并重置触发标志 */

if(([w:GD502]==602))
{
    alt([b:GB602]);
    [w:GD300]=0;
} /* 翻转GB602状态并重置触发标志 */

/* 处理GB701-GB703按钮的确认操作 */
if(([w:GD502]==701))
{
    alt([b:GB701]);
    [w:GD300]=0;
} /* 翻转GB701状态并重置触发标志 */

if(([w:GD502]==702))
{
    alt([b:GB702]);
    [w:GD300]=0;
} /* 翻转GB702状态并重置触发标志 */

if(([w:GD502]==703))
{
    alt([b:GB703]);
    [w:GD300]=0;
} /* 翻转GB703状态并重置触发标志 */

/* 处理GB801-GB802按钮的确认操作 */
if(([w:GD502]==801))
{
    alt([b:GB801]);
    [w:GD300]=0;
    } /* 翻转GB801状态并重置触发标志 */

if(([w:GD502]==802))
{
    alt([b:GB802]);
    [w:GD300]=0;
} /* 翻转GB802状态并重置触发标志 */

/* 处理GB101-GB102按钮的确认操作 */
if(([w:GD502]==101))
{
    alt([b:GB101]);
    [w:GD300]=0;
} /* 翻转GB101状态并重置触发标志 */

if(([w:GD502]==102))
{
    alt([b:GB102]);
    [w:GD300]=0;
} /* 翻转GB102状态并重置触发标志 */