用普通指令编写S7-1200的循环程序 点击:1162 | 回复:3



稚若初现0

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:104帖 | 384回
  • 年度积分:0
  • 历史总积分:4735
  • 注册:2012年4月20日
发表于:2012-10-05 12:13:51
楼主

      循环程序用来完成大量的重复的操作。S7-1200没有像S7-300的LOOP那样的循环程序专用的指令,为了编写循环程序,可以用FieldRead指令实现间接寻址,用普通指令来编写循环程序。
       生成一个名为“循环程序”的项目。首先生成全局数据块DB1,在DB1中生成有10个字节元素的数组,设置各数组元素的初始值。
       生成一个功能块FB1,定义它的输入参数“字节数”(Int)、“初始下标”(Dint)、“数组”(Array)和输出参数“异或结果”(Byte)。
      在FB1的程序段1用MOVE指令将“异或结果”清零(见图1)。
      程序段2的跳转标签Back表示循环的开始。指令FieldRead用来实现间接寻址,其参数INDEX是要读写的数组元素的下标,其数据类型为DInt(双整数)。参数MEMBER的实参必须是该数组的第一个元素,参数VALUE是读取的数组元素的值。
      读取数组元素值后,将它与输出变量“异或结果”作异或运算,将地址指针“起始下标”加1,它指向下一个数组元素。将作为循环次数计数器的输入变量“字节数”减1。减1后如果非0则返回标签Back处,开始下一次循环的操作。

 图1

      在OB1中调用FB1(见图2),求DB1中的数组1从下标为2的元素开始的3个数组元素的异或值,异或的结果用MB4保存。
      将程序下载到CPU,将CPU切换到RUN模式。搬动I0.2对应的小开关,在I0.2的上升沿调用FB1。用监视表监视MB4中的运算结果,验证了程序的正确性。

图2




菜鸟的战斗机

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 57回
  • 年度积分:66
  • 历史总积分:315
  • 注册:2015年2月11日
发表于:2017-07-18 09:34:03
1楼

P#DB1.DBX0.0 调用不对吧?

菜鸟的战斗机

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 57回
  • 年度积分:66
  • 历史总积分:315
  • 注册:2015年2月11日
发表于:2017-07-18 09:34:43
2楼

#元素值是代表什么?

1039072807

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 175回
  • 年度积分:0
  • 历史总积分:82
  • 注册:2013年6月07日
发表于:2018-07-13 09:56:09
3楼

#元素值是代表什么?


热门招聘
相关主题

官方公众号

智造工程师