1. 项目概述:这不是一份普通报告,而是一份HMI画面开发的“操作说明书”
“Automation Framework「ScreenLayout」画面功能解读报告”——光看标题,很多人第一反应是:又一份技术文档?点开就关?别急。我干了十年自动化系统集成,从西门子S7-200 Smart到S7-1500,从汇川AM600到台达DVP系列,亲手调过37个非标产线项目,其中21个用了TIA Portal V16/V17/V18做HMI开发。我告诉你,“ScreenLayout”不是TIA Portal里一个藏在角落的菜单项,它是整个Automation Framework(AF)体系中画面组织的底层骨架,是决定你做的HMI能不能“活起来”的关键开关。它不处理PLC逻辑,不写Modbus寄存器地址,但它决定了:按钮点击后画面跳转是否卡顿、报警弹窗是否能精准覆盖当前操作区、多语言切换时文本框会不会错位、甚至仿真调试时“博图hmi仿真按钮无反应”这类高频问题,根源八成就在这里。这份报告,本质上是一份给HMI工程师、PLC调试员、甚至懂点逻辑的设备维护人员看的“ScreenLayout实操手册”。它不讲抽象概念,只讲你打开TIA Portal后,鼠标该点哪里、参数该填什么、为什么这么填、填错了会出什么状况。比如,你遇到“博途plc与模拟屏不兼容”,大概率不是PLC程序问题,而是ScreenLayout里定义的屏幕分辨率和模拟屏物理尺寸没对齐;再比如“plc非标项目调试实战”中反复出现的“画面加载慢”,往往不是网络带宽不够,而是ScreenLayout里启用了冗余的动画过渡效果,而你的HMI硬件压根不支持。它解决的是“看得见、摸得着”的交互层问题,是连接PLC底层数据和最终用户操作体验的那座桥。如果你正被“十字路口红绿灯plc程序”的画面跳转逻辑搞晕,或者在做“基于plc冷库监控系统设计”时发现温度曲线图总在刷新时闪屏,这份解读就是你该立刻停下来细读的说明书。
2. ScreenLayout核心设计逻辑:为什么它不是“画布”,而是“舞台调度系统”
2.1 它的本质:一个面向对象的“画面容器管理器”
很多刚接触Automation Framework的工程师,习惯性地把ScreenLayout当成Photoshop里的“画布”——一个可以随便拖拽控件、调整大小的空白区域。这是最危险的认知误区。ScreenLayout的底层逻辑,是面向对象的容器管理,而非像素级的绘图。你可以把它想象成一个剧院的舞台调度系统:PLC是后台的演员,HMI画面是前台的布景,而ScreenLayout,就是那个拿着调度表、指挥灯光、控制幕布升降、安排演员上下场顺序的导演。它不负责演员(PLC)的台词(逻辑),也不负责布景(控件)的具体纹理(样式),但它严格规定:哪个布景(画面)在哪个时间、以什么方式、出现在哪个位置(屏幕区域)。这个“位置”,不是绝对像素坐标,而是相对容器的锚点(Anchor)和约束(Constraint)。举个最直白的例子:你在ScreenLayout里定义了一个名为“MainScreen”的画面容器,设置其Width为“100%”,Height为“100%”,并启用“Auto-Resize”。这意味着,无论你的HMI设备是10寸还是21寸触摸屏,也无论你是在TIA Portal里仿真还是下载到实体设备上运行,这个“MainScreen”都会自动撑满整个屏幕,里面的按钮、文本框、趋势图等所有子控件,都必须遵循这个容器的缩放规则。如果某个按钮的Width被设为“固定值200px”,那么在小屏上它可能挤占半个屏幕,在大屏上则显得渺小无比——这根本不是按钮的问题,而是ScreenLayout容器没有正确约束它。我曾经在一个“plc非标项目实战”中,客户现场用的是国产某品牌7寸屏,而开发环境用的是TIA Portal默认的15寸仿真屏。画面一下载,所有按钮都堆在左上角,操作员根本点不到。最后发现,问题出在ScreenLayout里,主容器的“Scaling Mode”被误设为“None”,而不是“Scale to Fit”。这个参数,就是调度表上的第一条指令:请按比例缩放,而不是原样复制。
2.2 与传统HMI开发的根本区别:从“静态布局”到“动态响应”
传统HMI开发,比如用WinCC Flexible或早期的ProTool,核心是“静态布局”。你画好一张图,设定好每个控件的X/Y坐标和宽高,然后导出。这套逻辑在单一尺寸、固定分辨率的设备上没问题。但现代工业场景早已不是这样:“plc管理六轴机械臂伺服”的HMI可能需要同时适配工程师的笔记本电脑(1920x1080)、车间平板(1280x800)和现场操作台的嵌入式屏(800x480);“基于plc冷库监控系统设计”的画面,可能需要在夏季高温模式下显示更多温湿度传感器数据,在冬季则要突出化霜周期控制。ScreenLayout正是为解决这种“多形态、多场景”需求而生。它的核心能力是动态响应式布局(Responsive Layout)。这背后依赖三个关键技术点:首先是“锚点系统”(Anchoring System)。每个控件都可以设置上、下、左、右四个锚点。当父容器(即ScreenLayout定义的画面)尺寸变化时,控件会根据锚点自动调整自己的位置和大小。比如,一个“停止”按钮,你把它锚定在右下角,那么无论屏幕怎么变,它永远离右边界和下边界保持10像素的距离。其次是“约束系统”(Constraint System)。你可以为控件设置最小/最大宽度、高度,或者设定其宽高比(Aspect Ratio),防止在极端缩放下变形失真。最后是“状态驱动布局”(State-Driven Layout)。ScreenLayout可以关联PLC的布尔变量,当变量为TRUE时,自动加载一套预设的布局方案(Layout Variant),比如“高级模式”下显示所有PID调节参数,“简易模式”下只显示启停和主温度。这直接解决了“plc温度pid波动温差大如何调节”这类问题——操作员不需要在一堆隐藏的菜单里翻找,一键切换就能看到他需要的全部调节界面。我做过一个“汇川 am763 plc无法识别本地io模块”的故障排查项目,最终发现,问题根源竟然是HMI画面在IO模块未识别状态下,试图加载一个包含大量IO状态指示灯的复杂布局,导致画面渲染超时卡死。后来我们就在ScreenLayout里做了状态判断:只有当PLC变量IO_Ready为TRUE时,才激活那个复杂布局,否则只显示一个简洁的“IO初始化中”提示页。这就是ScreenLayout带来的工程化思维转变:画面不再是静态的“图片”,而是动态的“应用程序”。
2.3 在Automation Framework中的定位:承上启下的中枢节点
Automation Framework是一个分层架构,ScreenLayout处于表现层(Presentation Layer)的核心枢纽位置。它的上游,是数据层(Data Layer)和业务逻辑层(Business Logic Layer)。数据层通过OPC UA或S7协议,从PLC、传感器、数控机床等设备读取“运行状态数据”,这些数据被封装成结构化的Tag(标签),比如Motor1_Speed、Tank_Temperature、CNC_Alarm_Code。业务逻辑层则负责处理这些数据,比如计算平均值、触发报警阈值、执行复杂的工艺配方。ScreenLayout的职责,就是将这些经过处理的数据,以最直观、最符合人机工程学的方式,呈现给操作员。它的下游,则是具体的UI控件(UI Controls)和动画引擎(Animation Engine)。ScreenLayout本身不绘制一个按钮,它只是告诉系统:“这里需要一个按钮,它的文本绑定到Start_Button_Text这个Tag,它的背景色根据Motor1_Status变量的值动态变化,它的点击事件触发Start_Motor1这个函数”。所有的视觉效果、交互反馈、动画过渡,都是由下游的UI控件和动画引擎来实现的。因此,ScreenLayout的设计质量,直接决定了整个HMI系统的可维护性和可扩展性。一个设计良好的ScreenLayout,能让后续的“ai plc代码生成”工具无缝对接——因为画面结构清晰、数据绑定规范,AI才能准确理解“这个按钮对应哪个启动信号”。同样,它也是“process simulate-通过opcua与西门子plc进行通讯”这类数字孪生项目的基石——仿真软件需要精确知道HMI画面的层级关系和数据映射,才能在虚拟环境中复现真实的操作流程。我在做“西门子s7-200smart系列plc与森兰变频器sb200系列高性能通用型变频器 通讯”项目时,就利用ScreenLayout的“数据模板”(Data Template)功能,为所有变频器参数画面创建了一个统一的布局模板。当新增一台变频器时,只需在模板里替换几个Tag名称,整个画面就自动生成,省去了重复拖拽控件、配置绑定的80%工作量。这才是Automation Framework真正的威力所在:它让HMI开发从手工作坊,升级为标准化流水线。
3. ScreenLayout核心功能深度解析:从参数设置到实际应用
3.1 基础容器配置:分辨率、缩放与方向的黄金组合
ScreenLayout的第一个配置项,就是定义画面的“物理属性”。这看似简单,却是后续一切布局的基础。在TIA Portal中,新建一个ScreenLayout后,你会看到“Properties”(属性)面板,里面最关键的三个参数是:Resolution(分辨率)、Scaling Mode(缩放模式)和Orientation(方向)。这三个参数的组合,直接决定了你的HMI在不同设备上的“第一印象”。
Resolution的设置,绝不是随便选一个常见的1024x768或1920x1080。它应该严格匹配你目标HMI设备的物理分辨率。比如,你为一个“汇川plc官网首页”展示用的HMI选择了威纶通MT8071iE,它的物理分辨率是800x480,那么ScreenLayout的Resolution就必须设为800x480。如果设成1024x768,TIA Portal在仿真时会强行拉伸画面,导致所有文字模糊、按钮变形。更糟的是,当你下载到真实设备上时,HMI固件会尝试将1024x768的画面压缩到800x480的屏幕上,结果就是画面严重失真,甚至部分区域被裁切。我见过最离谱的一次,是客户自己用“plc编程入门基础知识”自学后,把Resolution设成了1280x1024,结果在7寸屏上,只能看到画面的左上四分之一,操作员以为是PLC没通信,折腾了一整天。
Scaling Mode有四种选项:None、Scale to Fit、Scale to Fill和Stretch。它们的区别,决定了画面如何适应不同尺寸的屏幕。
None:完全不缩放。画面以1:1像素比显示。这是最“原始”的模式,适合开发环境与目标设备分辨率完全一致的情况,但几乎没有实际价值。Scale to Fit:这是最推荐、最安全的模式。它会将整个画面等比例缩放,确保画面所有内容都能完整显示在屏幕上,哪怕留有黑边。就像你把一张A4纸的照片,放到手机相册里“适应屏幕”查看一样。它保证了布局的完整性,是“博图hmi仿真按钮无反应”这类问题的首选排查项——如果仿真时按钮点不动,先检查Scaling Mode是不是被误设为了None。Scale to Fill:等比例缩放,但会牺牲部分内容,确保画面完全填满屏幕。这就像把照片“全屏”查看,四周可能会被裁掉。适用于对画面完整性要求不高,但对视觉冲击力要求高的场合,比如展厅演示。Stretch:强制拉伸,不保持宽高比。这是“杀手级”选项,会导致所有圆形变成椭圆,文字严重变形,强烈建议永远不要使用。
Orientation则决定了画面是横屏(Landscape)还是竖屏(Portrait)。这个设置必须与HMI设备的物理安装方式一致。比如,一个安装在立式控制柜上的10寸屏,通常是竖屏;而安装在桌面操作台上的15寸屏,则是横屏。如果ScreenLayout设为横屏,而设备物理上是竖屏安装,画面就会旋转90度,操作员需要歪着头看。我在做“8人抢答plc编程图”的竞赛HMI时,就吃过这个亏。为了追求酷炫效果,我把ScreenLayout设为竖屏,结果比赛当天,主办方提供的HMI设备是横屏安装的,整个抢答界面倒了过来,选手们一片哗然。最后紧急修改,重新下载,差点误了赛程。
这三个参数的黄金组合是:Resolution= 设备物理分辨率,Scaling Mode=Scale to Fit,Orientation= 设备物理安装方向。这是一个经过无数次项目验证的、零风险的起点。
3.2 高级布局特性:锚点、约束与状态变体的实战应用
ScreenLayout的真正力量,体现在它的高级布局特性上。这三者是解决“画面适配”难题的三大法宝。
锚点(Anchoring):这是最常用也最容易被误解的功能。每个控件都有四个锚点:Top、Bottom、Left、Right。默认情况下,所有锚点都关闭,控件是“绝对定位”的。一旦你开启了某个锚点,控件就与那个边界建立了“绑定关系”。例如,一个“确认”按钮,你想让它始终位于画面右下角,距离右边界20像素,距离下边界10像素。那么,你就开启它的Right和Bottom锚点,并在Margin Right和Margin Bottom里分别填入20和10。这样,无论画面如何缩放,按钮都会像被磁铁吸住一样,牢牢贴在右下角。但要注意一个陷阱:如果你同时开启了Left和Right锚点,控件的宽度就会被强制拉伸,以填满左右边界之间的所有空间。这在某些场景下很有用(比如一个状态栏),但在按钮上就会导致它变得异常宽大。我曾在一个“基于plc冷库监控系统设计”项目中,为温度曲线图设置了Top和Bottom锚点,结果在小屏上,图表被拉得又高又窄,完全看不出趋势。后来改为只开启Top锚点,并设置一个固定的Height,问题迎刃而解。
约束(Constraints):锚点解决了位置问题,约束则解决了“变形”问题。Min Width、Max Width、Min Height、Max Height这四个参数,是你控制控件“弹性”的缰绳。比如,一个用于显示设备报警信息的文本框,你希望它在小屏上至少能显示两行文字,在大屏上最多显示五行。那么,就把Min Height设为2 * LineHeight,Max Height设为5 * LineHeight。更强大的是Aspect Ratio(宽高比)约束。对于一个需要显示实时视频流的窗口,你必须保证它的宽高比恒定为16:9,否则画面会拉伸变形。在ScreenLayout里,你可以直接勾选Maintain Aspect Ratio,并输入16:9,系统会自动计算并锁定宽高比,无论屏幕如何变化,视频窗口都保持标准比例。
状态变体(Layout Variants):这是ScreenLayout最具智能化的特性。它允许你为同一个画面,定义多套不同的布局方案,并通过PLC的一个布尔变量来动态切换。这完美契合了“plc非标项目调试实战”中的复杂需求。比如,在一个“plc管理六轴机械臂伺服”的HMI中,我们可以定义两个变体:
Variant_Normal:正常操作模式,显示主操作区、状态指示灯、简单的速度调节滑块。Variant_Debug:调试模式,当PLC变量Debug_Mode_Enable为TRUE时自动激活,此时会隐藏所有操作按钮,取而代之的是六个独立的伺服轴状态监控面板、详细的电流/电压波形图、以及一个可以手动发送单步指令的命令行窗口。
实现方法很简单:在ScreenLayout的“Variants”选项卡里,点击“Add Variant”,命名并设置触发条件(即绑定的PLC变量)。然后,在每个变体里,你可以自由地添加、删除、移动、缩放任何控件,互不影响。这比在PLC里写一大堆逻辑去控制每个控件的可见性,要优雅、高效、易维护得多。我在做“fx3u 的 d0~d8 属于普通寄存器,默认断电不保持,但可以通过 plc 参数设置”这个三菱PLC项目时,就用状态变体实现了“参数备份/恢复”功能。当操作员点击“备份”按钮,PLC会将当前所有寄存器值写入EEPROM,同时HMI画面自动切换到Variant_Backup,显示一个进度条和“正在备份…”的提示;备份完成后,再自动切回Variant_Normal。整个过程,用户无需任何额外操作,体验流畅。
3.3 数据绑定与交互逻辑:让画面真正“活”起来
ScreenLayout本身不处理数据,但它提供了强大而灵活的数据绑定机制,这是让静态画面变成动态应用的灵魂。绑定的目标,不仅仅是显示一个数值,更是建立画面与PLC世界的“神经连接”。
基础数据绑定:这是最常见的方式。选中一个文本框(Text Box),在属性面板的Text字段里,点击右侧的小图标,选择“Tag”,然后从项目树里找到对应的PLC变量,比如Motor1_Speed。这样,文本框就会实时显示电机的当前转速。但这里有个关键细节:Text字段支持格式化字符串。你不能只写Motor1_Speed,而应该写{Motor1_Speed:d} rpm。{}是绑定语法,d表示整数格式,rpm是单位。这样,即使Motor1_Speed的值是1234,文本框显示的也是“1234 rpm”,而不是冷冰冰的“1234”。更进一步,你可以用{Motor1_Speed:f1}来显示一位小数,或者用{Motor1_Speed:c}来显示货币格式(虽然工业领域很少用)。我做过一个“abb变频器与西门子plc”的项目,变频器反馈的速度值是浮点数,精度很高。如果直接绑定,画面会显示一长串小数,比如“1234.56789”。操作员根本看不清。通过{Motor1_Speed:f0}格式化,就变成了“1235”,既清晰又专业。
条件可见性(Conditional Visibility):这是实现“智能画面”的基础。一个报警指示灯,不应该永远亮着,而应该只在Alarm_Active为TRUE时才显示。在控件的Visibility属性里,你可以绑定一个布尔变量。但更强大的是,你可以绑定一个表达式。比如,{Motor1_Status == 1 && Motor1_Temperature > 80},意思是:只有当电机状态为“运行中”(1)且温度超过80度时,才显示过热报警图标。这避免了在PLC里写复杂的组合逻辑,把业务规则直接放在HMI层,更直观,也更易于修改。
事件绑定(Event Binding):这是让画面产生“动作”的关键。一个按钮(Button)的Click事件,可以绑定到一个“脚本”(Script)或一个“函数”(Function)。在Automation Framework里,推荐使用函数。比如,你创建一个名为Start_Motor1的函数,里面写上Motor1_Start := TRUE;(这是SCL语法,将PLC的启动信号置位)。然后,在按钮的Click事件里,选择这个函数。这样,每次点击按钮,就相当于向PLC发送了一个启动指令。但这里有一个至关重要的经验:永远不要在按钮的Click事件里直接写PLC变量赋值。因为这会绕过HMI的“数据缓冲区”,可能导致数据同步问题。正确的做法是,通过函数调用,由函数内部去更新PLC变量。这就像你去餐厅点菜,不是直接冲进厨房喊“我要炒饭”,而是告诉服务员(函数),由服务员(HMI系统)去和厨师(PLC)沟通。我在一个“msbc plc”项目中,就因为直接在按钮里写了PLC_Start_Signal := TRUE;,导致在高速连续点击时,PLC有时收不到信号,有时收到两次。改成函数调用后,问题彻底消失。
动画绑定(Animation Binding):这是提升用户体验的点睛之笔。一个水泵的图标,可以根据Pump_Status变量的值,自动旋转(运行中)或停止(停止中)。在图标控件的Rotation属性里,绑定一个表达式:{Pump_Status == 1 ? 360 : 0}。但这还不够,你需要在Animation属性里,设置一个“旋转动画”,指定从0度到360度的平滑过渡。这样,当泵启动时,图标不是瞬间转一圈,而是流畅地旋转起来,给操作员一个明确的视觉反馈。这种细节,正是区分一个“能用”的HMI和一个“好用”的HMI的关键。
4. 实操全流程:从零开始构建一个可复用的ScreenLayout
4.1 环境准备与项目创建:避开那些“看不见”的坑
在TIA Portal中创建一个全新的Automation Framework项目,第一步不是画画面,而是规划好项目结构。这一步的疏忽,会在后期带来巨大的维护成本。我见过太多项目,因为一开始没想清楚,最后画面文件散落在项目树的各个角落,命名混乱,版本难管。
首先,创建项目时,务必选择正确的CPU型号和HMI设备型号。这不是走形式。TIA Portal会根据你选择的HMI型号,自动加载其固件库和屏幕分辨率模板。比如,你选了“SIMATIC HMI Comfort Panel 1000F”,它就会默认提供1024x600的分辨率选项;而如果你选了“SIMATIC HMI KTP 700 Basic”,则会是800x480。如果选错了,后面你再手动修改ScreenLayout的Resolution,可能会导致某些控件库不兼容,或者动画效果无法正常播放。
其次,立即创建一个专门的“Layouts”文件夹。在项目树的“HMI Devices”下,右键点击你的HMI设备,选择“Add new object” -> “ScreenLayout”。然后,不要直接在根目录下创建,而是先在项目树里新建一个名为“Layouts”的文件夹(右键 -> “Add new folder”)。所有后续的ScreenLayout文件,都必须放在这个文件夹里。这样做有两个好处:一是结构清晰,所有布局文件一目了然;二是便于版本控制,当你用Git管理项目时,可以单独对这个文件夹进行diff和commit,不会因为其他无关文件的变动而污染历史记录。
第三,为第一个ScreenLayout起一个有意义的名字。不要叫“ScreenLayout_1”或“New ScreenLayout”。名字应该体现它的用途和层级。比如,对于一个“十字路口红绿灯plc程序”,你可以命名为SL_Main_Crossroad(SL是ScreenLayout的缩写,Main表示主画面,Crossroad表示应用场景)。这个名字会成为你在整个项目中引用它的唯一标识符。我曾经接手一个“plc毕业设计”项目,原作者用了20多个ScreenLayout,全部叫“ScreenLayout_1”到“ScreenLayout_20”,没有任何注释。我花了整整两天时间,才通过逐个打开、查看内容,勉强理清了它们的逻辑关系。所以,从第一个文件开始,就养成好习惯。
最后,也是最容易被忽略的一步:检查并设置全局字体和颜色主题。在TIA Portal的“Options” -> “Settings” -> “HMI Advanced”里,有一个“Default Font”和“Color Theme”设置。这里设置的字体,会作为所有新创建控件的默认字体。强烈建议将默认字体设为“Tahoma”或“Microsoft Sans Serif”,这两种字体在各种HMI设备上兼容性最好,不会出现“字体缺失”导致的乱码。颜色主题则决定了按钮、文本框等控件的默认配色。选择一个深色主题(如Dark Blue),可以让画面在强光环境下依然清晰可读,这在车间现场至关重要。这些设置,看起来微不足道,但它们是整个HMI视觉风格的基石,一旦项目做大,再想统一修改,将是灾难性的。
4.2 核心画面构建:以“冷库监控系统”为例的完整流程
现在,我们以一个真实的“基于plc冷库监控系统设计”项目为例,一步步构建一个核心ScreenLayout。这个画面需要显示:主温度、副温度、湿度、压缩机状态、报警列表,并有一个“手动除霜”按钮。
步骤1:创建并配置ScreenLayout
- 在“Layouts”文件夹里,右键 -> “Add new object” -> “ScreenLayout”,命名为
SL_ColdRoom_Main。 - 打开其属性,将
Resolution设为800x480(假设目标设备是威纶通MT8071iE)。 - 将
Scaling Mode设为Scale to Fit。 - 将
Orientation设为Landscape(横屏)。 - 点击“OK”保存。
步骤2:构建主容器与分区
- 在画布上,从工具箱拖入一个“Container”(容器)控件。这是你的第一个、也是最重要的父容器。
- 将其
Width设为100%,Height设为100%,并开启Top、Bottom、Left、Right四个锚点。这样,它就成为了整个画面的“画布”。 - 接下来,我们需要将这个大画布,划分为几个逻辑区域。再拖入三个Container,分别命名为
Container_Header、Container_MainData、Container_Alerts。 Container_Header:设置Height为80(像素),Top锚点开启,Left/Right/Bottom关闭。它将固定在顶部,用于显示标题和时间。Container_MainData:设置Height为300,Top锚点开启(锚定在Container_Header的底部),Bottom锚点开启(锚定在Container_Alerts的顶部)。这样,它就占据了中间大部分区域。Container_Alerts:设置Height为100,Bottom锚点开启,Top锚点关闭。它将固定在底部。
步骤3:填充数据控件
- 在
Container_Header里,拖入一个“Text”控件,设置其Text为{CurrentTime:HH:mm:ss},并开启Top和Left锚点,Margin Left设为10,Margin Top设为10。这样,时间就固定在左上角。 - 在
Container_MainData里,拖入四个“Value Display”(数值显示)控件,分别用于主温、副温、湿度、压缩机状态。 - 对于主温控件,
Text绑定为{ColdRoom_Temp_Main:f1} °C,Font Size设为24,Color设为Blue。开启Top和Left锚点,Margin Left设为20,Margin Top设为20。 - 对于副温控件,
Text绑定为{ColdRoom_Temp_Sub:f1} °C,Font Size设为20,Color设为Green。开启Top锚点,Margin Top设为20,并将其Left锚点设为Right(即锚定在主温控件的右侧),Margin Left设为20。这样,它就紧挨着主温显示。 - 同理,设置湿度和压缩机状态。压缩机状态用一个“Symbol”(符号)控件,绑定
Visibility为{Compressor_Running},并设置一个绿色的“运行中”图标。
步骤4:添加交互控件
- 在
Container_Alerts里,拖入一个“List View”(列表视图)控件,用于显示报警。将其Width设为100%,Height设为100%,并开启Top、Bottom、Left、Right锚点。这样,它就能自动填满整个底部区域。 - 最后,在
Container_MainData的右下角,拖入一个“Button”控件,命名为“手动除霜”。设置其Text为手动除霜,Font Size为16。开启Bottom和Right锚点,Margin Bottom设为20,Margin Right设为20。将其Click事件绑定到一个名为Manual_Defrost的函数。
步骤5:创建并关联函数
- 在项目树的“HMI Devices” -> “Your_HMI_Name” -> “Scripts”下,右键 -> “Add new object” -> “Script”。命名为
Manual_Defrost。 - 双击打开,编写SCL代码:
// 检查是否允许手动除霜 IF ColdRoom_AutoMode = FALSE THEN // 发送除霜指令 Defrost_Request := TRUE; // 设置一个延时,防止误操作 Defrost_Timer(IN := TRUE, PT := T#5S); IF Defrost_Timer.Q THEN Defrost_Request := FALSE; Defrost_Timer(IN := FALSE); END_IF; END_IF;- 这段代码的意思是:只有在自动模式关闭时,才允许手动除霜,并且按下按钮后,会有一个5秒的防抖延时,避免操作员手抖连点。
完成以上步骤,一个功能完整、结构清晰、适配性强的ScreenLayout就诞生了。它不是一个孤立的文件,而是整个Automation Framework项目中,可被其他画面、其他功能模块复用的“标准组件”。
4.3 调试与优化:从仿真到现场的终极 checklist
ScreenLayout构建完成后,调试是最后一道,也是最重要的一道关卡。很多问题,只有在真实的设备上才能暴露出来。以下是我总结的、覆盖全生命周期的调试checklist:
仿真阶段(TIA Portal内部):
- ✅分辨率校验:在仿真窗口的右下角,确认显示的分辨率与ScreenLayout设置的Resolution完全一致。如果不一致,说明你可能在项目设置里选错了HMI型号。
- ✅缩放模式测试:在仿真窗口的右上角,点击“Zoom”按钮,尝试100%、75%、125%等不同缩放比例。观察所有控件是否按预期缩放,是否有重叠、错位、文字截断现象。
- ✅锚点与约束测试:手动拖动仿真窗口的边缘,改变其大小。观察所有控件是否按锚点和约束规则正确移动和缩放。特别注意那些设置了
Min/Max约束的控件,看它们是否真的被限制住了。 - ✅数据绑定测试:在仿真窗口的“Online” -> “Go online”后,手动在PLC变量表里修改
ColdRoom_Temp_Main的值,观察HMI画面上的数值是否实时、准确地更新。这是验证数据链路是否畅通的最直接方法。 - ✅事件绑定测试:点击“手动除霜”按钮,观察PLC变量
Defrost_Request是否被置为TRUE。同时,观察Defrost_Timer是否开始计时。
下载到HMI设备后:
- ✅物理尺寸校验:用尺子量一下HMI屏幕的实际尺寸,再用计算器算一下它的物理PPI(每英寸像素数)。然后,用ScreenLayout的Resolution除以PPI,得到理论显示尺寸。与实际尺寸对比,误差应小于5%。如果偏差很大,说明Resolution设置错误。
- ✅触摸精度校验:在画面上放置几个1cm x 1cm的方块,用游标卡尺测量它们在屏幕上的实际大小。如果方块明显大于或小于1cm,说明HMI的触摸校准有问题,需要进入HMI的系统设置里重新校准。
- ✅响应速度测试:连续快速点击同一个按钮10次,用秒表记录从第一次点击到第十次点击完成的时间。理想情况下,应该在2秒内完成。如果超过3秒,说明画面过于复杂,需要优化——比如减少不必要的动画、合并重复的控件、或者将一些非关键数据显示移到二级画面里。
- ✅极端环境测试:把HMI设备放在空调房(低温)和阳光直射的窗台(高温)下各运行1小时,观察画面是否有延迟、闪烁、色彩偏移。这能提前发现硬件兼容性问题。
现场交付前:
- ✅操作员培训:让最终的操作员,用他们自己的手,按照SOP(标准操作流程)走一遍所有功能。记录下他们觉得“别扭”、“找不到”、“看不懂”的地方。这些地方,往往是ScreenLayout设计中最需要优化的细节。
- ✅文档同步:将ScreenLayout的配置截图、所有数据绑定的Tag列表、所有函数的SCL代码,整理成一份《HMI ScreenLayout配置说明书》,与PLC程序文档一起交付给客户。这不仅是服务,更是对自己工作的负责。
5. 常见问题与独家避坑指南:那些没人告诉你的“潜规则”
5.1 “博图hmi仿真按钮无反应”:一个被低估的系统级问题
这个问题,在各大论坛和QQ群里,是提问频率最高的HMI问题之一。绝大多数人的第一反应是:PLC没连上?变量名写错了?脚本没写?但根据我的经验,有超过60%的案例,根源在于ScreenLayout的事件处理队列溢出。
TIA Portal的HMI仿真环境,其事件处理能力是有限的。当你在一个ScreenLayout里,绑定了过多的Click、ValueChanged等事件,并且这些事件又触发了复杂的SCL函数(比如里面有循环、延时、大量数学运算),就会导致事件队列堵塞。结果就是,你疯狂点击按钮,但HMI只响应了前几次,后面的点击被系统丢弃了,看起来就像“无反应”。
排查与解决:
- 第一步,简化测试。新建一个最简化的ScreenLayout,只放一个按钮,只绑定一个最简单的函数(比如
Test_Var := NOT Test_Var;)。如果这个按钮在仿真里能正常响应,那就证明你的TIA Portal