第1页共8页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共8页Schneider-施耐德LEC使用技巧文集[第12讲]——施耐德电气XBTG系列触摸屏应用中大量采集位信号的技巧1.前言在工业控制的实际应用中,触摸屏可能需要监控大量的I/O点等开关量数据,如果使用低速通讯方式(RS232/RS485)时,在触摸屏的某一页面上有几十点以上的类似数据,因通讯速度的限制,此页面的数据刷新耗时较长,可能在几秒到十几秒之间,施耐德电气的XBTG系列触摸屏与Twido、Micro及Premium等系列PLC组成的控制系统应用本文介绍的方法可以比较完美地解决这一问题。使用到的功能施耐德电气XBTG系列触摸屏的变量数组功能及脚本语言,施耐德电气PLC(Twido/Micro/Premium)的字对象的抽取位。具体描述以施耐德电气的Twido系列PLC为例进行说明,在TwidoSoft软件中对硬件进行配置如图1。在触摸屏的某一页面需要监控PLC上的所有输入/输出点,在PLC的程序中加入相应的语句,如图2所示。在此段程序中完成将输入点I0.0~I0.15共16个输入点的状态赋值给MW200,使用的是Twido的结构化对象功能,同样操作,将要在触摸屏上监控的所有变量放在MW200~MW206共7个字变量中。在XBTG触摸屏一侧,因使用Modbus协议与PLC通讯,PLC中的I/O无法被直接访问到,使用这种方法可以解决这一问题。第2页共8页第1页共8页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第2页共8页图1图2如果在程序中有中间位变量需要用这种方式送到触摸屏中,可以分为两种情况来考虑。首先,在做PLC的程序时,将相应的位信号放入到MW中,即使用MW字变量的位抽取功能,这样可以省去图2中的赋值语句部分,用法参考图3所示。其次,如果位变量用的是M,而M是连续的且符合以下规定:%Mx:y(x必须为8的整数倍),则可以用图4中的程序段完成。第3页共8页第2页共8页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第3页共8页图3在上面的程序段中都使用了施耐德电气的PLC所特有的功能:字变量的位抽取功能(即所有的MW字变量均可按位寻址)及变量的结构化功能。关于这些功能的进一步信息,请参考相应的手册。图4在PLC的程序中完成相应的处理后,下面进入XBTG触摸屏程序中。在触摸屏的变量表中建立与PLC关联的外部数据,如图5。第4页共8页第3页共8页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第4页共8页图5第5页共8页第4页共8页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第5页共8页在这一步操作中需要建立7个来自PLC的变量40201~40208,命名为MW200~MW208。再在变量表中建立内部数组变量,数组变量中的数据会直接出现在屏幕上,如图6。共需要建立7个以上对应PLC的I/O点的数组I0~I3及Q0~Q3,其中I1的数组大小定义为8(原因见脚本部分注释),其余定义为16。建立好的数组如图7。所需变量建立完毕后,在Vejio-Designer编程环境中建立一个如图8程序脚本,相应第6页共8页第5页共8页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第6页共8页属性设置为:周期性脚本,刷新周期1秒。脚本中写入内容://-------------------------------------//ScriptCreated:月16,2004//从PLC通讯的字(MW)分解出位信号//主要用于减轻XBTG屏与PLC通讯的压力//程序编制及测试:张福,LEC,AUT,IA,Schneider//-------------------------------------intPlcInPut0,PlcInPut1,PlcInPut2,PlcInPut3;intPlcOutPut0,PlcOutPut1,PlcOutPut2;inti,BitValue;inttmp0,tmp1,tmp2,tmp3,tmp4,tmp5,tmp6;PlcInPut0=PlcData.MW200.getIntValue();//得到PLC输入I0.0~I0.15状态字PlcInPut1=PlcData.MW201.getIntValue();//得到PLC输入I0.16~I0.23状态字PlcInPut2=PlcData.MW202.getIntValue();//得到PLC输入I1.0~I1.15状态字PlcInPut3=PlcData.MW203.getIntValue();//得到PLC输入I1.16~I1.31状态字PlcOutPut0=PlcData.MW204.getIntValue();//得到PLC输入Q0.0~Q0.15状态字PlcOutPut1=PlcData.MW205.getIntValue();//得到PLC输入Q2.0~Q2.15状态字PlcOutPut2=PlcData.MW206.getIntValue();//得到PLC输入Q2.16~...