首页 新闻 工控搜 论坛 厂商论坛 产品 方案 厂商 人才 文摘 下载 展览
中华工控网首页
  P L C | 变频器与传动 | 传感器 | 现场检测仪表 | 工控软件 | 人机界面 | 运动控制
  D C S | 工业以太网 | 现场总线 | 显示调节仪表 | 数据采集 | 数传测控 | 工业安全
  电 源 | 嵌入式系统 | PC based | 机柜箱体壳体 | 低压电器 | 机器视觉
施耐德系列触摸屏应用中采集位信号的技巧
施耐德电气集团(上海)投资有限公司
收藏本文     查看收藏

前言
  在工业控制的实际应用中,触摸屏可能需要监控大量的I/O点等开关量数据,如果使用低速通讯方式(RS232/RS485)时,在触摸屏的某一页面上有几十点以上的类似数据,因通讯速度的限制,此页面的数据刷新耗时较长,可能在几秒到十几秒之间,施耐德电气的XBTG系列触摸屏与其NEZA、TWIDO、系统MACRO及PREMIUM等系列PLC组成的控制系统应用本文介绍的方法可以比较完美地解决这一问题。

使用到的功能
施耐德电气XBTG系列触摸屏的变量数组功能及脚本语言,施耐德电气PLC(NEZA/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无法被直接访问到,使用这种方法可以解决这一问题。



图1
 


图2
  如果在程序中有中间位变量需要用这种方式送到触摸屏中,可以分为两种情况来考虑。首先,在做PLC的程序时,将相应的位信号放入到MW中,即使用MW字变量的位抽取功能,这样可以省去图2中的赋值语句部分,用法参考图3所示。



图3
其次,如果位变量用的是M,而M是连续的且符合以下规定:%Mx:y(x必须为8的整数倍),则可以用图4中的程序段完成。
 


图4

  在上面的程序段中都使用了施耐德电气的PLC所特有的功能:字变量的位抽取功能(即所有的MW字变量均可按位寻址)及变量的结构化功能。
关于这些功能的进一步信息,请参考相应的手册。   
在PLC的程序中完成相应的处理后,下面进入XBTG触摸屏程序中。在触摸屏的变量表中建立与PLC关联的外部数据,如图5。


 
图5


       
图6
在这一步操作中需要建立7个来自PLC的变量40201~40208,命名为MW200~MW208。再在变量表中建立内部数组变量,数组变量中的数据会直接出现在屏幕上,如图6。共需要建立7上对应PLC的I/O点的数组I0~I3及Q0~Q3,其中I1的数组大小定义为8(原因见脚本部分注释),其余定义为16。建立好的数组如图7。



图7
所需变量建立完毕后,在VejioDesign编程环境中建立一个如图8程序脚本,相应属性设置为:周期性脚本,刷新周期1秒。
脚本中写入内容:

//-------------------------------------
//Script Created: 月 16, 2004
//从PLC通讯的字(MW)分解出位信号
//主要用于减轻XBTG屏与plc通讯的压力
//程序编制及测试:张福,LEC,AUT,IA,Schneider
//-------------------------------------
int PlcInPut0,PlcInPut1,PlcInPut2,PlcInPut3;
int PlcOutPut0,PlcOutPut1,PlcOutPut2;
int i,BitValue;
int tmp0,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~Q2.31状态字

BitValue=1;
for (i=0;i<16;i++)     //一个做16次循环分解为位变量
{
if (i==0) BitValue=1;
else BitValue=2*BitValue;  //第i位

tmp0=PlcInPut0 & BitValue;   //PLC输入字I0状态字第i位的值
tmp1=PlcInPut1 & BitValue;   //PLC输入字I1状态字第i位的值
tmp2=PlcInPut2 & BitValue;   //PLC输入字I2状态字第i位的值
tmp3=PlcInPut3 & BitValue;   //PLC输入字I3状态字第i位的值
tmp4=PlcOutPut0 & BitValue;   //PLC输出字Q0状态字第i位的值
tmp5=PlcOutPut1 & BitValue;   //PLC输出字Q1状态字第i位的值
tmp6=PlcOutPut2 & BitValue;   //PLC输出字Q2状态字第i位的值
 
I0[i].write(tmp0);    //将得到的I0的位状态写入数组I0[i]
I2[i].write(tmp2);    //将得到的I2的位状态写入数组I2[i]
I3[i].write(tmp3);    //将得到的I3的位状态写入数组I3[i]
Q0[i].write(tmp4);    //将得到的Q0的位状态写入数组Q0[i]
Q1[i].write(tmp5);    //将得到的Q1的位状态写入数组Q1[i]
Q2[i].write(tmp6);    //将得到的Q2的位状态写入数组Q2[i]
 
if(i<9)     //输入状态字I1只8位有效数据(I0.16~I0.23)
{
I1[i].write(tmp1);   //将得到的I1的位状态写入数组I1[i]

}
}
在上面的脚本程序中主要完成将来自PLC的包含了IO状态的变量字拆分,拆分后得到每一个IO点的状态,将得到的IO状态值写入到建立好的数组中。
假定在触摸屏的某一页面上需要监控来自PLC的所有IO数据,画面如图8。画面中的IO状态指示均按图设置为相应的数组变量。

 

图8
经过以上步骤,在触摸屏中采集PLC上的104个IO点的程序就全部做完,采集这104个IO数据占用的通讯内容只有7个字:40201~40208,比常规方式节约通讯内容:104/7?15倍,经过实际测试,用本文介绍的方法比用直接访问PLC的位地址方式,在画面的刷新上约快7~8倍。
另外,使用这种方法采集PLC的状态还有一个优点,如在程序调试中因某种原因需要改变触摸与PLC关联的变量时,只需改变40201~40208共8个地址及脚本程序中的相应部分,改动的工作量非常小。


 

状 态: 离线

公司简介
产品目录

公司名称: 施耐德电气集团(上海)投资有限公司
联 系 人: 黄少林
电  话: 577-13819769605
传  真: 57786-577-62771907
地  址: 温州乐清柳市工业区
邮  编: 325604
主  页:
 
该厂商相关技术文摘:
基于客户/服务器模式的企业生产监控网
如何实现远程监控
Twido及Micro Modbus多子站通讯程序的方法
施耐德电气低端PLC实现顺序控制的技巧
对射式光电开关并排使用技巧
更多文摘...
立即发送询问信息在线联系该技术文摘厂商:
用户名: 密码: 免费注册为中华工控网会员
请留下您的有效联系方式,以方便我们及时与您联络

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 不良信息举报
工控网客服热线:0755-86369299
版权所有 中华工控网 Copyright©2022 Gkong.com, All Rights Reserved