技术论坛

 烦请各位大神 解读一下 这段批量读取和写入的程序段(IO子站) 预祝大家新年快乐

返回主题列表
作者 主题
青峰明月
游士

经验值: 169
发帖数: 32
精华帖: 0
楼主    2021-12-28 10:15:29
主题:烦请各位大神 解读一下 这段批量读取和写入的程序段(IO子站) 预祝大家新年快乐

这是一个很不错的功能块,虽然我看不懂,但是我觉得功能还是很强大的。


FC25 批量读取 和 写入远程子站的数据,


我有几个疑问点:


第1,这个数据读取和写入的实参是什么?

第2,他是如何通过STL语言实现批零读取和写入的?


下面介绍一下,

输入的点是硬件组态的地址,然后INT转换WORD,左移3位编程指针寻址格式。

STL语言一顿操作如猛虎,然后通过SFC 14 系统功能块实现批量读取。


为了尊重他人劳动成果,下面就不将全部程序分析出来,只是拿出批量读的部分。肯请各位大神指点一下。


其中  变量 POINTEUR_ECRIT 为临时变量,ANY类型,为SFC14的输出值。

          变量PROG_ADR_LECT_W    为输入值,为临时变量Word类型,外部硬件组态的实际物理地址,

                   左移3位之后的数值,.

         变量 LONGUEUR  为输入值,表示读取的数值宽度。


 LAR1  P##POINTEUR_LECT

      L     B#16#10
      T     LB [AR1,P#0.0]
      L     B#16#2
      T     LB [AR1,P#1.0]

      L     #LONGUEUR
      T     LW [AR1,P#2.0]

      L     0
      T     LW [AR1,P#4.0]

      L     B#16#83
      T     LB [AR1,P#6.0]

      L     0
      T     LB [AR1,P#7.0]

      L     #PROG_ADR_LECT_W
      T     LW [AR1,P#8.0]



          

本人QQ:717546315.

如果哪位大神愿意解答,请加小弟QQ,小弟敬上一杯奶茶(小小红包略表心意)。







东方红一红
至圣

经验值: 16176
发帖数: 6606
精华帖: 50
1楼    2021-12-28 11:07:00
主题:回复:烦请各位大神 解读一下 这段批量读取和写入的程序段(IO子站) 预祝大家新年快乐

看来你认为读程序就是看小说。

知其道,用其妙!
zhangli0
至圣

经验值: 43503
发帖数: 15750
精华帖: 61
3楼    2021-12-29 10:37:33
主题:回复:烦请各位大神 解读一下 这段批量读取和写入的程序段(IO子站) 预祝大家新年快乐

你先去看看32位地址指针的格式,然后就好理解这个程序段了。

你这就是基本的读取(L),赋值指令(T)。

活到老,学到老!为了生活学习吧!
青峰明月
游士

经验值: 169
发帖数: 32
精华帖: 0
6楼    2021-12-30 17:31:51
主题:回复:烦请各位大神 解读一下 这段批量读取和写入的程序段(IO子站) 预祝大家新年快乐

各位大神,这个是我针对西门子提供的案例程序的理解与疑惑的地方,请求支援。

F0670_FCANY.pdf

nestedfc.zip

  

      L     P##RD_RECORD

      LAR1                      将 RD_RECORD装载到 累加器1

                                为什么这么做呢?这个似乎没有参与到实际运算?
                                因为下面进行的L装载会清除累加器1
                                      
      L     P##RD_Temp          将 RD_Temp传输到 累加器1
      T     #AD_Temp            将累加器1中的 RD_Temp传输到 AD_Temp
                                

                                那么此时的AR1,应该是0?
 
      L     W [AR1,P#0.0]       将W0内的数值装载到累加器1   
      T     LW [#AD_Temp]       将累加器1中的 W0内的数值 传输到 LW(AD_Temp)
      L     #AD_Temp             
      L     P#2.0
      +D    
      T     #AD_Temp            AD_Temp指针此时偏移2个字节
      L     D [AR1,P#2.0]       将 D2的数值 装载到累加器1       
      L     #AD_Temp            将累加器1内的 D2的数值 装载到累加器2
                                将 AD_Temp 内的数值装载到累加器 1
      L     P#4.0               这里我有一些看不懂
                                     
      +D                          这里我有一些看不懂,到底是谁相加?以为他装载了3次,
      T     #AD_Temp             将传输的结果传输到 AD_Temp
      L     D [AR1,P#6.0]        将累加器1内的 D6的数值 装载到累加器1
      T     LD [#AD_Temp]        将累加器1内的 D6的数值 装载到 LD AD_Temp ,我不知道此时 LD AD_Temp的具体数值。

截止到此时,我也没搞明白

      L     P##RD_RECORD
      LAR1                      这个操作的意义,求大神指点。

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