Posted to tcl by schelte at Tue Sep 14 22:57:53 GMT 2010view raw
- proc response {fd} {
- fileevent $fd readable [info coroutine]
- puts "entering response"
- while {![eof $fd]} {
- readplc $fd 2
- }
- }
- proc readplc {fd len} {
- puts "entering readplc fd=$fd len=$len"
- set str [read $fd $len]
- while {[string length $str] < $len} {
- yield
- set data [read $fd [expr {$len - [string length $str]}]]
- puts [tcl::unsupported::representation $str]
- puts [tcl::unsupported::representation $data]
- ; Code hangs here with 100% cpu use
- append str $data
- puts "done"
- }
- return $str
- }
- proc plcopen {} {
- global plcfh
- if {[catch {open /dev/ttyS0 r+} plcfh]} {return 0}
- fconfigure $plcfh -mode 57600,n,8,1 -translation binary -blocking 0
- return 1
- }
- if {[plcopen]} {
- coroutine reader response $plcfh
- }
- vwait forever