爱一夜夜爽 99久久无色_自拍视频精品一区二区三区_欧美日韩一区观看_欧美-级高清免费一片

免費注冊91短視頻 在線留言 聯(lián)系我們
關注微信
手機掃一掃 立刻聯(lián)系商家
全國服務熱線18820221592
公司新聞

S7-1200移動指令怎么用?一步步教你搞懂-97免費人妻在線觀看メイリン モデルコレクション メイ|歐美成人級愛情視頻

發(fā)布時間: 2026-10-21 16:05 更新時間: 2026-10-24 08:00
觀看S7-1200移動指令怎么用?一步步教你搞懂-97免費人妻在線觀看メイリン モデルコレクション メイ|歐美成人級愛情視頻視頻

移動指令


圖片

1

MOVE 系列指令

1: 這篇文檔要給大家介紹幾個常用的MOVE系列指令,具體是哪些指令,下面有鏈接可以點進去看。

  • MOVE
  • (U)MOVE_BLK
  • MOVE_BLK_VARIANT

2

MOVE

2: 在LAD(梯形圖)里,MOVE是個專門的指令塊;而在SCL(結構化控制語言)里,直接用冒號等號(:=)就能實現(xiàn)和MOVE一樣的功能,當然,這個冒號等號還能干別的活兒。



3: MOVE指令的作用是,當它的使能端EN有電(條件滿足)時,就把一個變量的值復制到另一個變量里,但要求這兩個變量的數(shù)據(jù)類型是一樣的,而且不能是位(bit)、字符串(string)或者Variant(變體)這些特殊類型。


圖片


圖1 指令位置

4: 這里有幾個要注意的地方,大家仔細看:

5: 第一點,在LAD里,如果你要傳送整個字符串,得用專門的S_MOVE指令(在SCL里直接用:=就行),但是如果你只想傳送字符串里的某一個字符,那還得用MOVE指令。

6: 第二點,MOVE指令支持“一對多”傳送,也就是一個源變量可以同時復制給好幾個目標變量,但是這種“一對多”不支持復雜數(shù)據(jù)類型,比如DTL(日期時間)、結構體、數(shù)組,也不支持字符串里的單個字符。

7: 第三點,如果要傳送數(shù)組,那么源數(shù)組和目標數(shù)組的元素數(shù)據(jù)類型必須一樣,元素個數(shù)也必須一樣,但是數(shù)組的下標范圍可以不一樣。舉個例子,一個Array[0..1] of Byte(下標0和1的字節(jié)數(shù)組)可以傳送給Array[1..2] of Byte(下標1和2的字節(jié)數(shù)組),雖然下標不同,但元素類型和個數(shù)都一樣,所以沒問題。

8: 第四點,如果MOVE指令兩邊都是基本數(shù)據(jù)類型(比如整數(shù)、實數(shù)等),那么只要滿足表1里列出的兼容條件,就可以傳送。表1在下面。

9: 表1 MOVE的傳送條件(這張表具體列出了哪些類型之間可以互相傳送)。

10: 注意:第一,如果輸入IN的數(shù)據(jù)類型比輸出OUT的數(shù)據(jù)類型位數(shù)長,那么源值的高位(左邊那些位)會被丟掉;反過來,如果IN比OUT短,那么目標值的高位會被補上0。第二,把REAL(實數(shù))傳送給DWORD(雙字)時,是按位直接搬過去的,不是四舍五入取整。如果你想要取整,得用ROUND或者CONVERT_REAL_TO_DINT這些指令。第三,關于IEC檢查,指的是MOVE指令所在的OB、FC或FB塊的屬性里有個“IEC檢查”選項,這個選項只對這個塊起作用,而且默認是不激活的。怎么設置,看圖2。


圖片


圖2 IEC檢查的設置


3

MOVE的使用

圖片


圖3 DB25

11: 第一種情況:傳送單個基本類型變量,也就是一個變量復制給另一個變量。


圖片


圖4 單個基本類型變量的傳送

12: 第二種情況:傳送數(shù)組,就是把整個數(shù)組復制過去,但必須滿足前面說的條件。


圖片


圖5 數(shù)組的傳送

咱們先看看UDT(就是用戶自定義的那種數(shù)據(jù)類型)是怎么傳送的。你可以把它想象成一個打包好的盒子,里面裝了好幾種不同類型的東西。傳送UDT,就是把這個盒子整個從一處搬到另一處,里面東西原封不動。


圖片


圖6 UDT的傳送

接著是String(字符串)里的字符傳送。字符串就是一串字符,比如“hello”。傳送字符,就是把這串字符里的某個或某幾個字母單獨拿出來,放到另一個地方去,就像從一句話里挑出幾個字寫到別處。


圖片


圖7 String中的字符的傳送

然后是DTL(一種存日期和時間的數(shù)據(jù)類型)里的變量傳送。DTL就像是一個記錄年、月、日、時、分、秒、納秒的復雜鐘表。傳送它的變量,就是把鐘表上的某個讀數(shù),比如“分”或者“小時”,單獨復制到別的地方去。


圖片


圖8 DTL中的變量的傳送

再來說DB塊整體之間的傳送。DB塊就是數(shù)據(jù)塊,相當于一個倉庫,里面分了好幾個格子,每個格子放不同數(shù)據(jù)。整體傳送,就是把整個倉庫的所有東西,原樣搬到另一個一模一樣的倉庫里去,省得一個一個格子搬。

但這里有個前提條件:兩個DB塊都得是“非優(yōu)化塊”,或者你把優(yōu)化塊的“存儲器預留區(qū)域”和“預留可保持性存儲器”都設成0字節(jié)(看圖9),并且兩個DB塊的結構得完全一樣,就像兩個同款的大衣柜,抽屜和隔板位置都一樣。


圖片

4

IN和OUT的DB需同類·禁止輸出到多個DB

圖片


圖9 存儲器預留區(qū)域設置


圖片


圖10 DB整體傳送


圖片


圖11 DB整體傳送程序


5

(U)MOVE_BLK


在LAD和SCL這兩種編程語言里,用的指令都叫MOVE_BLK或者UMOVE_BLK。你可以把它們當成一個“批量搬運工”指令。

這個指令的意思是:當EN條件滿足(就像開關合上)時,它能實現(xiàn)兩個相同數(shù)組之間部分元素的傳送。MOVE_BLK和UMOVE_BLK的區(qū)別是:UMOVE_BLK干活時不允許別人打斷它,而且它一次多能搬16kB的數(shù)據(jù)。MOVE_BLK則可能被中斷,就像搬家時可能被電話打斷一樣。


圖片


圖12 程序位置


圖片


圖13 指令詳情

這里要特別提醒大家注意幾點:

第一,IN和OUT這兩個接口,必須是指向數(shù)組里的某一個元素,比如“DB26”.Static_1[0],不能是常數(shù)、常量、普通變量,也不能是整個數(shù)組的名字。就好比你要指定從貨架的第幾個格子里取貨,不能直接說把整個貨架搬走。

第二,IN和OUT的數(shù)據(jù)類型必須完全一樣,而且只能是基本數(shù)據(jù)類型,不能是UDT、Struct這些復雜類型組成的數(shù)組。好比兩個盒子里的東西得是同樣的小物件,不能一個裝螺絲一個裝混合雜物。

第三,IN是源數(shù)組里開始傳送的那個元素,OUT是目的數(shù)組里開始接收的那個元素。就像從一列隊伍中第3個人開始,把5個人帶到另一列隊伍從第7個人開始的位置。

第四,COUNT是傳送的個數(shù),可以是正整數(shù)常數(shù),也可以是變量,但變量類型得是USINT、UINT、UDINT這些無符號整數(shù)。就像你決定搬幾個箱子,這個數(shù)可以寫死,也可以用個計數(shù)器來定。

第5條:如果目標數(shù)組能接收的空間比源數(shù)組要傳的空間小,那就只傳目標數(shù)組能裝下的那部分數(shù)據(jù)。另外,如果這個指令的ENO功能被激活了,那ENO就會變成False,也就是指令執(zhí)行不成功。


6

(U)MOVE_BLK用法


這條指令實現(xiàn)的功能是:把DB26數(shù)據(jù)塊里Static_1數(shù)組從第0個元素開始的4個元素,搬到Static_2數(shù)組從第4個元素開始的位置。


圖片


圖14 程序使用


圖片


圖15 運行結果


7

MOVE_BLK_VARIANT


這個指令在LAD(梯形圖)和SCL(結構化控制語言)里都有,名字都叫MOVE_BLK_VARIANT。

MOVE_BLK_VARIANT的主要作用就是用來在數(shù)組之間搬移一部分元素,而且它能處理Variant類型的變量,特別適合用來操作那些長度不固定的數(shù)組,也就是變長數(shù)組。

這個指令是從TIA博途V13 SP1版本和S7-1200 PLC的V4.0固件版本開始才支持的,再老的版本就用不了了。


圖片


圖16 指令位置


圖片


圖17 指令詳情

表2是參數(shù)說明,這里就不細說了,具體看表就行。

參數(shù)
聲明
數(shù)據(jù)類型
SRC
Input
Variant、Array、其他(不包括Bool,Array of Bool)
COUNT
Input
UDINT
SRC_INDEX
Input
DINT
DEST_INDEX
Input
DINT
DEST
Output
Variant、Array、其他(不包括Bool,Array of Bool)
RET_VAL
Return
INT

MOVE_BLK_VARIANT指令通常是把源數(shù)組SRC里的部分元素搬到目標數(shù)組DEST里,但要注意,SRC和DEST的數(shù)組元素類型必須完全一樣。COUNT表示要搬幾個元素,SRC_INDEX表示從源數(shù)組的第幾個元素開始搬,DEST_INDEX表示目標數(shù)組從第幾個位置開始接收。這里的編號都是從0開始的,0就代表第一個元素,所以叫編號不叫下標。

同樣是搬部分數(shù)組元素,MOVE_BLK_VARIANT比MOVE_BLK指令有幾個好處,下面具體說。

第一個好處:SRC和DEST不能是布爾(Bool)類型的數(shù)組,但可以是結構體(Struct)或者用戶自定義數(shù)據(jù)類型(UDT)這些復雜數(shù)據(jù)類型的數(shù)組。

第二個好處:SRC和DEST都可以是普通的單個變量,比如SRC是一個整數(shù)(INT)變量,DEST是一個整數(shù)數(shù)組,這時候就要把COUNT設成1,SRC_INDEX設成0,然后根據(jù)DEST_INDEX的值,把數(shù)據(jù)放到DEST指定的那個位置。

第三個好處:SRC和DEST通常填的是數(shù)組名,但也可以填普通的單個變量,或者數(shù)組里的某一個元素。如果填的是后兩種情況,那就得按照第2條說的那樣去設置參數(shù)。

4. SRC和DEST可以是參數(shù)類型Variant的變量,也就是可以直接填寫P#指針的格式,指令將會把P#指針看做數(shù)組處理( 原因 )。即使是SRC和DEST都指向Variant類型,其指向的形參的數(shù)組元素數(shù)據(jù)類型也需要相同,所以通常需要在使用指令之前用EQ_ElemType檢查其中元素的數(shù)據(jù)類型。

使用MOVE_BLK_VARIANT指令的時候要注意一些事項,下面列一下。

這個功能有個基本要求:要傳送的數(shù)據(jù)個數(shù)(COUNT)必須大于等于1。如果COUNT是0或者是個負數(shù),那系統(tǒng)就會報錯,而且一點數(shù)據(jù)都不會傳送,就相當于這個操作直接失敗了。

這里COUNT是傳送的數(shù)據(jù)個數(shù),SRC_INDEX是源數(shù)據(jù)的起始位置,DEST_INDEX是目標數(shù)據(jù)的起始位置。COUNT加上SRC_INDEX就是源數(shù)組里要用到的大編號,COUNT加上DEST_INDEX就是目標數(shù)組里要用到的大編號。如果這兩個編號超出了數(shù)組實際定義的范圍,那系統(tǒng)就會報錯,并且不會傳送任何數(shù)據(jù),就像你拿鑰匙開鎖,但鑰匙不對,門根本打不開。


8

舉例:


第一個功能是:把M區(qū)(就是PLC里的一塊存儲區(qū))的數(shù)據(jù)原封不動地搬到DB區(qū)(另一塊存儲區(qū))。要求這兩塊區(qū)域的數(shù)據(jù)結構完全一樣,就像把一盒雞蛋從左邊搬到右邊,盒子大小和雞蛋個數(shù)都得一模一樣才行。


圖片


圖18 運行結果

這里有幾個細節(jié)要注意:首先,DB塊要設置成非優(yōu)化模式(就是允許直接按地址訪問)。M區(qū)和DB區(qū)的大小都是16個字節(jié)(Byte)。源地址(SRC)和目標地址(DEST)可以用不同的數(shù)據(jù)類型來表示,比如P#BYTE 16表示按字節(jié)訪問16個,P#WORD 8表示按字(2字節(jié))訪問8個,P#DWORD 4表示按雙字(4字節(jié))訪問4個。但有個關鍵點:COUNT(要傳送的個數(shù))必須和元素個數(shù)一致。比如你寫P#BYTE 16,那COUNT就得是16;寫P#WORD 8,COUNT就是8;寫P#DWORD 4,COUNT就是4。SRC和DEST的結構要對應上,就像兩個拼圖,形狀得一樣才能拼起來。


圖片


圖19 程序詳情

第二個功能是:處理變長數(shù)組。什么意思呢?就是說數(shù)組的長度不是固定的,可能這次是5個元素,下次是10個。這個功能就是專門來應對這種情況的。

這個功能的工作原理是:FC15這個功能塊是用來處理一個叫MBV類型的變量的,這個變量在接口里設置為InOut(既是輸入又是輸出)。在FC14里,先接收一個MBV類型的變長數(shù)組作為輸入,然后在FC14內部判斷這個數(shù)組實際有多大(元素個數(shù)),接著用一個循環(huán),把數(shù)組里的每個元素挨個送到FC15里去處理,處理完后再把結果放回原來的變長數(shù)組里,后把整個數(shù)組送出去。就像你有一串長短不一的珠子,你得先數(shù)數(shù)有多少顆,然后一顆一顆地擦亮,后再把整串珠子還給你。


圖片


圖20 指令詳情


聯(lián)系方式

  • 電  話:18820221592
  • 聯(lián)系人:謝苗
  • 手  機:18820221592
  • 微  信:18820221592