)
簡介這份資源是基于LabVIEW圖形化編程環(huán)境控制IT3200系列程控電源的完整工程包面向從事儀器自動化控制、電子測試及實驗室供電場景的工程師與學(xué)習(xí)開發(fā)者。資源以RS-232串口通信為橋梁涵蓋SCPI命令協(xié)議解析、數(shù)據(jù)讀取、實時監(jiān)控及前面板交互界面搭建可幫助用戶快速掌握程控電源的編程控制思路并落地到實際測試任務(wù)中。包內(nèi)共98個文件以84個vi虛擬儀器程序為核心輔以mnu菜單配置文件、aliases別名映射、lvlib庫文件及l(fā)vproj工程文件結(jié)構(gòu)清晰、層次完整整套資源壓縮后約924KB便于直接加載到LabVIEW環(huán)境中參考與復(fù)用。目前已有1424人學(xué)習(xí)下載適合具備一定LabVIEW基礎(chǔ)、希望通過完整實例理解儀器串口通信與控制邏輯的中高級開發(fā)者也可作為相關(guān)課程設(shè)計或項目開發(fā)的實用模板。1. LabVIEW 與 IT3200先把程控電源的通信鏈路盤明白做自動化測試的人拿到「LabVIEW 控制程控電源 IT3200」這個需求時第一反應(yīng)往往是「不就是 VISA 打開、寫字符串、讀回來嗎」真上手才發(fā)現(xiàn)卡點全在通信鏈路之外的隱性前提上設(shè)備枚舉不到、指令格式不對、電壓設(shè)了但輸出端量不到、老化跑到一半斷連。這套資源就是把 IT3200 這類可編程直流電源從「裸機黑匣子」變成「可被 LabVIEW 調(diào)度的角色」的完整落地方案包含驅(qū)動封裝、SCPI 指令模塊、串口與網(wǎng)絡(luò)參數(shù)配置、讀寫校驗邏輯和可按步復(fù)現(xiàn)的案例工程。適合正在搭電池充放電、老化測試、ATE 校準(zhǔn)臺架的人剛接觸 VISA 的新手和寫過幾個電源控制程序的老手都能從這里找到對應(yīng)層級的細節(jié)。2. 搭通信鏈路從 VISA 驅(qū)動到第一條讀寫指令2.1 物理層與協(xié)議棧串口、USB、LAN 怎么選IT3200 這類可編程直流電源常見的遠程控制接口有三種RS232 串口、USB、LAN網(wǎng)絡(luò)口。選哪個不是看哪根線順手而是看你的臺架環(huán)境。單機調(diào)試或者測試架離電腦不超過兩米我一般直接走 USB即插即用、枚舉穩(wěn)定、速度夠用老臺架上的設(shè)備很多只留了 RS232 口那就走串口注意線序和波特率如果是把好幾臺電源組到一個老化柜里統(tǒng)一調(diào)度LAN 才合適VISA 層會用TCPIP0前綴去尋址。通信協(xié)議棧上VISA 負責(zé)把底層數(shù)據(jù)搬進搬出SCPI 是應(yīng)用層的指令語言。也就是說你在 LabVIEW 里真正要寫的是VOLT 5.0、OUTP ON這類文本指令至于這些字節(jié)怎么編碼、校驗、分層打包VISA 驅(qū)動全都替你做了。這也帶來一個最常見的誤區(qū)很多人以為設(shè)備「連不上」是 LabVIEW 代碼問題實際上是 VISA 驅(qū)動沒裝對或者物理連接壓根沒起來。串口參數(shù)要提前核實。IT3200 的 RS232 默認參數(shù)常見是波特率 9600、數(shù)據(jù)位 8、停止位 1、無校驗、無流控但老設(shè)備批次不同可能被改過我不會賭默認值開機后用前面板菜單或者連接軟件讀一下當(dāng)前串口配置。USB 接口相對省心但缺點和優(yōu)點在同一個地方它借用 VISA 的 USB 設(shè)備尋址協(xié)議識別不到時大概率要回到驅(qū)動層排查而不是改代碼。一個容易忽略的點是線材。串口線分直連線和交叉線USB 線有只供電不通數(shù)據(jù)的劣質(zhì)線這兩類「看著插上了、實際上沒通」的情況在測試現(xiàn)場出現(xiàn)的頻率高得離譜。判斷物理鏈路有沒有通別直接開 LabVIEW先用設(shè)備自帶的通信工具或者串口調(diào)試助手發(fā)一條*IDN?能回設(shè)備標(biāo)識再進 LabVIEW 寫邏輯也不遲。2.2 裝機清單與 VISA 資源名確認在 LabVIEW 里寫任何 VISA 代碼之前先把環(huán)境清單過一遍。VISA 運行時庫是必須的它的作用是提供 VISA 函數(shù)庫給 LabVIEW 調(diào)用然后是 VISA 驅(qū)動針對 IT3200 這類設(shè)備廠家一般會提供對應(yīng)的驅(qū)動安裝包裝完后設(shè)備才能在 VISA 層被枚舉出來。這一步漏了后面寫什么代碼都是白搭。裝完驅(qū)動打開設(shè)備管理器確認設(shè)備出現(xiàn)在對應(yīng)端口下。串口設(shè)備常見的名字是USB-SERIAL CH340或者COM3這種USB 儀器設(shè)備會多一個獨立的 USB 儀器條目。接著打開 VISA 交互控制軟件或者設(shè)備配套的資源管理工具看設(shè)備被枚舉成什么樣的 VISA 資源名這一步最關(guān)鍵。資源名是整個 VISA 通信的尋址地址寫錯一個字符LabVIEW 的 VISA Open 就會報資源未找到。實際的 VISA 資源名長成下面這樣不同接口類型有各自的前綴# 串口設(shè)備的 VISA 資源名示例 ASRL1::INSTR # 對應(yīng) COM1 串口 ASRL3::INSTR # 對應(yīng) COM3 串口 # USB 設(shè)備的 VISA 資源名示例 USB0::0x1AB1::0x0E11::IT3200::INSTR # 廠商ID::產(chǎn)品ID::序列號 # LAN 設(shè)備的 VISA 資源名示例 TCPIP0::192.168.1.100::inst0::INSTR # IP 地址 端口映射拿到資源名后我習(xí)慣先在 LabVIEW 里放一個 VISA 會話控件右鍵選擇「瀏覽」看能否在下拉列表里直接看到目標(biāo)設(shè)備。能看到說明驅(qū)動棧是通的看不到就別往下寫代碼了回頭查驅(qū)動和線纜。這段檢查流程看起來瑣碎實際上能擋掉一半以上的「程序連不上設(shè)備」問題。我見過不少同行連設(shè)備型號都還沒被枚舉出來就在那反復(fù)改 VISA Open 的等待時間這屬于方向性錯誤。資源名確認這一步是整個項目的地基地基沒打好后面每一層都會出詭異問題。2.3 最小可通信程序先讓電源回一句「Hello」鏈路確認通的就可以寫 LabVIEW 代碼了。最小可通信程序的邏輯是所有 VISA 控制程序的原型打開會話、寫入查詢指令、讀取響應(yīng)、關(guān)閉會話。這里先貼一個與 LabVIEW 框圖邏輯等價的偽代碼描述方便看清楚每一步在做什么# 等價于 LabVIEW 框圖中的節(jié)點序列VISA Open - VISA Write - VISA Read - VISA Close visa_resource USB0::0x1AB1::0x0E11::IT3200::INSTR # 從資源瀏覽器復(fù)制 # 1. VISA Open建立會話返回句柄超時設(shè)置默認 2000ms handle visa_open(visa_resource) # 2. 寫入 *IDN? 查詢指令注意末尾的換行終止符 visa_write(handle, *IDN?\n) # 3. 讀取設(shè)備的響應(yīng)字符串例如返回設(shè)備型號、固件版本 response visa_read(handle) # 4. 關(guān)閉會話釋放句柄 visa_close(handle)*IDN?是 SCPI 標(biāo)準(zhǔn)里的設(shè)備標(biāo)識查詢指令幾乎所有可編程儀器都會實現(xiàn)它。指令發(fā)出去后設(shè)備返回一串 ASCII 字符通常包含廠商、型號、序列號、固件版本。把這串字符讀回來就等于聽到設(shè)備「說了一句話」證明從 LabVIEW 到設(shè)備再到返回的整條鏈路已經(jīng)打通。LabVIEW 里的具體連線順序是VISA 資源名控件作為輸入接給 VISA Open 的 VISA resource 端子VISA Open 輸出出會話句柄VISA Write 的 write buffer 端子接一個字符串常量內(nèi)容填*IDN?\n注意字符串常量的顯示格式要切到「\ 代碼顯示」確保\n是真正的換行而不是兩個字符VISA Read 的 byte count 端子設(shè)一個足夠大的數(shù)比如 256避免響應(yīng)太長被截斷最后 VISA Close 接在讀取節(jié)點之后。整條鏈路用同一個錯誤簇串聯(lián)任何一個環(huán)節(jié)報錯都能在錯誤輸出上看到。超時參數(shù)值得單獨說一下。VISA 的默認超時是 2000 毫秒對*IDN?這種秒回的查詢足夠。但如果后面做老化測試動輒幾分鐘的連續(xù)讀取建議把超時放在循環(huán)外面統(tǒng)一配置而不是每個 VISA 節(jié)點單獨設(shè)方便整體調(diào)整。到這里最小通信程序跑通電源已經(jīng)能被 LabVIEW 控制。接下來就該進入指令封裝階段把零散的 VISA 寫讀調(diào)用變成一個一個可復(fù)用模塊。3. SCPI 指令封裝實戰(zhàn)參數(shù)表、輸出使能、讀回校驗3.1 核心 SCPI 指令集寫電壓、寫電流、開關(guān)輸出、讀回IT3200 雖然面板操作直接但遠程控制完全依賴 SCPI 指令。用得最多的指令集其實很小下面是這套資源里最核心的指令清單我標(biāo)注了每條的簡寫格式和用途*IDN? # 設(shè)備標(biāo)識查詢鏈路驗證首選 VOLT 5.0 # 設(shè)定輸出電壓 5.0V可寫作 VOLT:LEV 5.0 VOLT? # 查詢當(dāng)前設(shè)定的電壓值 CURR 0.5 # 設(shè)定輸出電流限值 0.5A可寫作 CURR:LEV 0.5 CURR? # 查詢當(dāng)前設(shè)定的電流限值 OUTP ON # 使能輸出通道電壓電流隨之真正輸出 OUTP OFF # 關(guān)閉輸出通道 OUTP? # 查詢輸出通道狀態(tài)1 或 0 MEAS:VOLT? # 讀取實際輸出電壓值 MEAS:CURR? # 讀取實際輸出電流值這組指令里最容易翻車的是這一條OUTP ON。很多新手把VOLT 5.0發(fā)出去就去量輸出端結(jié)果量不到電壓以為程序有問題。實際上可編程電源為了安全默認輸出通道是關(guān)閉的——你設(shè)定了電壓目標(biāo)值但功率級沒有導(dǎo)通所以輸出端永遠是 0V。這是一個在原理上就繞不開的步驟設(shè)定電壓、設(shè)定電流限值、打開輸出通道三件事必須按順序全部執(zhí)行電壓才會真正出現(xiàn)在端子上。再解釋一下指令格式的細節(jié)。SCPI 指令和參數(shù)之間用一個空格分隔指令內(nèi)部的關(guān)鍵字用冒號分隔命令行以換行符\n有些設(shè)備是\r\n作為終止符。IT3200 對終止符不敏感的情況我見過但個別老固件對\r\n和\n區(qū)分嚴格所以這組指令統(tǒng)一用了\n并且建議每個 VI 內(nèi)部都保持同一種終止符風(fēng)格不要混用。設(shè)置順序也有講究。我一般按這個順序執(zhí)行先設(shè)電壓再設(shè)電流限值最后開輸出。電流限值這步經(jīng)常被漏掉漏掉的后果是設(shè)備默認限值可能很大負載一旦短路或啟動電流過大電源會進入保護狀態(tài)表現(xiàn)為輸出電壓瞬間掉零或者直接報錯。把限值設(shè)置放到電壓之后、輸出使能之前是控制程序的基本安全習(xí)慣。3.2 模塊化封裝 VI把單條指令變成可復(fù)用函數(shù)裸寫 VISA Write 能跑通但隨著工程變大每個測試序列都重復(fù)寫「拼接字符串、寫指令、讀回、判錯」這套模板代碼會變得又臭又亂。這時候就應(yīng)該做封裝。這套資源里我把控制邏輯收斂成了三個核心 VISET_OUTPUT.vi負責(zé)設(shè)定電壓電流并控制輸出開關(guān)READ_MEASURE.vi負責(zé)讀回實際電壓電流POWER_ON/OFF.vi做輸出通道的單獨開關(guān)。每一個都帶標(biāo)準(zhǔn)的錯誤簇輸入輸出方便串聯(lián)。SET_OUTPUT.vi的內(nèi)部邏輯用偽代碼描述是這樣# SET_OUTPUT.vi把電壓、電流、開關(guān)狀態(tài)一次性寫入電源 # 輸入電壓float、電流限值float、輸出開關(guān)bool、VISA句柄 # 輸出VISA句柄供下一級節(jié)點使用、錯誤簇 # 1. 拼接指令字符串電壓數(shù)值用 %.3f 格式保留三位小數(shù) visa_write(handle, VOLT 格式化(電壓) \n) visa_write(handle, CURR 格式化(電流) \n) # 2. 輸出開關(guān)False 發(fā) OUTP OFFTrue 發(fā) OUTP ON if 輸出開關(guān): visa_write(handle, OUTP ON\n) else: visa_write(handle, OUTP OFF\n) # 3. 等電源內(nèi)部繼電器穩(wěn)定短延時 20ms 再返回 delay(20)為什么要保留三位小數(shù)IT3200 這類電源的電壓分辨率一般在 1mV 量級三位小數(shù)是安全上限再多的小數(shù)位只會增加無意義的字符串長度。格式化字符串在 LabVIEW 里用Format Into String節(jié)點格式串寫%.3f即可。延時 20ms 這個參數(shù)我額外說明一下。電源接到OUTP ON指令后內(nèi)部繼電器需要一點時間吸合延時太短緊接著立刻發(fā)讀回指令會讀到過渡態(tài)數(shù)值延時太長又拖慢測試節(jié)奏。20ms 是折中值如果你發(fā)現(xiàn)讀回值不穩(wěn)定優(yōu)先把它拉到 100ms 試一組數(shù)據(jù)別一上來就改業(yè)務(wù)邏輯。封裝完這三個 VI主程序里的控制流程就從「一長串 VISA 節(jié)點」變成了「兩三個功能明確的模塊」可讀性和可維護性都上來一個檔次。后面接測試序列時你只需要關(guān)心測試邏輯不用再管每個指令的字符串拼得對不對。3.3 讀回校驗別信面板要以表讀數(shù)為準(zhǔn)很多臺架程序只做「下發(fā)指令」不做「讀回校驗」這其實是把雙通道那臺電源當(dāng)成了單向輸出設(shè)備用。實際測試中電源面板顯示的值和真實輸出值之間是有偏差的尤其是負載電流上去之后線損會拉低負載端的實際電壓。遠程程序如果要記錄的精確數(shù)據(jù)必須用MEAS:VOLT?和MEAS:CURR?讀回實測值。讀回校驗的邏輯核心是寫查詢指令、讀 ASCII 字符串、把字符串解析成浮點數(shù)、和設(shè)定值及上下限比對。偽代碼如下# READ_MEASURE.vi讀回一路實際測量值并轉(zhuǎn)為浮點數(shù) # 輸入VISA句柄、測量類型電壓或電流 # 輸出測量值float、單位字符串、錯誤簇 # 1. 根據(jù)測量類型選擇指令 if 測量類型 電壓: visa_write(handle, MEAS:VOLT?\n) else: visa_write(handle, MEAS:CURR?\n) # 2. 讀回原始字符串例如 5.001 raw visa_read(handle) # 3. 去掉首尾空白字符再轉(zhuǎn)成浮點數(shù) value 字符串轉(zhuǎn)浮點數(shù)(raw.strip()) # 4. 解析失敗時返回特殊值 -999便于上層識別 if 解析失敗: value -999LabVIEW 里字符串轉(zhuǎn)浮點數(shù)有兩個常用節(jié)點Fract/Exp String To Number和Scan From String。前者適合簡單場景但遇到帶單位后綴的字符串會解析失敗后者支持格式匹配容錯更好。我一般用后者格式串寫%f這樣即使設(shè)備返回的是5.001、5.000e0這類格式都能正確轉(zhuǎn)出來。讀回值異常時最值得先查三點第一指令后的終止符是否和寫指令時一致不一致會導(dǎo)致設(shè)備認為指令沒結(jié)束、不返回響應(yīng)第二讀緩沖區(qū)分量是否給夠返回的字符串如果超過緩沖區(qū)大小只讀回一部分解析自然出錯第三是否在繼電器穩(wěn)定前就發(fā)了查詢指令過渡態(tài)數(shù)值會導(dǎo)致讀到的電壓忽高忽低。絕大部分讀回異常都落在這三個點上把這三點排查掉再考慮設(shè)備本身的問題。4. 避坑清單設(shè)備枚舉、輸出無效、斷連、讀值錯亂4.1 枚舉不到設(shè)備VISA 資源名與驅(qū)動?,F(xiàn)象LabVIEW 的 VISA 資源名下拉列表里看不到 IT3200或者運行時 VISA Open 報資源未找到錯誤代碼是固定的那幾條資源類錯誤。設(shè)備前面板顯示正常用計算機上的串口調(diào)試助手卻能正常收發(fā)。原因最常見的是驅(qū)動棧不完整。設(shè)備管理器和底層工具用的是不同的驅(qū)動通道調(diào)試助手能通只能證明操作系統(tǒng)層面的 COM 口是好的VISA 層有沒有正確綁定到該設(shè)備是另一回事。另一個高頻原因是 USB 口的設(shè)備插拔后被系統(tǒng)重新分配了資源名程序里寫死的ASRL3::INSTR實際對應(yīng)的是另一個物理口。解決先打開 VISA 資源管理工具刷新看設(shè)備在不在。不在重裝廠家提供的 VISA 驅(qū)動裝完務(wù)必關(guān)機重新插拔設(shè)備。在直接把列表里的資源名復(fù)制出來替換代碼里的常量不要手抄資源名里的::和數(shù)字長得很像手抄容易抄錯。如果是串口設(shè)備順帶檢查設(shè)備管理器里 COM 號是不是被系統(tǒng)改過可以用「修改 COM 端口號」把它固定成一個專用編號。從那以后我每次到一個新臺架上調(diào)試第一件事就是打開資源管理工具驗證資源名而不是直接改程序。4.2 電壓設(shè)了但輸出端量不到輸出通道沒有使能現(xiàn)象程序執(zhí)行完日志顯示VOLT 5.0已下發(fā)面板也顯示設(shè)定電壓 5.0V但用萬用表去測輸出端電壓始終是 0V。程序沒有任何報錯。原因漏發(fā)了OUTP ON。設(shè)定電壓和輸出使能是兩回事設(shè)定電壓只是告訴電源「目標(biāo)值是多少」輸出端是否輸出取決于輸出通道狀態(tài)。很多設(shè)備出廠默認輸出通道關(guān)閉這是安全設(shè)計不是故障。還有一類情況是程序邏輯里確實發(fā)了OUTP ON但發(fā)指令的 VISA 節(jié)點連在錯誤分支上條件不滿足時被跳過了。解決在所有設(shè)置指令之后、讀回之前強制加一條OUTP ON并用OUTP?查詢指令確認通道狀態(tài)返回 1。在測試邏輯里把「輸出使能」做成一個可觀測的狀態(tài)量而不是靠程序順序隱式保證。程序結(jié)束前也別忘了OUTP OFF不然測試跑完負載還掛著電壓晚上人不在現(xiàn)場容易出事。這條是血淚經(jīng)驗一次整晚老化測試因為漏了關(guān)閉輸出第二天負載端被持續(xù)拉了一個晚上。4.3 老化測試中途斷連超時與終止符才是主謀現(xiàn)象單獨測一條指令沒問題程序放到老化測試循環(huán)里跑十幾分鐘到一兩個小時后某次讀寫開始報 VISA 超時錯誤錯誤簇把上層流程直接打斷測試被迫停止。重新插拔設(shè)備后又正常。原因兩個最常見的誘因。第一循環(huán)體內(nèi) VISA Read 超時設(shè)置太短老化測試里設(shè)備響應(yīng)可能因為內(nèi)部保護動作而變慢單次讀超過超時閾值就報錯第二指令的終止符和 VISA 會話屬性不一致。不少設(shè)備固件對終止符的處理是「收到\n開始處理指令處理完再返回」如果你發(fā)送的終止符和接收的終止符設(shè)置不匹配程序會一直等到超時。解決把超時設(shè)置從默認 2000ms 適當(dāng)放大到 5000ms 或 8000ms并且放在循環(huán)外統(tǒng)一設(shè)置不要在循環(huán)內(nèi)反復(fù)寫。終止符統(tǒng)一用\n并在 VISA 配置串口屬性時把「終止符」屬性對應(yīng)配置確保讀寫兩端一致。循環(huán)內(nèi)每次讀寫完成都讓錯誤簇走一遍檢查節(jié)點遇到可恢復(fù)錯誤先嘗試重發(fā)當(dāng)前指令重試三次仍失敗再向上拋出這個機制能讓老化測試的容錯率高一個量級。4.4 讀回值錯亂浮點格式與 ASCII 解析現(xiàn)象MEAS:VOLT?讀回來的字符串不是預(yù)期里的5.000而是帶了一長串小數(shù)、科學(xué)計數(shù)法或者直接是一串亂碼、空字符串。解析成浮點數(shù)后數(shù)值和面板顯示對不上。原因IT3200 這類設(shè)備默認返回 ASCII 格式但有些型號固件允許切換成二進制傳輸格式如果之前被別的主機改過配置查詢回來的就不是標(biāo)準(zhǔn) ASCII 數(shù)字串。另外設(shè)備返回的字符串可能帶單位后綴或者回車換行符LabVIEW 的字符串轉(zhuǎn)浮點數(shù)節(jié)點對不可見字符非常敏感一個\r沒處理掉就會解析失敗。解決讀回后先做字符串預(yù)處理用Trim Whitespace去掉首尾空白和不可見字符再調(diào)用Scan From String按%f格式解析。如果設(shè)備支持格式查詢指令先用對應(yīng)的查詢命令確認當(dāng)前返回格式是 ASCII。讀到科學(xué)計數(shù)法字符串不是壞事5.000e0解析出來仍然是 5.0關(guān)鍵是解析函數(shù)要支持%f的完整浮點格式。解析失敗時返回一個特殊值比如 -999而不是拋異常讓上層邏輯能區(qū)分「設(shè)備沒響應(yīng)」和「響應(yīng)了但格式不對」兩種情況。5. 進階思路用狀態(tài)機把「設(shè)置-讀取-判定」串成測試序列單條指令跑通是起點實際做老化測試、電池充放電循環(huán)、ATE 產(chǎn)測時需要的是一整段「設(shè)置 → 動作 → 延時 → 讀取 → 判定」的序列并且得在異常時能安全退出。這套資源的進階用法就是把它組織成一個簡單的有限狀態(tài)機把每類操作離散成獨立狀態(tài)狀態(tài)之間只在條件滿足時遷移。一個典型的序列配置表長這樣狀態(tài)動作參數(shù)示例延時判定條件SETUP設(shè)電壓電流關(guān)閉輸出12.0V / 1.0A20ms無ACT打開輸出并保持OUTP ON5000ms無READ讀回實際電壓電流MEAS:VOLT? / MEAS:CURR?200ms讀數(shù)在上下限內(nèi)JUDGE判定并記錄上限 12.1V下限 11.9V無超限則標(biāo)記 FAILPASS/FAIL處理結(jié)果進入下一步或復(fù)位無無無條件狀態(tài)機實現(xiàn)的核心是讓每個狀態(tài)只做一件事并且每個狀態(tài)都有明確的退出條件。偽代碼如下# 序列狀態(tài)機主循環(huán)等價于 LabVIEW 條件結(jié)構(gòu) 移位寄存器 state SETUP while running: if state SETUP: set_output(電壓12.0, 電流1.0, 開關(guān)False) # 先配置不輸出 state ACT elif state ACT: set_output(電壓12.0, 電流1.0, 開關(guān)True) # 打開輸出通道 delay(5000) # 保持時間 state READ elif state READ: v read_value(MEAS:VOLT?) # 讀回實際電壓 i read_value(MEAS:CURR?) # 讀回實際電流 state JUDGE elif state JUDGE: if (下限 v 上限) and (i 報警限): state PASS # 本次循環(huán)合格 else: record_failure(v, i) # 記錄失敗點 state FAULT # 進入異常分支 # PASS/FAULT 狀態(tài)都要做的收尾動作 # 1. 強制 OUTP OFF保證異常時負載不帶電 # 2. 記錄當(dāng)前測試點編號到日志 # 3. 根據(jù)是否最后一輪決定跳轉(zhuǎn)下一步或退出這個框架有幾個明顯的好處。第一新增一個測試步驟就加一個狀態(tài)不影響已有邏輯第二任何狀態(tài)下讀回超時或判定異常都能統(tǒng)一落到 FAULT 分支把輸出通道關(guān)掉再記錄現(xiàn)場數(shù)據(jù)第三狀態(tài)遷移配合移位寄存器實現(xiàn)天然適合 LabVIEW 的條件結(jié)構(gòu)加循環(huán)寫一幀式編程。最后的收尾動作我是強迫自己寫進狀態(tài)機的「任何分支退出前都必須執(zhí)行OUTP OFF 關(guān)閉 VISA 句柄」。一次整晚老化測試里就是因為異常分支直接跳過了關(guān)閉輸出負載掛著一整晚的電壓第二天去臺架發(fā)現(xiàn)負載已經(jīng)報廢從那以后我每次做完一個電源控制 VI都會把「結(jié)束必斷輸出、異常必記錄」這個動作檢查一遍再打包這條規(guī)則也寫進了這套資源的模板里。希望你拿過去用之前先把這條安全習(xí)慣在工程里立住再往上加業(yè)務(wù)邏輯。希望幫到你。本文還有配套的精品資源點擊獲取