【发布时间】:2015-01-28 20:48:01
【问题描述】:
我一直致力于使用 TCL 自动化硬件测试,其中硬件连接到串行端口。当前脚本可以通过第一次连接串口,最后断开连接。但是,除非关闭并重新打开应用程序,否则它无法再次重新连接到串行端口。 连接串口的代码是:
if { [catch {spawn -open [open $port r+] } results] } {
puts $results
puts "Could not connect to port.\n"
return -1 }
成功返回语句为return $spawn_id
应该关闭与串口的连接的代码是:
if {[catch {close -i $handle} results]} {
puts "$results"
puts "Failed to Close Session $handle\n\r"
return -1 }
#waits for handle to be properly closed
exp_wait
其中 $handle 是打开过程返回的 spawn_id。
我写了一个简短的测试脚本来演示我是如何尝试使用它的:
source console.tcl
puts "available COM ports are: [console::availableSerial]"
set handle [console::openSession COM6 BARE>]
if {[catch {console::closeSession $handle} results]} {
puts $results }
if {[catch {console::openSession COM6 BARE>} results]} {
puts $results }
其中 'console::' 是相关打开和关闭过程的命名空间
我尝试过使用一些 fconfigure 参数,例如启用和禁用阻塞,但无济于事。
TCL 显示的错误信息是 `couldn't open serial "COM6": permission denied' ,说明端口没有正常关闭。 “探索期望”一书没有太多具体信息,所以我希望这里的人能够提供一些关于我做错了什么的见解。我使用的是 32 位 ActiveState ActiveTCL 8.6.3.1,我的 shell 是 Tclsh36
我们将不胜感激任何反馈。谢谢。
【问题讨论】:
-
肯定的解决方法是不关闭它? (我怀疑问题在于需要执行
wait或类似的操作,但我真的不确定。) -
如果手动打开连接而不是脚本,那么你将如何关闭连接?
-
@DonalFellows 保持串口打开的问题是在脚本运行之间,连接到串口的外围设备发生了变化。我也在关闭端口后使用
after 4000或其他等待时间,但我仍然得到相同的结果。抱歉,我可能应该在问题中包含该信息。感谢您的意见。 -
@Dinesh 手动打开串口时,我使用了
set handle [open $port]'handle' 的值然后设置为类似于'file22d6c78' 的值。为了结束这个,我打电话给close $handle。我曾尝试将其用作测试方法,但遗憾的是结果相同。
标签: serial-port tcl expect permission-denied reconnect