怎样间接访问一个ARRAY类型变量的元素 点击:407 | 回复:15



zhourui97

    
  • 精华:0帖
  • 求助:4帖
  • 帖子:6帖 | 17回
  • 年度积分:0
  • 历史总积分:38
  • 注册:2014年6月16日
发表于:2014-06-19 17:39:12
楼主

定义好一个数组以后,我想访问类似array[i]这样的元素(i为循环所用的变量),但数组好像不让用变量索引。。。。求教用语句表如何实现,本人刚入门,跪谢!!~!!!~




zhourui97

  • 精华:0帖
  • 求助:4帖
  • 帖子:6帖 | 17回
  • 年度积分:0
  • 历史总积分:38
  • 注册:2014年6月16日
发表于:2014-06-19 18:51:06
1楼

有没有大侠啊~真心求解~~~跪谢跪谢

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 455回
  • 年度积分:0
  • 历史总积分:1000
  • 注册:2008年1月09日
发表于:2014-06-19 23:49:44
2楼

使用SCL将会是非常的easy

zhourui97

  • 精华:0帖
  • 求助:4帖
  • 帖子:6帖 | 17回
  • 年度积分:0
  • 历史总积分:38
  • 注册:2014年6月16日
发表于:2014-06-20 09:05:46
3楼

回复内容:

对:   使用SCL将会是非常的easy 内容的回复!

用语句表没办法实现么??

真玉米

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 83回
  • 年度积分:0
  • 历史总积分:233
  • 注册:2012年1月13日
发表于:2014-06-20 10:25:26
4楼

VAR

outputs: ARRAY[1..30000] OF word;

pFloat: POINTER TO REAL := ADR(outputs[3]);

END_VAR

greatxiaohuang

  • 精华:0帖
  • 求助:6帖
  • 帖子:12帖 | 70回
  • 年度积分:0
  • 历史总积分:203
  • 注册:2010年12月04日
发表于:2014-06-20 10:55:16
5楼

OPN   "a"  //打开所需数据块


_001: L     DBW [AR1,P#X.X]  //P#x.x数组起始地址

     T     MW   100    //传送目的地

     L     X     //每个数组数据类型的偏移量

     +AR1  

     TAR1  

     L     MW 200 //循环次数

     >D    

     JCN   _001

大概这样可以不?

zhourui97

  • 精华:0帖
  • 求助:4帖
  • 帖子:6帖 | 17回
  • 年度积分:0
  • 历史总积分:38
  • 注册:2014年6月16日
发表于:2014-06-20 11:14:08
6楼

回复内容:

对: greatxiaohuang  OPN   "a"  //打开所需数据块_001: ... 内容的回复!



我明白了~但是我这的需求是类似写一个这样的程序


(W[0]到W[15]已知,求W[16]到W[67])


FOR j=16 TO 67

W[j]= W[j−16]<此处内容被屏蔽>W[j−9]<此处内容被屏蔽>(W[j−3]≪15))<此处内容被屏蔽>(W[j−13]≪7)<此处内容被屏蔽>W[j−6]    

ENDFOR


我设想是把上面的程序封装成函数,输入参数为Array [0..67] Of DWord(只有0-15有值)

输出参数也是Array [0..67] Of DWord

有没有更好的办法



大神~求教~~

跪谢跪谢~~~感激~!!~!~!~

zhourui97

  • 精华:0帖
  • 求助:4帖
  • 帖子:6帖 | 17回
  • 年度积分:0
  • 历史总积分:38
  • 注册:2014年6月16日
发表于:2014-06-20 11:15:09
7楼

回复内容:

对: greatxiaohuang  OPN   "a"  //打开所需数据块_001: ... 内容的回复!


屏蔽的内容是

异或符号

greatxiaohuang

  • 精华:0帖
  • 求助:6帖
  • 帖子:12帖 | 70回
  • 年度积分:0
  • 历史总积分:203
  • 注册:2010年12月04日
发表于:2014-06-20 15:29:43
8楼

我只会照着这个思路想个方案:你把数组的指针放在一个存储器中,比如MD100,这样你可以动态的修改这个MD100变量了,然后把MD100的值进行偏移量的计算,把结果装入比如AR1中,利用类似L DBD[AR1,P#X.X]指令去间接寻址数组中的变量,作为参数代入你要的那个异或的算式中进行运算。

greatxiaohuang

  • 精华:0帖
  • 求助:6帖
  • 帖子:12帖 | 70回
  • 年度积分:0
  • 历史总积分:203
  • 注册:2010年12月04日
发表于:2014-06-20 15:44:30
9楼

举个例子啊 比如你的j起始值是16,在调用子程序前你可以把这个地址的偏移量装入MD100中,开始循环 for(MD100=16,MD100++,MD100<67)

{AR1=MD100-16;

L DBD[AR1,P#X.X];

T MD200

AR1=MD100-9;

L DBD[AR1,P#X.X];

L MD200

XOD;

T MD200;

......;

......;

}

zhourui97

  • 精华:0帖
  • 求助:4帖
  • 帖子:6帖 | 17回
  • 年度积分:0
  • 历史总积分:38
  • 注册:2014年6月16日
发表于:2014-06-20 15:51:39
10楼

回复内容:

对: greatxiaohuang 我只会照着这个思路想个方案:你把数组的指针放在一个存储... 内容的回复!


了解了~多谢~

我正按照这个想法做,但有个小地方不理解

     OPN   DB     3

     L     P#0.0    //指针初始值?

     LAR1  

     L     DBD [AR1,P#0.0]

     T     MD    50

     +AR1  P#4.0

     L     DBD [AR1,P#0.0]

     T     MD    40


我把W这一个数组放在DB3里,都是双字类型。然后监控MD  50和MD 40。

下载运行后,一开始我发现MD50里的参数是正确的,和DB3里的一样

但MD 40总是0(不同于DB3里的数据)

是不是我的取下一个数据地址的程序有问题?


后来我手动修改DB3里的值

居然MD 50里的数据没有改变,仍然维持以前的值


本人新手,求教

多谢多谢~~~



zhourui97

  • 精华:0帖
  • 求助:4帖
  • 帖子:6帖 | 17回
  • 年度积分:0
  • 历史总积分:38
  • 注册:2014年6月16日
发表于:2014-06-20 16:01:58
11楼

回复内容:

对: greatxiaohuang 举个例子啊 比如你的j起始值是16,在调用子程序前你可... 内容的回复!


下面是程序和DB3,以及监控的MD 50(和DB3里的不一样)

多谢多谢~~~~


     OPN   DB     3

     L     P#0.0

     LAR1  

     L     DBD [AR1,P#0.0]

     T     MD    50

     +AR1  P#4.0

     L     DBD [AR1,P#0.0]

     T     MD    40

     NOP   0




greatxiaohuang

  • 精华:0帖
  • 求助:6帖
  • 帖子:12帖 | 70回
  • 年度积分:0
  • 历史总积分:203
  • 注册:2010年12月04日
发表于:2014-06-20 16:18:35
12楼

应该不会吧 MD40中是起始地址4.0的那个双字的值,可能你DB中的实际值没设置对吧。。。

zhourui97

  • 精华:0帖
  • 求助:4帖
  • 帖子:6帖 | 17回
  • 年度积分:0
  • 历史总积分:38
  • 注册:2014年6月16日
发表于:2014-06-20 16:29:39
13楼

回复内容:

对: greatxiaohuang 应该不会吧 MD40中是起始地址4.0的那个双字的值,... 内容的回复!


但事实就是怎么改DB3里的值

监控出现的仍然是不变


我后来把DB3改成另一个数据块(DB2)

发现监控里的值变化了(不是监控有问题)


然后我就懵了

太郁闷了



greatxiaohuang

  • 精华:0帖
  • 求助:6帖
  • 帖子:12帖 | 70回
  • 年度积分:0
  • 历史总积分:203
  • 注册:2010年12月04日
发表于:2014-06-20 16:34:16
14楼

你打开DB块设置监视状态 里面会显示实际值的可以修改 下班了 你那程序应该没啥问题的

zhourui97

  • 精华:0帖
  • 求助:4帖
  • 帖子:6帖 | 17回
  • 年度积分:0
  • 历史总积分:38
  • 注册:2014年6月16日
发表于:2014-06-20 16:35:33
15楼

回复内容:

对: greatxiaohuang 你打开DB块设置监视状态 里面会显示实际值的可以修改 ... 内容的回复!


好的~多谢

我再看看吧~


感谢感谢


热门招聘
相关主题

官方公众号

智造工程师