我正在查詢舊的泰克11801B採樣示波器。當我查詢任何東西時,它總是返回我的結果,然後是一個設備上的「ÿ」或另一個設備上的「ÿ..」(同一型號)的無限串。所以,我決定在查詢之前,我會先閱讀所有內容,然後再打「ÿ」。如何在TCL中的字符串中檢測「ÿ」?
這裏有兩種方法我都試過:
# Issue command
puts ${ChannelId} ${Command}
# Set loop variables
set Result [list]
set Byte [read ${ChannelId} 1]
set BadByte ÿ
# Loop until BadByte is found
while {![string equal -nocase ${Byte} ${BadByte}]} {
# Append good bytes to a list
lappend Result ${Byte}
# Read next byte
set Byte ::visa::read ${ChannelId} 1]
}
# Join and return result list
return [join ${Result}]
和:
# Set loop variable
set Result [list]
# Read channel 1 byte at a time until ÿ is found
while {![string equal -nocase [set Character [read ${ChannelId} 1]] "ÿ"]} {
# Append non ÿ characters to a list
lappend Result ${Character}
}
# Join the result and return it
return [join ${Result}]
在這兩種情況下,我的循環只是始終返回true,變得無限大。但是,如果我一行一行地運行命令,希望一切正常。
您是否想過使用'expect'與Tektronix交談?它應該是這種應用的理想選擇。 – 2013-03-18 16:15:53
這通常是一個0xff,也許可以正確配置你的頻道(例如,用'fconfigure'設置一些翻譯/編碼。 – schlenk 2013-03-18 17:10:25
@lanam我確實期待了一點,聽起來很好吃,但看起來不再支持並且windows版本在linux版本之前已經放棄了一段時間,所以我認爲它不是我們的應用程序的明智選擇。謝謝你的回覆,雖然 – Chrono 2013-03-18 18:08:52