西门子1200的指针如何定义、如何应用 点击:5885 | 回复:2



PLC酷客

    
  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2012-11-01 20:11:07
楼主
近日负责的项目中,应用西门子1200PLC,要求周期性的记录系统中流量传感器测得的流量值,由于我所应用的触摸屏记录功能太差,所以准备在PLC中记录下来。现在初步的设想是,每100ms执行一次MOV指令,将测得的流量工程量写入一段连续的地址里.
 
 假设MD20为流量测得值    第一个周期执行  MOV  MD20  MD100     
 第二周期就执行MOV  MD20  MD104    
 
 下一周期就是MOV MD20 MD108      就是想实现这样一个功能,我也想过用数组记录,
 如MOV MD20  ARRAY【1】   然后依此类推。
 
 但,如何来实现却想不明白,在1200里指针是怎么定义的,怎么应用的,能不能这样寻址:MD【MD10】
答:     TAG_1控制数组的指针,采集的数据送入TAG_2,数据保存在Static_1数组中。
 一、控制指针偏移最大值
 1、在OB中放入CPM=指令来比较实际指针是否到达最大偏移量。
 2、在OB中放入MOV指令并给TAG_1赋0。
 当偏移量到达数组的最大深度时,执行MOV指令,指针归零。
 
 二、在数组中保存数据
 1、新建一个全局DB,在全局DB中再新建一个数组Static_1,Array 【0..1000】 of Real数组的大小根据你数据采集量而定,注意数组小于指针最大偏量时会产生保存出错;数组中的数据类型根据数据宽度确定是REAL或是LREAL,我这里用的是REAL。
 2、在PLC变量表中声明变量TAG_1其数据类型为DINT,声明变量TAG_2,其数据类型也要与数组的数据类型相一致;
 3、在OB中放入FieldWrite指令块,选择该指令块的数据类型也要与数组的数据类型相一致;
 4、将变量TAG1赋给INDEX端口,将变量TAG2赋给VALUE端口,将数组的Static_1【0】拖放给输出MEMBER端口;
 
 三、数组指针偏移
 1、在OB中放入INC指令,选择该指令块数据类型为DINT(与TAG_1数据类型一致)
 2、将TAG_1拖入IN/OUT端口,并赋常数值1。
 3、每保存一次数据执行一次INC指令。
 在线状态下做了数据模拟,抓图如下:
 




楼主最近还看过



江湖走走--原创军团

  • [版主]
  • 精华:30帖
  • 求助:7帖
  • 帖子:836帖 | 7833回
  • 年度积分:193
  • 历史总积分:46108
  • 注册:2001年2月15日
发表于:2012-11-01 21:17:45
1楼
好东西啊,留住学习,1200没玩过

王道火山--纵横军团

  • 精华:2帖
  • 求助:5帖
  • 帖子:86帖 | 1878回
  • 年度积分:0
  • 历史总积分:7858
  • 注册:2012年1月11日
发表于:2012-11-01 22:49:33
2楼

尽管没有用过1200的,但是这个思想还是值得学习的1


热门招聘
相关主题

官方公众号

智造工程师