找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
VAR
i:INT=0;
j:INT=0;
END_VAR
FOR i:=0 TO 33 BY 1 DO
FOR j:=0 TO 33 BY 1 DO
DB3.DBD[j]:=DB2.DBD[14+i*18];
END_VAR;
END_VAR;
END_FUNCTION_BLOCK
**************************************
小程序查看
手机扫码追踪该问题
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
首先你采用DBD写法就表明是浮点或者双整形这种双字长度的变量,因此写出绝对地址应该是形如DB3.DBD0/DB3.DBD4/DB3.DBD8这种样子,所以代码中的地址索引要乘以4或者4的倍数。另外循环嵌套也是不需要的,因为按照你的逻辑,db3的内容只在i=33才最后被写入。
还有就是你没有明确指明db2中需要隔几个变量,我在下面的代码中把变量j定义为需要间隔的变量数量,你只要修改这个j的赋值即可。
下面的代码是把DB2.DBD14/DB2.DBD22/DB2.DBD30.....(每隔一个变量)赋值到DB3.DBD0/DB3.DBD4/DBD3.DBD8.......中
FUNCTION FC212 : void
VAR_TEMP
i:INT;
j:INT;
k:INT;
END_VAR
BEGIN
k:=14;//定义db2起始变量的字节编号
j:=1;//定义DB2需要间隔几个变量再取出赋值给DB3
FOR i:=0 TO 33 BY 1 DO
db3.dbd[i*4]:=db2.dbd[k+i*4*(j+1)];
END_FOR;
END_FUNCTION
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
找答案微信小程序
提问
搜索
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!