回复:第三阶段1.6迪杰斯特拉算法疑问

Siemens_PLC编程精英训练营

西门子1847工业学习平台

  • 帖子

    1108
  • 精华

    0
  • 被关注

    15

论坛等级:侠圣

注册时间:2018-09-30

钻石 钻石 如何晋级?

发布于 2024-03-24 15:41:29

2楼

展开查看
以下是引用手机用户20230129287215在2024-03-23 22:25:30的发言 >0楼

这个尖勾^是什么东西啊,不太理解,引用那边也有很多疑问,就为什么要使用引用呢,还有什么时候会用到引用这个东西,还有#tempRefAdjaMatrix <> NULL这个是引用必须要判断的东西吗?




1、要读取或写入一个被引用变量的值,则可使用插入符号“^”,这种访问方式被称为“取消引用”。取消引用用于直接对引用的变量进行读写访问。这在阶段二课时44做了详细讲解,您可以回顾一下。


2、在了解引用的使用功能之前,您首先需要了解在为FC/FB的形参传递实参之时,会有Reference“指针引用”和Copy“副本直传”两种形式,下图为编程指南的截图:




对于基本数据类型而言,拷贝确实需要额外占用运行时CPU的存储空间,但是由于长度较小可以接受。

但是,对于复杂数据类型而言,拷贝就要占用较大的存储空间,所以对于FB而言要尽量使用InOut类型。

如果用户有需求说必须要使用IN或者OUT类型的参数,此时可以使用REF_TO 复杂类型,比如数组的形式创建参数,而后在程序中通过^的形式访问,这样会减小存储空间的使用。

再来,如果在参数定义时使用了Variant的指针类型,当然在传递实参时,一定是通过引用的方式实现的。但是,Variant的使用则需要特定指令确定指向的实参的数据类型,做法就是要在临时变量中创建实参的数据类型。这时,问题就又来了,如果指向的实参是复杂类型,在temp中创建的数据也会占用比较大的空间,此时也会使用到REF_TO的形式,而后使用?=来识别。


所以,综上,REF_TO的主要应用目标是针对复杂数据类型,期望降低CPU的存储器空间使用。


3、另外,对于您提到的#tempRefAdjaMatrix <> NULL,这是因为程序中使用赋值尝试“?=”将 VARIANT 数据类型的变量分配给一个引用,如果数据类型不一致的话会导致引用不成功。因此,一般在程序中判断该引用是否为NULL,进而可以判断赋值尝试是否成功。


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

PLC编程精英训练营

共有1548条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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