回复:SCL关于ANY指针的应用请教

Letham

西门子1847工业学习平台

  • 帖子

    2038
  • 精华

    43
  • 被关注

    360

论坛等级:至圣

注册时间:2006-04-15

白金 白金 如何晋级?

发布于 2016-05-06 10:02:11

1楼

用AT 变量覆盖功能,

AT变量覆盖的使用

比如下边示例代码tmpDataforCal是一个ANY 类型的指针。

VAR_TEMP

     tmpDataforCalStruct AT tmpDataforCal:STRUCT

                                            Head:BYTE;

                                            DataTyp:BYTE;

                                            Reapeater:WORD;

                                            DBNO:WORD;

                                            Addr:DWORD;

                                          END_STRUCT; 

      ByteInfo,BitInfo:INT; 

END_VAR

当P# I100.0 BOOL 16 实参传递到tmpDataforCal 后,tmpDataforCalStruct.Addr并不等于100,而等于P#100.0,也就是800,但是在SCL里进行寻址比如 I100.1时 以I[100,1]的形式来进行寻址的

所以应该有个 

ByteInfo=DWORD_TO_INT(SHR(IN:=(tmpDataforCalStruct.Addr AND DW#16#00FFFFFF),N:=3));

BitInfo=DWORD_TO_INT(tmpDataforCalStruct.Addr) MOD 8 的过程

下面,你就可以以FOR 语句 进行赋值

WORD_TO_BLOCK_DB(DBNO).Dx[ByteInfo,BitInfo];=I[ByteInfo,BitInfo];

然后对ByteInfo和BitInfo 进行赋值即可。


以上是STE7 V5.x中的SCL 寻址


博途中的寻址见如下!


STEP 7 Professional  使用SCL对S7-300/400间接寻址的变量表达式

人生就像一场旅行!
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54710条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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