Serial port tcl和数组中应有布尔值错误

Serial port tcl和数组中应有布尔值错误,serial-port,tcl,dts,Serial Port,Tcl,Dts,我正在慢慢地浏览serialport tcl应用程序,但遇到了另一面墙 我想创建一个布尔值数组,在for循环中进行迭代 在for循环中,DTR将发送串行输出 下面我有以下代码: set rs232 [open COM3: r] fconfigure $rs232 -ttycontrol {DTR 0} array set values { 0 0 1 1 } set n [array size values] set x 0 for {set a 0} {$a <=15} {

我正在慢慢地浏览serialport tcl应用程序,但遇到了另一面墙

我想创建一个布尔值数组,在for循环中进行迭代

在for循环中,DTR将发送串行输出

下面我有以下代码:

set rs232 [open COM3: r]
fconfigure $rs232 -ttycontrol {DTR 0}

array set values {
0   0
1   1
}

set n [array size values]

set x 0
for {set a 0} {$a <=15} {incr a} {
fconfigure $rs232 -ttycontrol {DTR $values(0)}
wait 1000
fconfigure $rs232 -ttycontrol {DTR $values(1)}
wait 1000
}
谁能告诉我这是为什么?我该如何修复它?

此调用:

fconfigure $rs232 -ttycontrol {DTR $values(0)}
-ttycontrol
的值“DTR$values(0)”传递给
fconfigure
。调用

fconfigure $rs232 -ttycontrol [list DTR $values(0)]
通过“DTR0”

大括号防止替换变量,但调用
list
会强制执行该变量

或者,您可以使用以下选项之一:

fconfigure $rs232 -ttycontrol "DTR $values(0)"
fconfigure $rs232 -ttycontrol [subst {DTR $values(0)}]
此调用:

fconfigure $rs232 -ttycontrol {DTR $values(0)}
-ttycontrol
的值“DTR$values(0)”传递给
fconfigure
。调用

fconfigure $rs232 -ttycontrol [list DTR $values(0)]
通过“DTR0”

大括号防止替换变量,但调用
list
会强制执行该变量

或者,您可以使用以下选项之一:

fconfigure $rs232 -ttycontrol "DTR $values(0)"
fconfigure $rs232 -ttycontrol [subst {DTR $values(0)}]

谢谢你,彼得,非常感谢。我已经尝试添加列表,现在它可以工作了。我现在在for循环中尝试,并用I替换索引值,但它返回时无法读取“SHCP(I)”:数组中没有这样的元素。代码是:[code]对于{set i 0}{iYou需要学习Tcl语法的基础知识-看看@KennyBarber:
$SHCP(i)
SHCP
数组的“i”成员的值。
$SHCP($i)
是由“i”值命名的数组的成员。一定要看一看上面提到的教程@ColinMacLeod。科林,我已经做了for循环,通过I循环。我现在有另一个问题,所以我会提出一个新问题。感谢Peter非常感谢。我已经尝试添加列表,现在它可以工作了。我现在正在for循环中尝试,并用I替换索引值,但它返回时无法实现d“SHCP(i)”:数组中没有这样的元素。代码是:{set i 0}{i你需要学习Tcl语法的基础知识-看看@KennyBarber:
$SHCP(i)
SHCP
数组的“i”成员的值。
$SHCP($i)
是以“i”值命名的数组的成员。请看一看上面提到的教程@ColinMacLeod。科林,我已经做了for循环,通过I循环。我现在有另一个问题,所以我将提出一个新问题,这似乎是一种笨拙的编码“真”和“假”的方法。有效的Tcl布尔值在手册页上拼写出来——假是0、“假”、“否”或“关”中的任意一个;真是1、“真”中的任意一个,“是”或“开”。好的,格伦干杯,我看了TCL_GetBoolean页面,但它没有显示一个示例,我不知道如何键入interp、src、boolPtr参数。你没有示例,是吗?
设置值“false”;如果{$value}那么{put ok}或者{put No}
——我的第一个评论主要是
$value(0)
是一种非常冗长的写入
0的方法,这似乎是一种笨拙的编码“真”和“假”的方法。有效的Tcl布尔值在手册页上拼写出来——假是0、“假”、“否”或“关”中的任意一个;真是1、“真”、“是”或“开”中的任意一个“.ok干杯,Glenn,我看过TCL_GetBoolean页面,但没有显示示例我不知道interp、src、boolPtr参数是如何键入的。你没有示例吗?
设置值为“false”;如果{$value}那么{put ok}或者{put No}
——我的第一条评论主要是,
$value(0)
是一种非常冗长的编写
0