工控網(wǎng)首頁
>

應(yīng)用設(shè)計

>

信捷 XD/XL 編程避坑指南

信捷 XD/XL 編程避坑指南

——— 信捷XD/XL系列PLC仿真軟件
2026/10/11 16:23:39

信捷 XD/XL 編程避坑指南:手冊沒寫、編譯器不報錯、程序就是不對——17 條實測踩坑

去年接了一個設(shè)備改造的活兒,程序在客戶現(xiàn)場跑著跑著就"卡步"了——定位指令發(fā)出去了,PLC 也不報警,就是不動。換了個工程師來看,改了一行就好了。

后來我發(fā)現(xiàn),這類問題不是"PLC 難",是手冊和實際行為之間有縫。信捷 XD/XL 的手冊寫得算細(xì),但有些坑它沒寫;有些坑它寫了別的名字;還有些坑,編譯器不報錯、仿真器也放行,一上機(jī)就出事。

這篇文章把我在項目里和教學(xué)里反復(fù)踩到的 17 條列出來,每條都是"現(xiàn)象 → 原因 → 正確寫法"。大部分在網(wǎng)上搜不到,因為它們需要拿手冊對著編譯器一條條試。


一、最危險的一類:編譯通過、運行不對

這類最費時間,因為沒有任何地方會告訴你"錯了"。

1. M8000 在部分 XD 機(jī)型上"能用",但沒有運行常 ON 的語義

現(xiàn)象:從老設(shè)備(XC 系列)遷移程序,M8000/M8002/M8003 原樣照抄,編譯通過,程序也能下載,但"上電初始化"那段永遠(yuǎn)不執(zhí)行。

原因:XD 的特殊繼電器是從 SM 開始的。手冊《基本指令篇》里查不到 M8000,而且明文寫著"特殊用輔助繼電器不可作為普通繼電器 M 使用"。但要注意:在 XD5/XDM 這類寬檔機(jī)型上,M 的范圍到 M69999,M8000 落在范圍內(nèi),編譯不會報錯——它就是個普通 M,失去了"運行常 ON"的語義,于是靜默失效。

正確寫法:

用途

XC(老)

XD(現(xiàn)在)

運行常 ON

M8000

SM0

運行常 OFF

M8001

SM1

初始正向脈沖

M8002

SM2

初始負(fù)向脈沖

M8003

SM3

判據(jù)不是"能不能編譯",是"語義對不對"。這是新手最容易栽的地方。

2. 用 ANI 判脈沖發(fā)送完成 → 應(yīng)改 ANF(下降沿)

現(xiàn)象:定位指令剛觸發(fā)就判"完成",設(shè)備動作還沒做完就進(jìn)下一步,節(jié)拍全亂。

原因:SM100x(各軸脈沖發(fā)送中)在脈沖發(fā)完的瞬間有一個OFF 的下降沿。用 ANI SM100x(常閉)判完成,等脈沖還在發(fā)的時候就已經(jīng)是完成狀態(tài)了。

正確寫法:ANF SM100x,取下降沿。

3. 絕對定位時"目標(biāo) == 當(dāng)前位置"→ 永久卡步

現(xiàn)象:機(jī)械手已經(jīng)到位了,再發(fā)一次同樣坐標(biāo)的 DRVA,程序直接卡在那一步不動,也不報警。

原因:手冊明確寫了,絕對模式下設(shè)定脈沖數(shù)等于當(dāng)前位置時,SM1000 無動作、無下降沿。你是靠下降沿判完成的,這里自然永遠(yuǎn)等不到。

正確寫法:下發(fā)前加一個"目標(biāo) == 當(dāng)前"的守衛(wèi),命中就直接置完成標(biāo)志、跳過該步。

4. SM2(首掃脈沖)驅(qū)動 TMR → 定時器永遠(yuǎn)到不了點

現(xiàn)象:寫了"上電延時 2 秒后加載參數(shù)",延時后那段代碼一次都不執(zhí)行。而且 TMR 的累加值一直是 0,不報警。

原因:SM2 只在第一個掃描周期 ON。TMR 是普通定時器,輸入斷開的瞬間就復(fù)位,所以它的累加值每掃描都被清零,永遠(yuǎn)到不了設(shè)定值。

正確寫法:

 

5. CALL Pn 寫在 SM2 段里 → 子程序只跑一個掃描周期

這是第 4 條的"另一半",更隱蔽:你可能把子程序內(nèi)部改對了,但調(diào)用它的 CALL Pn 掛在"只執(zhí)行一次"的段里,子程序只被調(diào)用一個掃描周期,里面的 TMR 照樣到不了點。

通用規(guī)律(記這一條就夠):凡是"輸入必須持續(xù) ON 才繼續(xù)"的器件(TMR 等),不能出現(xiàn)在只被調(diào)用一次的地方 —— 既不能直接寫在 SM2 段,也不能放進(jìn)只被 SM2 調(diào)一次的子程序。CALL Pn 要放在 SM0 主循環(huán)段里按掃描調(diào)用。

辨析:LD SM0 驅(qū)動 MOV/CALL/SET 是正確的(執(zhí)行一次就夠),不用改。


二、寫錯就一定報錯的(但報錯信息往往不直白)

6. 子程序標(biāo)號是 Pn,不是 SBRn

手冊 §2-14 原文:"寫程序時必須以 Pn 作為一段子程序的開始,以 SRET 作為一段子程序的結(jié)束。用 CALL Pn 調(diào)用。n 可以為 0~9999 中的任意整數(shù)。"

SBR 在信捷手冊里零命中——那是三菱的寫法。遷移老程序時看到 CALL SBR1 就知道了。

結(jié)構(gòu)固定:主程序 → FEND → Pn(子程序體)→ SRET。

7. TMR 的時基參數(shù)漏填,差 10~100 倍

信捷是 TMR Tn 設(shè)定值 時基,第三個參數(shù)時基只能是 K1/K10/K100。老程序(XC)用 OUT Tn 設(shè)定值,時基由 T 編號段隱含決定。

遷移時漏填或錯填:T0~T31 是 100ms 時基,從 OUT T10 K4(0.4 秒)遷過來就得寫 TMR T10 K4 K100。錯填 K10 → 程序能動、不報錯,但延時變成 0.04 秒。

還有個坑:同一個 T 編號可以隨時基切換,你不知道原來那段是哪個時基,就會出現(xiàn)"有的對有的不對"。

8. ms 直接填進(jìn) 10ms 時基,定時器慢 10 倍

想延時 500ms,在 10ms 時基的定時器里填 K500,實際是 5000ms。先 DIV Dxx K10 Dyy 再填。


三、選型和接線的坑(錯型號就直接做不出來)

9. 脈沖輸出口是"一個 Y 點一個軸",不是"脈沖+方向成對占用"

這是連帶坑最多的一條,錯了還能編譯、還能跑,但點賬全錯。

手冊口徑:

事實

出處

脈沖口 = Y0~Y11 連續(xù)編號,一個 Y 點 = 一個脈沖輸出口

定位控制篇 p31、p168

方向口可以自由指定:除脈沖口以外的所有輸出端子都行

p15 ※2

脈沖口沒用時,可以當(dāng)普通輸出點,也可以當(dāng)方向口

p16 ※6

手冊推薦的兩軸接法是 脈沖 = Y0、Y1,方向 = Y4、Y5 —— 脈沖區(qū)在前、方向區(qū)在后。

所以四軸的正確占法是:脈沖連續(xù)占 Y0~Y3,方向另擇 Y4~Y7。 錯寫成"脈沖方向成對交替"的話,四軸占滿 Y0~Y7 一個不剩,本來能省下來給開關(guān)量的 4 個點全丟了。

10. -R 機(jī)型物理上沒有脈沖口

后綴

輸出類型

高速脈沖口

T

晶體管

2 路(XD1 不支持)

T4/T4L

晶體管(擴(kuò)容)

4 路

T6/T10

晶體管

6 / 10 路

R

繼電器

0 路

RT

繼電器+晶體管混合

2 路(XD1 不支持)

D2/D4

差分高速

2 / 4 路差分

最硬的證據(jù):《定位控制篇》p14 的"脈沖輸出端口配置表"里,R 后綴根本不在表的型號列里。要選繼電器輸出型又要脈沖,只能換機(jī)型或加擴(kuò)展。

11. 繼電器型的"點數(shù)更多"是誤解

點位命名的是總點數(shù),60 檔 = 36 入 / 24 出(36 是輸入)。

而且 R / T / RT 三種后綴的輸入點數(shù) / 輸出點數(shù)完全相同 —— XD2-60R = XD2-60T = XD2-60RT = 36 入 / 24 出。

-R 的真正優(yōu)勢是觸點能直接帶負(fù)載(AC220V 電磁閥/接觸器線圈,省中間繼電器、抗浪涌、備件通用),不是"點更多"。

12. XD3-42 是 2 軸,不是 4 軸

這處官方資料自己就矛盾:定位控制篇 p14 = 2 軸、價目表 = 2 路、硬件篇附錄 3 = 4。

結(jié)論是 2 軸,硬件篇那個 4 是筆誤。這里給個通用的判斷優(yōu)先級:

客戶/原廠口頭確認(rèn) > 專講該主題的那一冊手冊(脈沖口就看定位控制篇)> 最新價目表的型號功能描述原文 > 綜合附錄表

凡涉及"選型下單"的結(jié)論,至少兩源交叉核對,把矛盾寫進(jìn)待核清單。


四、存儲區(qū):寫錯不報錯,數(shù)據(jù)悄悄丟

13. 需要斷電保持的數(shù)據(jù)放 D 區(qū) → 切一次 RUN/STOP 就沒了

信捷的寄存器分四類,保持屬性由類別決定,客戶改不了:

類別

保持行為

D 一般用

RUN?STOP 切換或上電即清零(不止停電!)

HD 停電保持用

停電、RUN?STOP 都保住,但靠電池

FD FLASH 用戶數(shù)據(jù)

斷電保持,且不怕電池沒電

HSD 特殊停電保持

掉電記憶(各軸當(dāng)前位置等)

手冊還明文說"停電保持區(qū)域的范圍由寄存器模式?jīng)Q定,客戶無法自己修改"——別去找"D 區(qū)保持范圍"設(shè)置,根本不存在。

14. 寫 FD 只能用 FWRT 族,MOV 寫不了

這條很多人不知道,因為查"MOV 的適用軟元件表"時容易看錯列:

  • MOV 的目標(biāo)列沒有 FD → MOV 對 FD 只能讀(FD 作源)

  • 能讀又能寫的只有 SFD;寫 FD 的唯一合法指令是 FWRT / DFWRT / QFWRT / FWRT S D K n

怎么查才準(zhǔn):這類表必須用 layout 模式逐列對齊,普通文本提取會把"●"跟列頭錯位。

15. FMOV 不是塊傳送

FMOV = 多點重復(fù)傳送(把一個值填到 n 個地址),不是"把一塊數(shù)據(jù)搬到另一塊"。

  • 讀 FD → D 用 BMOV(塊傳送)

  • 寫 D → FD 用 FWRT

  • 用 FMOV 會得到"每個地址都被填成同一個值"的結(jié)果

16. FD 寫入有四個硬約束

  1. 必須沿觸發(fā)(LDP/LDF),不能用電平驅(qū)動

  1. 每次寫入是整片 Flash 擦寫,約 500ms → 絕不能循環(huán)寫

  1. 可寫約 100 萬次,頻繁寫會永久損壞 → 禁用震蕩線圈(如 SM11)當(dāng)驅(qū)動

  1. ★ 源值未變化則不傳送 —— 你以為"寫了",其實沒執(zhí)行

還有一個連帶坑:SFD 也是 Flash。"每次回零前寫一遍 SFD1026(回歸速度)"=每次回零都觸發(fā) 500ms 整片擦寫,既慢又耗壽命。正確做法是只在客戶點「保存參數(shù)」時寫一次(SFD 本身掉電保持)。


五、一個查手冊本身的坑(也算踩坑)

17. 手冊 PDF 全文搜索"命中"了,不代表手冊里有這條指令

我曾用全文搜索確認(rèn)過一條指令"存在",實際是表格相鄰單元格被文本提取粘成了一串:

提取出來是 操作元:K、DRST復(fù)位輸出觸點的復(fù)位,當(dāng)前值清零,看著像手冊里有 DRST。實際原文是兩行:

助記符

功能

操作元

OUT

輸出計數(shù)線圈的驅(qū)動

K、D

RST

輸出觸點的復(fù)位,當(dāng)前值清零

C

D(OUT 行的操作元)和 RST(下一行的助記符)被粘成了 DRST。

正確查法三步:

  1. 用按獨立詞塊匹配的搜索(粘連串不命中)—— 這一步就能識破

  1. 把那一頁渲染成圖,肉眼核

  1. 確認(rèn)命中的是獨立成詞、且不與相鄰格共享行

查手冊表格類問題,這三步不能省。 官方資料之間互相矛盾的地方也不少見(見第 12 條)。

審核編輯(
王靜
)
投訴建議

提交

查看更多評論