技术论坛

优化数据块和Variant怎么实现S7 300里的查表功能

作者 主题
游侠

经验值: 592
发帖数: 155
精华帖: 2
主题:【探讨】优化数据块和Variant怎么实现S7 300里的查表功能
推荐帖


只看楼主 楼主 2018-02-03 16:44:57

以前在300时代的一些功能块都是采用指针来完成,现在转到1500时代想将原来的功能块移植过来,在这过程中遇到了难题。

原来有一个功能块是完成查表功能,数据表是一个数组,而数组的元素是结构。因为做的是一个通用查表功能,这个表的数组元素结构和组成的数据类型都是不定的。

在实现的过程中只需要给定结构的长度,数组的大小以及在结构中的偏移地址,就可以完成这个查表功能。



目前想采用优化数据块以及Variant来实现原来的查表功能,但是遇到了问题,因为优化数据块没有偏移地址这概念,那我该怎么实现这个查表功能?


图片是300下的查表功能块的接口

anycomparecomponent:  是要查找的数据

iTbl_DBNo:        数据表的DB号

iTbl_SatrtPos:    数据在数据表中的起始地址

iTbl_Len:            数据表的结构长度

iTbl_Count:         数组的大小




 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1460935&b_id=66&s_id=0&num=11

至圣

经验值: 93583
发帖数: 18927
精华帖: 674
回复:优化数据块和Variant怎么实现S7 300里的查表功能
推荐帖


只看楼主 1楼 2018-02-04 17:23:35

你这个应该贴到300/400版区去吧。1200/1500完全不同。


学而时习之,不亦说乎?温故而知新,不亦乐乎?
以下网友喜欢您的帖子:

  
游侠

经验值: 592
发帖数: 155
精华帖: 2
回复:优化数据块和Variant怎么实现S7 300里的查表功能
推荐帖


只看楼主 楼主 2楼 2018-02-04 22:01:04

这个查表功能块是我自己写的,现在是想移植到1500上。但是在1500上想采用优化数据块和Variant来实现原来的那个查表功能。

原来查表功能采用Any,程序块里面要判断数据类型,数据类型不同所占的字节数不同,那么对应表中的偏移地址就有所差异。所以我在功能块中的实现是要判断数据类型的。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 93583
发帖数: 18927
精华帖: 674
回复:优化数据块和Variant怎么实现S7 300里的查表功能
推荐帖


只看楼主 3楼 2018-02-04 22:21:43

Variant 不用判断。数据类型相同才传递。不相同不传递。不会出错。

我曾写过关于Variant 的一帖。


学而时习之,不亦说乎?温故而知新,不亦乐乎?
以下网友喜欢您的帖子:

  
游侠

经验值: 592
发帖数: 155
精华帖: 2
回复:优化数据块和Variant怎么实现S7 300里的查表功能
推荐帖


只看楼主 楼主 4楼 2018-02-04 22:54:44

我原来的功能块,采用的是Any,我在实现查表的时候是要判断数据类型的,因为数据类型不同所占的字节数是不同的,那么在查表的时候,地址偏移量是不同的。

在标准数据块中是有地址的,而在优化数据块中是没有地址的。那么我怎么去实现这个偏移。


当然这个表是数组,数组中的元素是结构类型。不同的实现结构也不同,那么我在查表中的偏移地址也不同,所以我原来做的这个功能块是一个很通用的查表功能,只需要给定接口参数即可。


但到了优化数据块,我怎么实现原来的那个功能?

请教各位对1500熟悉的大拿


 
以下网友喜欢您的帖子:

  
奇侠

经验值: 6746
发帖数: 842
精华帖: 46
回复:优化数据块和Variant怎么实现S7 300里的查表功能


只看楼主 5楼 2018-02-05 09:18:25
以下是引用清风飞扬在2018-02-04 22:54:44的发言 >4楼

我原来的功能块,采用的是Any,我在实现查表的时候是要判断数据类型的,因为数据类型不同所占的字节数是不同的,那么在查表的时候,地址偏移量是不同的。

在标准数据块中是有地址的,而在优化数据块中是没有地址的。那么我怎么去实现这个偏移。


当然这个表是数组,数组中的元素是结构类型。不同的实现结构也不同,那么我在查表中的偏移地址也不同,所以我原来做的这个功能块是一个很通用的查表功能,只需要给定接口参数即可。


但到了优化数据块,我怎么实现原来的那个功能?

请教各位对1500熟悉的大拿

Variant也可以判断,有个指令,叫type of xxx的,(抱歉,装博途的机器不在手头,大概就是这样一个指令),可以先判断完毕后,再按照实际类型进行处理。


Let's build the automation future!
以下网友喜欢您的帖子:

  
奇侠

经验值: 5494
发帖数: 372
精华帖: 2
回复:优化数据块和Variant怎么实现S7 300里的查表功能


只看楼主 6楼 2018-02-06 02:40:25
以下是引用清风飞扬在2018-02-04 22:54:44的发言 >4楼

我原来的功能块,采用的是Any,我在实现查表的时候是要判断数据类型的,因为数据类型不同所占的字节数是不同的,那么在查表的时候,地址偏移量是不同的。

在标准数据块中是有地址的,而在优化数据块中是没有地址的。那么我怎么去实现这个偏移。


当然这个表是数组,数组中的元素是结构类型。不同的实现结构也不同,那么我在查表中的偏移地址也不同,所以我原来做的这个功能块是一个很通用的查表功能,只需要给定接口参数即可。


但到了优化数据块,我怎么实现原来的那个功能?

请教各位对1500熟悉的大拿

你把1500里的程序块设置为非优化的不就行了吗
 
以下网友喜欢您的帖子:

  
版主

经验值: 12147
发帖数: 1774
精华帖: 37
回复:优化数据块和Variant怎么实现S7 300里的查表功能
推荐帖


只看楼主 7楼 2018-02-06 08:27:09

采用优化数据块的 访问方式,目的就是不使用寻址了,所以 ,要实现你的功能,最快的方式就是采用标准块访问方式吧!

1500的间接寻址使用的是POKE/PEEK指令,当然你使用传统的STL寻址方式也是可以的


人生就像一场旅行!
以下网友喜欢您的帖子:

  
游侠

经验值: 592
发帖数: 155
精华帖: 2
回复:优化数据块和Variant怎么实现S7 300里的查表功能


只看楼主 楼主 8楼 2018-02-06 09:43:27

对于标准数据块来说,我原来的那个功能块直接可以在1500里使用并不做任何修改,但是这个功能块是无法在1200里使用。

所以才有了这样一种想法,采用优化数据块和Variant类型来实现原来那个功能块的功能,可以通用于1200和1500.



 
以下网友喜欢您的帖子:

  
版主

经验值: 58112
发帖数: 16799
精华帖: 327
回复:优化数据块和Variant怎么实现S7 300里的查表功能


只看楼主 9楼 2018-07-10 18:30:38

只要输出的结构与被查询表的元素机构相同即可,查询并不是难事在博图里


没有地址偏移量了,只有数组元素索引编号。


Zane 注册自动化系统工程师 Always save before download
以下网友喜欢您的帖子:

  
至圣

经验值: 12973
发帖数: 5758
精华帖: 50
回复:优化数据块和Variant怎么实现S7 300里的查表功能


只看楼主 10楼 2018-07-12 18:37:18

如果只是为了移植,为什么一定要用优化块?


知其道,用其妙!
以下网友喜欢您的帖子:

  
至圣

经验值: 18311
发帖数: 2474
精华帖: 18
回复:优化数据块和Variant怎么实现S7 300里的查表功能


只看楼主 11楼 2018-07-19 00:11:07

@清风飞扬 问题解决了吗?


学不可以已……
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
优化数据块和Variant怎么实现S7 300里的查表功能
×
扫描打开手机版
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。