Posted to tcl by nikos at Mon May 13 18:50:40 GMT 2013view raw
- proc send_msg1 {str addr port} {
- global fh
- ###open serial port
- catch_fh $port
- #set fh [open $port "RDWR"]
- fconfigure $fh -mode 9600,e,7,2 -handshake rtscts -buffering none -blocking 0 -translation cr
- set sum "[chksum [join @$addr$str]]"
- set msg "[join @$addr$str$sum*]"
- #channel translation is "cr", so this appended to msg automagically
- puts "msg was: $msg"
- puts $fh "$msg"
- ##set callback when port becomes readable, e.g plc responds...
- fileevent $fh readable [list read_handler $fh]
- }
- proc catch_fh {port} {
- ###don't want fh in local scope so it can be closed manually
- ###in an uncaught error
- global fh
- if {[list [catch {open $port "RDWR"} fh]]} {
- puts "Could not open $port \n$fh"
- return
- } else {
- #puts "$::fh"
- puts "opened $port"
- puts "handle is: $fh"
- #close $fh
- }
- }
- proc send_msg1 {str addr port} {
- global fh
- ###open serial port
- catch_fh $port
- #set fh [open $port "RDWR"]
- fconfigure $fh -mode 9600,e,7,2 -handshake rtscts -buffering none -blocking 0 -translation cr
- set sum "[chksum [join @$addr$str]]"
- set msg "[join @$addr$str$sum*]"
- #channel translation is "cr", so this appended to msg automagically
- puts "msg was: $msg"
- puts $fh "$msg"
- ##set callback when port becomes readable, e.g plc responds...
- fileevent $fh readable [list read_handler $fh]
- }
- proc read_handler {fh} {
- set response "[read $fh]"
- puts "response was $response"
- set endcode "[string range $response 5 6]"
- puts "$endcode"
- switch $endcode {
- 00 {
- # no error
- close $fh
- return
- }
- default {
- puts "There was an error in the command: $msg"
- close $fh
- return
- }
- }
- }