首页 理论教育 数据传送指令详解

数据传送指令详解

时间:2023-06-21 理论教育 版权反馈
【摘要】:如果将MW4中超过255的数据传送到MB6,则只是将MW4的低位字节中的数据传送到MB6,应避免出现这种情况。图4-39 MOVE与SWAP指令2.SWAP指令IN和0UT为数据类型Word时,SWAP指令交换输入IN的高、低字节后,保存到OUT指定的地址。图4-42 数据填充指令FILL_BLK与UFILL_BLK指令的功能基本上相同,其区别在于后者的填充操作不会被其他操作系统的任务打断。执行该指令时,CPU的报警响应时间将会增大。

数据传送指令详解

1.MOVE指令

MOVE指令(见图4-39)用于将IN输入端的源数据复制给OUT1输出的目的地址,并且转换为OUT1指定的数据类型,源数据保持不变。IN和OUT1可以是Bool之外所有的基本数据类型,和数据类型DTL、Struct、Array。IN还可以是常数。同一条指令的输入参数和输出参数的数据类型可以不相同,例如可以将MB0中的数据传送到MW2。如果将MW4中超过255的数据传送到MB6,则只是将MW4的低位字节(MB5)中的数据传送到MB6,应避免出现这种情况。

978-7-111-47789-1-Chapter04-42.jpg

图4-39 MOVE与SWAP指令

2.SWAP指令

IN和0UT为数据类型Word时,SWAP指令交换输入IN的高、低字节后,保存到OUT指定的地址。IN和OUT为数据类型Dword时,交换4个字节中数据的顺序,交换后保存到OUT指定的地址(见图4-39)。

3.全局数据块与数组

块传送指令用于传送数据块中的数组的多个元素。为此首先应生成全局数据块和数组。数组由相同数据类型的多个元素组成,数组元素的数据类型可以是所有的基本数据类型。点击项目树中PLC的“程序块”文件夹中的“添加新块”,如图4-40所示,添加一个新的块。在打开的对话框中,单击“数据块”按钮,生成一个数据块,可以修改其名称或采用默认的名称,其类型为默认的“全局DB”,生成方式为默认的“自动”。单击“确定”按钮后自动生成数据块。

如果用单选框选中“手动”,可以修改块的编号。选中复选框“仅符号访问”,只能用符号地址访问生成的块中的变量,不能使用绝对地址。这种访问方式可以提高存储器的利用选中下面的复选框“添加新对象并打开”,生成新的块之后,将会自动打开它。

在数据块的第2行的“名称”列(见图4-41),输入数组(Array)的名称“Source”,单击“数据类型”列中的按钮,选中下拉式列表中的数据类型“Array[lo..hi]of type”。其中的“lo(low)”和hi(high)”分别是数组元素的编号(下标)的上限值和下限值,最大范围为[-32768,32767],下限值应小于等于上限值。将“Array[lo..hi]of type”修改为“Array[0..39]of Int”(见图4-41),其元素的数据类型为Int,元素的编号为0~39。S7-1200只能生成一维数组。用同样的方法,生成数据块DB4,在DB4中生成有40个Int元素的数组Distin。在用户程序中,可以用符号地址”数据一块_1”.Source[2]或绝对地址DB3.DBW4访问数组中下标为2的元素。

978-7-111-47789-1-Chapter04-43.jpg

图4-40 添加新的块

978-7-111-47789-1-Chapter04-44.jpg

图4-41 数据块中的数组

4.FILL_BLKUFILL_BLK指令

FILL_BLK指令将输入参数IN设置的值填充到输出参数OUT指定起始地址的目标数据区,如图4-42所示。(www.xing528.com)

IN和OUT必须是D、L(数据块或块的局部数据)中的数组元素,IN还可以是常数。COUNT为填充的数组元素的个数,数据类型为DInt或常数。图4-42中I0.4的常开触点接通时,常数3527被填充到DB3的DBW0开始的20个字中。

978-7-111-47789-1-Chapter04-45.jpg

图4-42 数据填充指令

FILL_BLK与UFILL_BLK指令的功能基本上相同,其区别在于后者的填充操作不会被其他操作系统的任务打断。执行该指令时,CPU的报警响应时间将会增大。值得注意的是,指令UFILL_BLK的起始地址DB3.DBW40中的40是数据块中字节的编号,而输入参数COUNT是以字为单位的数组元素的个数。指令FILL_BLK已占用了40B(即20个字)的数据,因此UFILL_BLK指令的输出OUT指定的地址区从DBW40开始。

5.MOVE_BLKUMOVE_BLK指令

图4-43中的MOVE_BLK指令用于将数据块DB3中的数组Source的0号元素开始的20个Int元素的值,复制给数据块DB4的数组Distin的0号元素开始的20个元素。COUNT为要传送的数组元素的个数,复制操作按地址增大的方向进行。除了IN不能取常数外,指令MOVE_BLK和FILL_BLK的参数的数据类型和存储区基本上相同。

978-7-111-47789-1-Chapter04-46.jpg

图4-43 数据块传送指令

指令UMOVE_BLK与MOVE_BLK的功能基本上相同(见图4-43),其区别在于前者的复制操作不会被其他操作系统的任务打断。执行该指令时,CPU的报警响应时间将会增大。

6.块填充与块传送指令的验证

将图4-42和图4-43中的程序下载到CPU,切换到RUN模式后,双击打开指令树中的DB3和DB4。单击工具栏上的978-7-111-47789-1-Chapter04-47.jpg按钮,启动扩展模式,显示各数组元素。单击978-7-111-47789-1-Chapter04-48.jpg按钮,启动监视,“监视值”列是CPU中的变量值。

因为没有设置保持性(Retain)功能,数组元素的初始值均为0,此时DB3和DB4的各数组元素的值均为0。接通I0.4的常开触点,FILL_BLK与UFILL_BLK指令被执行,DB3中的数组元素Source[0]~Source[19]被填充数据3527,Source[20]~Source[39]被填充数据32153。图4-44是传送给DB4的部分数据。

978-7-111-47789-1-Chapter04-49.jpg

图4-44 传送给DB4的部分数据

接通I0.3的常开触点,MOVE_BLK与UMOVE_BLK指令被执行,DB3中的数组Source的前40个元素被传送给符号名为DB_2的DB4中的数组Distin的前40个元素。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈