回复:【求助】关于DB块使用的几个问题

已锁定

askab

  • 帖子

    401
  • 精华

    5
  • 被关注

    34

论坛等级:侠圣

注册时间:2005-07-24

黄金 黄金 如何晋级?

发布于 2022-11-23 16:36:13

3楼

1、DB块中的记录对应的地址,是只能根据数据类型按顺序排列嘛,有没有办法可以跨过部分地址生成记录?


2、记录中的名称STAT* 是数据类型加编号,还是任意编号都可以?


3、有没有办法可以批量生成记录,或者类似名字可以自己递增的功能?

///////////////////////////////////////////////////////////////////////////////////

DB块为 share db  以及 instance db  前者是可以全局 调用 读写,后者作为背景数据FB调用。 但两者的地址在PLC 内也是唯一的。形参可以一样,例如 DB1.DBX0.0  与DB2.DBX0.0 均可以定义 为 "启动”,但对应地址是不同的。

下来回答你的问题,综合你的三个问题,你其实使用UDT 形式,自己建立自己的数据类型以及排序。

例如 针对问题1 ,你可以定义  4个数据, 姓名  性别 ,年龄   成绩


TYPE UDT10

    STRUCT

STAT_group   : STRUCT

name: CHAR:= ' ';       

gender: BOOL:= FALSE;    // 男性为 true  女性为false.       

age: INT:= 0;    

score: REAL:= 0.0;

END_STRUCT;

    END_STRUCT

END_TYPE


DATA_BLOCK DB5  UDT10

BEGIN


END_DATA_BLOCK

增加 如下

DATA_BLOCK DB6  UDT10

BEGIN


END_DATA_BLOCK


DATA_BLOCK DB7  UDT10

BEGIN


END_DATA_BLOCK

依次类推。

// 以上经过编译后 生成DB5 可以定义为第一个人的资料,DB6 为2  DB7 为3 或者如下操作。

(DB5,DB6,DB7 是自动生成的)

2. STAT* 是系统自动生成的名称,你可以改也可以不改,只要你知道对应地址的变量是干啥,就相当与你把你老婆叫 老婆,媳妇,家里的,掌柜的,随便你叫,但真实的对应都是一个人。

如上我的,例子的 name  age 等

3. 用UDT 就是可以批量生成记录,如上,但你所谓的自动增加,第一个这样不合适也不安全,因为编程都需要遵循先定义在编程,不要我想用几个用几个,这样容易乱。

但如果你非要这样,是可以的。我一般不这样用。

TYPE UDT15

TITLE = INT_DB'

// 

//VERSION: '0.0'

AUTHOR: baikai

NAME: DB_Group

FAMILY: bk_group

know_how_protect

STRUCT

STAT1_INT   : STRUCT

REAL11:ARRAY[1..10] OF  INT:= 0;

END_STRUCT;

 END_STRUCT

END_TYPE


DATA_BLOCK DB68  UDT 15

BEGIN

END_DATA_BLOCK

DB68  自动生成10个 INT 型变量, 更改[1..20]  则为20个INT型,但数据会初始化,你可以用COPY 先存储,例如原来是10 个,更改为20  则顺延增加10个,利用SFC20 把 前10个数据从新刷入,后10个在根据要求赋值。

///////// 以上方法应该可以解决你的部分问题, 仅供参考。 我一般是按照UDT10那样做,变量类型可以随意,除非大量同类型的才用UDT15 形式。

大家同行,you ok ? me !
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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