恭喜,你发布的帖子
发布于 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 形式。
请填写推广理由:
分享
只看
楼主