回复:一段模拟量读取程序,那位师傅帮我解释一下?

已锁定

zunzhi

  • 帖子

    128
  • 精华

    5
  • 被关注

    54

论坛等级:侠圣

注册时间:2014-02-15

黄金 黄金 如何晋级?

发布于 2020-01-31 00:11:01

2楼

终于搞明白了,整整一天,模拟量输入类型竟然为ANY,以前没有碰到过,思维进入了死循环!这段程序的意思是判断这个指针对应的数据是字节的,还是一个字或整型,还是双字或双整型,然后做相应的转换成实数,如果是其他类型的就写入0,  最后做数据的转换,和FC105的功能类似,变成百分比,一个实数,一个整数,输出, 感谢艾星落尘的帮助,我整理了一下,发给大家!

//模拟量读取

TAR1  #TEMP11

 L     P##IN0    //模拟量输入地址  数据类型ANY

      LAR1  

      L     B [AR1,P#1.0]  //判断ANY中存放的数据类型

      T     #TEMP7

 L     W [AR1,P#4.0]  //装入ANY中存放的数据块

      T     #TEMP8

      OPN   DB [#TEMP8]//打开数据块

  A(    

      L     #TEMP7

      L     2 //数据类型为字节

      ==I   

      )     

      JCN   M001       //Jump if RLO = 0

      L     D [AR1,P#6.0]  //装入ANY中数据地址

      LAR1  

      L     B [AR1,P#0.0]//装入数据

      ITD   

      DTR   //转换为实数

      JU    M002

M001: NOP   0

   O(    

      L     #TEMP7

      L     4  //数据类型为字

      ==I   

      )     

      O(    

      L     #TEMP7

      L     5 //数据类型为整数

      ==I   

      )     

      JCN   M003

      L     D [AR1,P#6.0]//装入ANY中数据地址

      LAR1  

      L     W [AR1,P#0.0]//装入数据

      ITD   

      DTR   

      JU    M002

M003: NOP   0

 O(    

      L     #TEMP7

      L     6 //数据类型为双字

      ==I   

      )     

      O(    

      L     #TEMP7

      L     7  //数据类型为双整数

      ==I   

      )     

      JCN   M004

      L     D [AR1,P#6.0]

      LAR1  

      L     D [AR1,P#0.0]

      DTR   

      JU    M002

M004: NOP   0

   A(    

      L     #TEMP7

      L     8  //数据类型为实数

      ==I   

      )     

      JCN   M005

      L     D [AR1,P#6.0]

      LAR1  

      L     D [AR1,P#0.0]

      JU    M002

M005: L     0.000000e+000

M002: T     #TEMP9

  L     #IN1       //模拟量最大值

      L     #IN2   //模拟量最小值

      -R    

      T     #TEMP10

      L     #TEMP9

      L     #IN2

      -R    

      L     #TEMP10

      /R    

      T     #TEMP10

      L     #IN3    //工程量量最大值

      L     #IN4    //模拟量最小值

      -R    

      L     #TEMP10

      *R    

      L     #IN4

      +R    

      T     #OUT5

      RND   

      T     #OUT6

  LAR1  #TEMP11


 //这是调用的程序

   CALL  "ANALOG_VALUE_READ"

       IN0 :="=32+ET12-2M1_PIW"

       IN1 :=2.764800e+004

       IN2 :=5.530000e+003

       IN3 :=1.000000e+002

       IN4 :=0.000000e+000

       OUT5:="ACTUAL_VAL".DRY.DRY1._014.ACT

       OUT6:=#Output_INT

      NOP   0





努力工作,好好学习!

精华帖版主置评:能及时跟大家分享,很好

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54622条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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