古い Tektronix 11801B サンプリング オシロスコープを照会しています。何かをクエリすると、常に結果が返され、あるデバイスでは「ÿ」、別のデバイスでは「ÿ..」の無限の文字列が返されます(両方とも同じモデル)。そのため、クエリを実行するときに「ÿ」を押す前に、すべてを読むことにしました。
私が試した2つの方法は次のとおりです。
# 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 を返し、無限になります。ただし、コマンドを1行ずつ実行すると、すべてが正常に機能します。