技术论坛

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

返回主题列表
作者 主题
zunzhi
侠士

经验值:1470
发帖数:97
精华帖:2
楼主    2020-01-30 13:04:06
主题:一段模拟量读取程序,那位师傅帮我解释一下?

我就搞不懂了,一个公式前面整这么复杂是什么意思?作用是什么?看了一上午也没有看明白,麻烦大神指点一下,谢谢!

//模拟量读取

TAR1  #TEMP11

 L     P##IN0    

      LAR1  

      L     B [AR1,P#1.0]

      T     #TEMP7

 L     W [AR1,P#4.0]

      T     #TEMP8

      OPN   DB [#TEMP8]

  A(    

      L     #TEMP7

      L     2

      ==I   

      )     

      JCN   M001

      L     D [AR1,P#6.0]

      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]

      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


努力工作,好好学习!
zunzhi
侠士

经验值:1470
发帖数:97
精华帖:2
2楼    2020-01-31 00:11:01
精华帖  主题:回复:一段模拟量读取程序,那位师傅帮我解释一下?

终于搞明白了,整整一天,模拟量输入类型竟然为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





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