回复:如何获取UDT数组的上标

已锁定

AnsenYue

  • 帖子

    59
  • 精华

    2
  • 被关注

    3

论坛等级:游侠

注册时间:2011-05-03

普通 普通 如何晋级?

发布于 2021-11-23 21:59:23

11楼

展开查看
以下是引用Zane在2021-11-22 22:19:33的发言 >7楼

不同的报文?


既然是不同的UDT,那你在选择UDT时就确定了报文的长度,同一个CPU的程序不存在不知道的可能性,只有通信对方是不知道报文长度的需要这么做。但跟UDT有啥关系呀?要实现也很容易呀,短报文或者加个固定的报文头。


还有可能性,所有的报文都是同一个UDT的名字?估计你不太会这么做。


总之,楼主你的需求怪怪的,哪里不对,应该是可以绕过去的

以下是引用AnsenYue在2021-11-22 21:25:08的发言 >6楼:我的想法是这样的:...

引用6楼详细内容:

我的想法是这样的:

这个UDT数据,代表报文数据,我们有们不同类型的报文(长度不一样),每个项目会使用多种类型的报文,且每种类型的报文会使用在多个地方。项目要求报文数据需要进行CRC16、BCC或CRC32校验,所以我需要知道当前使用报文的数据长度,以实现校验。考虑到这个需求,所以我把这些应用数据全部写在全局DB中,这样省去接口类型数据的数据副本内存占用。目前是这样考虑的。


问题的原因就是它不是接口类型的Variant变量,所以无法获取数组上标。


非常感谢版主的亲手验证及解答!


以下是引用Zane在2021-11-22 18:06:47的发言 >5楼:楼主的思路还是有问...

引用5楼详细内容:


楼主的思路还是有问题,不能这么用。

读元素个数是可以实现的,必须通过VARIANT变量,另外应使用CountOfElements指令

项目A,用A报文,数据类型UDT-A;项目B,用B报文,数据类型UDT-B,但UDT-A和UDT-B长度不同。高通讯数据的校验,可能使用的算法都是CRC16。这样,我就想把数据校验这一部分,做成复用FB,通过全局DB来配置相关参数。但这个参数里,不包含数据长度,因为返回数据的对象大都只返回数据,并不包含返回了多少个数据,因为这个长度,双方已经在UDT数据中定义好了……至于为什么这样,不增加长度参数,这个有上位机程序的考虑,咱也不清楚啊

Keep learning and going ~
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15118条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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