跟我一起玩200 smart PLC 关于指针及循环指令的应用续1

已锁定

WWCWWC

西门子1847工业学习平台

  • 帖子

    9469
  • 精华

    160
  • 被关注

    1496

论坛等级:至圣

注册时间:2008-07-26

钻石 钻石 如何晋级?

跟我一起玩200 smart PLC 关于指针及循环指令的应用续1

7301

12

2017-04-27 09:41:13

跟我一起玩200 smart PLC

关于指针及循环指令的应用续1

   通过前面几次回复网友的提问,我借于对200 smart PLC的指针及循环指令的应用,相信大家对200 smart PLC的这些指令的应用应该有所了解和认知。

   但是,我在实际编程中曾经也掉过几次“陷阱”,这里向大家来说明一下。尤其是对初始值的使用,稍不留意就会掉进自己挖好的“陷阱”中,本例就是一个特例。

   首先,新建一个子程序,定义变量名称及数据类型,这个基本可以模块化,不容易出现状况。但考虑到子程序多次调用时的初值问题,我习惯上会先进行一些数据的初始化操作,而且,一般均赋值为0(0.0)。其次,是建立指针的初始和指针的移动,这步大多也不容易出错。指针的初始以“&”号开始的首字节,必须是以字节形式编写。然后是根据具体数据类型,读取指针地址中的数据,读取指针地址中的数据以“*”号表示,并按所需要读取指针数据的数据类型,有目的地选择传送指令类型(字节、字、双字)。关于指针的上、下移动的处理,如果数据是以字节为单位的移动,则调用ADD_DI(SUB_DI)指令(指针需要32位操作指令,具体详细参考西门子200的寻址),输入管脚填1,如果数据类型是字为单位的,则填2,依次类推。再次,利用循环指令的特性,给待处理的数据多次利用指针调用数据,得到程序运算的目的,处理这样的数据要求是一个连续的数据段。

假设,有一串连续的数据区(浮点数)6个,数据地址自VD0 = 1.1;VD4 = 2.2;VD8 = 3.3 、、、、、、VD20 = 6.6,需要做一个乘积的运算,利用上述指令的结合非常方便地解决了计算问题,程序稍加修改可以运用于取平均值的应用。

程序:

1)  还是按之前的思路,建立一个子程序,在接口变量中创建变量名称、定义数据类型,并编写子程序,变量的创建可以在中间过程按编程的需要进行添加或删除,图示:

为方便阅览我把子程序转换为STL模式


我就是在给输出变量#output初始化时,填入了0.0这个初始值。

2)  编译无误后,在主程序或其它程序中调用,图示:


注意!在循环指令调用时,只能采用沿脉冲或者在中断子程序中进行。

3)  为方便调试,在数据块中创建数据,图示:


当然,在状态图表中也可以创建,数据块中创建的优点在于可以与项目一起保存,不足之处是不方便实时修改,当然2者的结合可以互补。

4)  编译,保存后,将用户程序下载到cpu中,创建状态图表,方便监控程序,图示:


当接通M0.0后,运算结果VD100 = 1275.524(浮点数保留3位小数,并以4舍5入的方式保存数据)

通过程序的运算所得到的结果与计算结果相符,图示:


   回顾头来说那个“陷阱”问题,前面我已经说明了。我不经意中给变量#LD6 = 0.0赋值,等保存、编译、下载后发现运算结果为0.0,难道是控制程序出了问题?好在程序段内容比较少,很快找到了问题的所在,任何数乘以0(0.0)其结果均等于0(0.0),修改初始值为1.0后(任何数乘1均等于原值),下载测试后程序正常。

   在特定的控制程序要求下,赋值初始值需要根据不同的控制要求给予不同的初值,以满足具体控制程序的要求,望这篇短文能够帮助到大家。


跟我一起玩200 smart PLC 关于指针及循环指令的应用续1 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有9426条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。