하드웨어가 직렬 포트에 연결되어있는 TCL을 사용하여 하드웨어 테스트 자동화를 위해 노력했습니다. 현재 스크립트는 처음부터 직렬 포트에 연결할 수 있으며 끝에 연결을 끊을 수 있습니다. 그러나 응용 프로그램을 닫았다가 다시 열지 않으면 직렬 포트에 다시 연결할 수 없습니다. 직렬 포트에 연결하는 코드는 다음과 같습니다 return $spawn_id
이전에 동일한 TCL 스크립트에서 열린 직렬 포트에 다시 연결할 수 없습니다.
직렬 포트에 연결을 종료하도록되어 코드 인 성공적인 복귀 문
if { [catch {spawn -open [open $port r+] } results] } {
puts $results
puts "Could not connect to port.\n"
return -1 }
것은 :
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 }
블로킹 활성화 및 비활성화와 같은 일부 fconfigure 매개 변수를 가지고 놀았지만 아무 소용이 없었습니다.
TCL에서 표시되는 오류 메시지는`직렬 포트 "COM6": permission denied '을 열 수 없습니다. 포트가 제대로 닫히지 않았 음을 나타냅니다. 'Exploring Expect'라는 책에는 여기에 관련된 정보가 많지 않으므로 여기있는 사람이 내가 잘못하고있는 것에 대해 통찰력을 줄 수 있기를 바랍니다. 32 비트 ActiveState ActiveTCL 8.6.3.1을 사용하고 있으며 쉘은 Tclsh36입니다.
모든 의견을 환영하겠습니다. 감사.
와
exp_wait
을 교체했다? (문제가 '대기'또는 그와 비슷한 것을 할 필요가 있다고 생각하지만, 나는 확신 할 수 없다.) –스크립트 대신 수동으로 연결을 열면 어떻게 연결을 닫을 것인가? ? – Dinesh
@DonalFellows 직렬 포트를 열어 두는 문제는 스크립트 실행과 직렬 포트에 연결된 주변 장치가 변경된다는 것입니다. 나는 또한 포트를 닫은 후'4000 년 이후 '또는 다른 대기 시간을 사용하여 게임을했지만 여전히 동일한 결과를 얻고 있습니다. 죄송 합니다만, 질문에 그 정보를 포함시켜야합니다. 그래도 입력 주셔서 감사합니다. –