定义一个共享数据块DB1 在DB1中定义一个数组 用程序 访问数据里面的某一个成员或者地址连续的成员
提纲 : 定义一个共享数据块 DB1 在DB1 中定义数组
用SFC21 实现 实现全部数组元素的赋一样的值
实现 给数组中的某一个元素赋值
实现 对数组中的全部元素赋值
实现将数组中的某个 或者 某一串 元素读取出来,放在程序中的某一个变量 或者 某些连续数组的元素中
训练前 需要掌握的知识点
在书本72 实训十六 中
L P#10.0 //表示将32位内部 指针值转载到累加器。
P#10.0 表示 10.0 是一个指针常量 。
P# "#"号后面紧跟的是 指针变量里面的值。
P#DB1.DBX0.0 INT 1 INT 表示 X 是 字 Word (字)
例如 在数据块DB1 中定义了 数组变量
P# DB1.DBX0.0 INT 1
DB1.DBX0.0 INT 1 实际就是 DB1数据块里面定义的数组Press[1]
在上图1 中的输入以后 就变为 P# DB1.DBX0.0 INT 1
知识点2
P#DB1.DBX0.0 INT 4
表示的是 DBW0~DBW6
实际上就 DBW0 DBW2 DBW4 DBW 6
知识点3
BLKMOV 的输入参数 SRCBLK 和输出参数 DSTBLK 的数据类型必须 一致。
输入是字节类型, 输出也必须是字节类型
输入是字类型, 输出也必须是字类型
练习1
将MW2 里面的值 写入数组 DB1.Press 里面的全部数组元素
例如MW2 是1 执行以后 DB1.Press[1]=1
DB1.Press[2]=1
DB1.Press[3]=1
……
DB1.Press[100]=1
练习 2 写入数组中的某一个元素 (重要)
写入第1个元素
注意:此时的 P#DB1.DBX7.0 INT 1
表示的是 DB1.DBW7 INT 表示寻址的是字 WORD 1 表示 只寻址一个字
DBW7=DB1.Byte[7]+DB1.Byte[8]
假设我把 MW2设为30 对应于十六进制的0X001E
也就是说 byte[7]是 0X00 BYTE[8]对应的是0X1E
仿真
可以知道 地址为8.0 的高字节 写入的是0X1E 所以Press[5]是0X1E00=十进制7680
地址为6.0的低字节 写入的是0X00
假设MW2写入十进制 对应16进制012C
则Prress [4] 为 0X0001 对应十进制 1
Press[5]对应OX2C00 对应十进制 11264
如果刚好P#DB1.DBX4.0 int 1
DBW4=BYTE4 +BYTE 5 与 DB1.DBW4 重合 等于 Press[3 ]
仿真 MW2 写入520
注意:程序在修好了以后 必须先保存 再下载 才生效。
练习3
写入数组中的某几个连续的元素
例如 连续写进press[6 press[7 press[8 press[9 ess[10
5个整形
执行完以后 只有preSS [6] 被成功赋值。
如果需要赋予 5个值日 。 则输入必须是统一类型的5个数据 改正程序为
输入的参数 改正为 P#2.0 INT 4 表示的是 MW2 MW4 MW6 MW 8
执行结果
在共享数据块DB1 查询值的变化
练习 4 将DB1数据块中的DBW4 DB1.DBW4 复制到MW10 中去