1 / 151

第四章 数据传送和数据比较指令

第四章 数据传送和数据比较指令. 数据传送指令. 数据比较指令. 数据传送和数据比较指令有两个以上操作数. 要注意指令微分和非微分形式时用法的区别. 要注意这些指令的操作数的含义及其范围. 这些指令多数都有微分和非微分两种形式. 一、 数据传送指令. 单字传送指令 MOV. 数字 传送指令 MOVD. 块 传送指令 XFER. 单字 分配指令 DIST. 块 设置指令 BSET. 数据调用 指令 COLL. 位 传送指令 MOVB. 数据交换 指令 XCHG. MOV (21) S D.

solada
Télécharger la présentation

第四章 数据传送和数据比较指令

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第四章 数据传送和数据比较指令

  2. 数据传送指令 数据比较指令 数据传送和数据比较指令有两个以上操作数 要注意指令微分和非微分形式时用法的区别 要注意这些指令的操作数的含义及其范围 这些指令多数都有微分和非微分两种形式

  3. 一、 数据传送指令 单字传送指令MOV 数字传送指令MOVD 块传送指令XFER 单字分配指令DIST 块设置指令BSET 数据调用指令COLL 位传送指令MOVB 数据交换指令XCHG

  4. MOV (21) S D @ MOV (21) S D @MOV(21) S D MOV(21) S D 1. 单字传送指令MOV(21)/ @MOV (21) S:源数据(通道或十六进制数 ) D:目的通道号 非微分:在执行条件为ON时,将S传送到D中 (每个扫描周期都执行)。 功 能 微 分:在执行条件OFF→ON时,将S传送到D中 (只在条件满足时刻执行一次)。

  5. 25315 MOV(21) # 0198 HR00 使用MOV指令举例(1) 分析程序的功能,并写出语句表. LD 25315 MOV (21) #0198 HR00 在PLC上电的第一个扫描周期,把0198传送到HR00中 在此后的各扫描周期,不再执行MOV指令。

  6. 00000 DIFU(13) 20000 20000 MOV(21) LR00 HR00 LR00中的内容在变化,必要时将其传送到HR00中。 使用MOV指令举例(2) 分析程序的功能: 只要0000 OFF→ON,就执行一次MOV指令。 把LR00中的内容传送到HR00中。 使用DIFU指令有何作用?

  7. 00000 @MOV(21) LR00 HR00 00000 DIFU(13) 20000 20000 MOV(21) LR00 HR00 分析程序的功能 使用MOV指令举例(3) 只要00000 OFF→ON,就执行一次MOV指令。 把LR00中的内容传送到HR00中。 与举例(2 )功能相同。

  8. 00000 25315 @MOV(21) LR00 HR00 MOV(21) LR00 HR00 00000 DIFU(13) 20000 20000 MOV(21) LR00 HR00 (a) (b) (c) 指令MOV几种使用方法的区别 (a)与(c)相同,指令MOV都只在00000 OFF→ON时执行一次。 (b ) 指令MOV只在PLC上电后的第一个扫描周期执行一次。

  9. 25313 MOV(21) HR00 LR00 分析程序的功能 使用MOV指令举例(4) 从PLC上电开始,每个扫描周期里,都将HR00中的内容传送到LR00中。 与上述几种MOV指令使用方法的区别是: 本程序中,每个扫描周期指令MOV都执行! 请注意MOV指令各种用法的区别

  10. 25315 MOV(21) #0100 200 00001 @MOV(21) #0200 200 00000 25502 CNT000 200 00001 25315 00002 分析程序的功能 使用MOV指令举例(5) PLC上电时,将0100传送到200通道中,作为CNT000的设定值 自00000 ON开始, CNT000按设定值100开始计数(或定时)。 ★ 改变计数器设定值的操作: ●断开00000,闭合一次触点 00002, 使CNT000复位; ●使00001OFF→ON,将0200 传送到200通道中; ●此后计数器按设定值200计数

  11. XFER(70 ) N S D @ XFER(70 ) N S D XFER(70) @XFER(70) N N S S D D 2. 块传送指令XFER (70 )/ @ XFER(70 ) N :通道数(BCD数 ) S :源数据块首通道 D:目的通道首通道 功能 在执行条件为ON时,将几个连续通道中的数据传送到另外几个连续通道中。

  12. S S+1 S+2 D+2 D D+1 8 2 A C 1 2 3 4 9 0 B 6 8 2 A C 1 2 3 4 9 0 B 6 … … … D+N-1 S+N-1 0 D F E 0 D F E 执行块传送指令时数据传送如下所示:

  13. BEST(71 ) S St E @ BEST(71) S St E BSET(71) @BSET(71) S S St St E E 3. 块设置指令BEST(71)/ @ BEST(71) S :源数据(通道或十六进制数 ) St:开始通道 E:结束通道号 功能 在执行条件为ON时,将S传送到从St到E的各通道中。

  14. 分析程序的功能,写语句表 使用BEST指令举例 00000 @MOV(21) # 0100 HR00 TIM000 HR00 TIM000 01000 00001 @BSET(71) # 0050 TIM000 TIM000 LD 00000 @MOV(21) #0100 HR00 TIM 000 HR00 AND TIM000 OUT 01000 LD 00001 @BSET(71) #0050 TIM 000 TIM 000

  15. 00000 @MOV(21) # 0100 HR00 TIM000 HR00 TIM000 01000 00001 @BSET(71) # 0050 TIM000 TIM000 功能 ① @BSET指令的第二、第三操作数都是TIM000,即执行@BSET指令,只把数据传送到TIM000中。 ②在00001OFF、00000 OFF→ON 时,执行一次MOV指令,将 #0100传送到通道HR00中。 ③自此TIM 000以设定值10秒定时。 ④ 经过10秒,定时器TIM000 ON, 线圈01000 ON 。

  16. 00000 @MOV(21) # 0100 HR00 TIM000 HR00 TIM000 01000 00001 @BSET(71) # 0050 TIM000 TIM000 ⑤当需要改变定时器TIM000的当前值时,可通过执行@BSET指令来实现。 例如,在TIM000的当前值为0089时,令00001 ON一次: 执行@BSET指令将0050传送到TIM000中,TIM000的当前值立即变为0050。 自此,TIM000的当前值从0050开始,每隔0.1秒减1,一直减到为0000为止。

  17. 00000 @MOV(21) # 0100 HR00 TIM000 HR00 TIM000 01000 00001 @BSET(71) # 0050 TIM000 TIM000 ⑥由于HR00中的数据没有改变,在下一次定时器TIM000工作时,其定时值仍然是0100。 ★以上是用BSET指令改变定时器的当前值。 ★用BSET指令也可以改变定时器的设定值。方法为: 本例中,令BSET指令的第2、3操作数为HR00,执行BSET指令后,TIM000的设定值就为0050了。

  18. MOV与BSET指令的异同 ① 执行一次MOV指令,只能向一个通道传送一个字;而执行一次BSET指令,可以向多个通道传送同一个字。 ② TIM / CNT的操作数是通道时,用MOV 和BSET指令都可以改变TIM / CNT的设定值。 ③ 用BSET指令既可改变TIM/CNT的设定值、也可以改变TIM/CNT的当前值 。 因为MOV指令不能向TC区传送数据, 所以不能用MOV指令改变 TIM/CNT的当前值 !

  19. @ MOVB(82) MOVB (82) S C D @ MOVB (82) S C D S C D MOVB (82) S C D 4. 位传送指令MOVB (82)/ @ MOVB (82) S:源数据 D:目的通道C (BCD) :控制数据 bit00~bit07指定S中的位号 bit08~bit15指定D中的位号 C内容的含义 指令的功能 在执行条件为ON时,根据C的内容,将S传送到D中。

  20. 分析程序的功能,写语句表 使用MOVB指令举例 25315 @MOVB (82) HR00 # 0050 200 LD 00005 @MOV B (82) HR00 #1500 200 C的含义 bit00~bit07:S中的位 bit08~bit15:D中的位 程序功能 在PLC上电之初,将HR0000的内容传送到20015中 。 例:设 HR00 的内容为 1000 1000 1000 0101 执行指令之后——20015为ON( 1 )

  21. @ MOVD(83) MOVD (83) S C D @ MOVD (83) S C D S C D MOVD (83) S C D 5. 数字传送指令MOVD (83)/ @ MOVD (83) 指令的功能 在执行条件为ON时,根据C的内容,将S中指定的数字传送到D中指定的数字位中。

  22. C 数字3 数字2 数字1 数字0 0→ 1位 1→2位 2→ 3位 3→4位 S中要传送的数字位数 MOVD (83) S C D 指令各操作数的含义 S:源数据 D:目的通道C:控制数据 C (BCD数)的含义 S中第一个要传送的数字位位号 指定D中接收第一个数字的位号 不用

  23. S D MOVD (83) 0 0 1 1 S 2 2 #0030 3 3 D 使用MOVD指令举例(1) 根据C、确定指令执行结果 C=#0030 S中第0位数字开始传送 传 送 4 位 数 字 D中从第0位开始接收第一个数字 被传送的数字位要连续 例如:1 → 2 →3 →0 例如:3 →0 →1 →2 例如:2 →3 →0 →1等

  24. S D MOVD (83) 0 0 1 1 S 2 2 #0023 3 3 D 使用MOVD指令举例(2) 根据C、确定指令执行结果 C=#0023 S中第3位数字开始传送 传 送 3 位 数 字 D中从第0位开始接收第一个数字 第二个被传送的数字 第一个接收数字的位 第三个被传送的数字 第一个被传送的数字

  25. S D MOVD (83) 0 0 1 1 S 2 2 #0123 3 3 D 使用MOVD指令举例(3) 根据C、确定指令执行结果 C=#0123 S中第3位数字开始传送 传 送 3 位 数 字 D中从第1位开始接收第一个数字 第二个被传送的数字 第一个接收数字的位 第三个被传送的数字 第一个被传送的数字

  26. DIST(80) @ DIST(80) DIST(80) S DBS C @ COLL (81) S DBS C S S DBS DBS C C 6. 单字分配指令DIST(80)/ @ DIST (80) S:源数据 DBS:目标基准通道C:控制数据(BCD) 指令的功能 在执行条件为ON时,根据C的内容,进行单字数据分配或堆栈的进栈操作(栈区由C的低3位确定)。

  27. DIST(80) S S 9 0 B 6 DBS C DBS+C 9 0 B 6 控制数据C (BCD) 的含义 1. C的bit12~ bit15的内容≤8时,执行单字数据 分配 操作。 指令功能 当执行条件为ON时,将S的内容传送到(DBS +C)中,如下图。

  28. 2. C的bit12~ bit15的内容= 9时,执行指令生成一个堆栈,执行进栈操作。 指令功能: 当执行条件为ON时,执行指令生成一个堆栈(以C的低3位确定栈区通道数),以DBS为堆栈指针进行进栈操作。 进栈方法: 每执行一次指令,将S的内容复制到(DBS +堆栈指针+1)的栈区通道中,然后指针加1。

  29. 00000 @DIST(80) 200 DM0000 DM0000 DM0000 DM0000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 F F F F 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 F F F F 0 0 0 0 F F F F 0 0 0 1 0 0 0 0 216 DM0001 DM0001 DM0001 DM0002 DM0002 DM0002 200:FFFF DM0003 DM0003 DM0003 DM0004 DM0004 DM0004 216:9005 DM0005 DM0005 DM0005 进栈过程举例。 源数据 堆栈指针 第一次执行 ! ! 栈区 第二次执行 控制数据 ! !

  30. @ COLL(81) COLL (81) SBS C D @ COLL (81) SBS C D SBS C D COLL (81) SBS C D 7. 数据调用指令COLL (81)/ @ COLL (81) SBs是基准通道 D是目的通道C是控制数据(BCD) 指令的功能 在执行条件为ON时,根据C的内容,进行调用数据或堆栈的出栈操作(栈区由C的低3位确定)。

  31. @ COLL(81) SBS C D 控制数据C (BCD) 的含义 1. C=0000~6655—— 数据调用 指令功能 当执行条件为ON时,将(SBS +C) 传送到D中。

  32. @ COLL(81) SBS C D 2. 出栈操作 (包括两种情况) ① C=9000~9999 ——先入先出的出栈操作 以SBS为堆栈指针,按先入先出的原则,将堆栈中的数据传送到D中,堆栈指针减1。 ② C=8000~8999 —— 后入先出的出栈操作 以SBS为堆栈指针,按后入先出的原则,将堆栈中的数据复制到D中(堆栈中的内容不变),堆栈指针减1。

  33. DM0000 DM0000 0006 0007 1101 0001 DM0001 DM0001 0156 1101 DM0002 DM0002 0156 568C DM0003 DM0003 DM0004 DM0004 568C 0000 9D6F 0000 栈区 DM0005 DM0005 @ COOL(81) EEEE 9D6F DM0006 DM0006 DM0007 DM0007 EEEE EEEE DM0000 #9007 200 IR200 IR200 0001 1101 分析:当SBs=DM0000、 C=#9007 、D=200时,指令COLL执行的结果。 C=#9007 先入先出 栈区 DM0001~DM0007 指针减1 先入先出的出栈过程 堆栈指针 执行前 执行一次 执行二次

  34. DM0000 DM0000 0006 0007 0001 0001 DM0001 DM0001 1101 1101 DM0002 DM0002 0156 0156 DM0003 DM0003 DM0004 DM0004 568C 568C 0000 0000 栈区 不变 DM0005 DM0005 @ COOL(81) 9D6F 9D6F DM0006 DM0006 DM0007 DM0007 1234 1234 DM0000 #9007 200 IR200 1234 9D6F 分析:当SBs=DM0000、 C=#8007 、D=200时,指令COLL执行的结果。 C=#8007 后入先出 栈区为 DM0001~DM0007 指针减1 后入先出的出栈过程 堆栈指针 执行前 执行一次 执行二次

  35. 二、 数据比较指令 单字比较指令CMP 双字比较指令CMPL 块比较指令BCMP 表比较指令TCMP

  36. CMP(20) C1 C2 CMP(20) C1 C2 1. 单字比较指令CMP C1:比较数1 C2 :比较数2 功能 在执行条件为ON时,将C1和C2进行比较。 当 C1 > C2时,标志位25505 ON 当 C1= C2时,标志位25506 ON 当 C1< C2时,标志位25507 ON

  37. 00000 TIM000 #0030 CMP(20) TIM 000 # 0200 25505 25506 20001 20000 25507 20002 TIM000 20003 使用CMP指令举例(1) 写语句表、分析程序功能 LD 00000 TIM 000 #0030 CMP(20) TIM000 #0200 AND 25505 OUT 20000 AND 25506 OUT 20001 AND 25507 OUT 20002 LD TIM000 OUT 20003

  38. 00000 TIM000 #0300 CMP(20) TIM 000 # 0200 25505 25506 20001 20000 25507 20002 TIM000 20003 分析程序功能 执行指令CMP时,将TIM000的当前值与 #0200进行比较。 当00000为ON时,TIM000开始定时、且开始执行CMP指令。 TIM000的当前值由0300每隔0.1秒减1。

  39. 00000 TIM000 #0030 CMP(20) TIM 000 # 0020 25505 25506 20000 20001 25507 20002 TIM000 20003 续 若TIM000当前值大于#0200时,25505 ON →20000 ON。 若TIM000的当前值等于# 0200时,25506 ON → 20001 ON。 若TIM000的当前值小于# 0200时,25507 ON → 20002 ON。 当TIM000 定时到 时,20002和 20003 ON。 可见:配合指令CMP,用一个定时器可以控制 多个输出位。

  40. CMP(20) TIM 000 # 0020 00000 DIFU(13) 20000 01000 25505 使用CMP指令举例 (2) 分析本例使用微分指令的原因 由于CMP指令没有微分形式 若欲使指令CMP只在00000 OFF→ON时执行一次 则必须使用指令DIFU(13)

  41. @ BCMP(68) BCMP (68) CD CB R @ BM P(68) CD CB R CD CB R BCMP (68) CD CB R 2. 块比较指令BCMP CD:比较数据 CB:数据块的起始通道R:存结果通道 功能 当执行条件为ON时,将CD与每个数据区域比较。 当CD处于某个区域时,与该区域对应的R的位ON。

  42. 00000 @MOV(21) # 1450 200 下限上限 HR 05 DM 0000 0000 DM 0001 0100 HR 0500 DM 0002 0101 DM 0003 0200 HR 0501 DM 0004 0201 DM 0005 0300 HR 0502 DM 0006 0301 DM 0007 0400 HR 0503 DM 0008 0401 DM 0009 0500 HR 0504 DM 0010 0501 DM 0011 0600 HR 0505 DM 0012 0601 DM 0013 0700 HR 0506 DM 0014 0701 DM 0015 0800 HR 0507 DM 0016 0801 DM 0017 0900 HR 0508 DM 0018 0901 DM 0019 1000 HR 0509 DM 0020 1001 DM 0021 1100 HR 0510 DM 0022 1101 DM 0023 1200 HR 0510 DM 0024 1201 DM 0025 1300 HR 0512 DM 0026 1301 DM 0027 1400 HR 0513 DM 0028 1401 DM 0029 1500 HR 0514 DM 0030 1501 DM 0031 1600 HR 0515 @BCMP 200 DM0000 HR 05 使用块比较指令BCMP举例 数据块 存结果 比较数据 块首通道 结果通道 数据块内容可预先写入 比较指令执行结果:HR 0514为 ON

  43. @ TCMP(85) TCMP (85) CD TB R @ TCMP(68) CD TB R CD TB R TCMP (85) CD TB R 3. 表比较指令TCMP CD:比较数据 TB:数据表的起始通道R: 结果通道 功能 当执行条件为ON时,将CD与数据表中的数据比较。 当CD与表中某个通道的数据相同时,与该通道对应的R的位为ON。

  44. 00000 @MOV(21) # 0005 200 数据表 结果通道 对应位状态 HR00 0101 HR1900 0 HR01 0151 HR1901 0 HR02 0005 HR1902 1 HR15 0605 HR1915 0 @TCMP 200 HR00 HR19 … … … 使用表比较指令TCMP举例 存结果 比较数据 表首通道 结果通道 数据表内容可预先写入 该程序执行结果:HR 1902为ON。

  45. 数据传送和数据比较指令小结 1. 数据传送指令 (1) 注意各种传送指令的区别。 单字传送MOV是常用的指令,要牢记其使用方法。 区别位传送和数字传送指令目的通道内容存放的方法 块设置指令BSET可以向TC区传送数据,用该指令可以改变定时器的当前值。 (2) 注意块传送和块设置指令功能的区别。 (3)注意单字分配、数据调用和数据交换指令的区别。

  46. 2. 数据比较指令 (1) 单字/双字比较指令是常用的指令,要牢记其格式、梯形图、操作数范围和使用方法。 使用单字/双字比较指令要影响标志位25505~25507:① 在需要保存标志位状态时,要编写相应程序。 ②注意触点25505~25507的使用方法。 (2) 注意块比较和表比较指令执行结果的表示方法。

  47. 数据移位和数据转换指令 数 据 运 算 指 令 子程序控制 指 令 高速计数器控制 指 令

  48. 数据移位和数据转换指令

  49. 数据移位与数据转换指令指令 数据移位指令 数据转换指令

  50. 数据移位指令 移位寄存器指令 可逆移位寄存器指令 数字左、右移指令 算术左、右移指令 循环左、右移指令 字 移 位 指 令 异步移位寄存器指令

More Related