/*
* 文件名: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状态并重置触发标志 */
李枭龙8 个月前
AI生成文章:请以上所有知识进行深入分析,确定主要知识点,为每个知识点撰写详细说明并附上具有代表性且带有清晰注释的代码示例,接着根据内容拟定一个准确反映文档核心的标题,最后严格按照 Markdown 格式进行排版,确保文档规范美观,以满足初学者学习使用的需求。
李枭龙1 年前
X Lucas