目次
前
次
全ソースコード
設計内容をまとめて、ソースコードにすると、以下。
#!/usr/local/bin/wish
. configure -width 350 -height 250
wm title . "Profiler Controller <COSMO Technical Laboratry>"
wm resizable . 0 0
# initialize file name
set theFileName "unknown"
set tFileName $theFileName
set cTimeV 0:00
set cTempV ""
set xexe_temp(P0) 20
set xexe_temp(P1) 120
set xexe_temp(P2) 120
set xexe_temp(P3) 210
set xexe_temp(P4) 210
set xexe_temp(P5) 20
set xexe_time(P0) 0:00
set xexe_time(P1) 1:00
set xexe_time(P2) 2:00
set xexe_time(P3) 3:00
set xexe_time(P4) 4:00
set xexe_time(P5) 5:00
set eflag 0
set elast 0
set ecnt 0
# temperature difference
set xdif ""
# time interval
set tdif ""
# displacement
set ddif ""
# boundary (teparature)
set bdif ""
# path
set cPathV ""
#**************
# define label
#**************
label .lblTTemp -font {{MS ゴシック} 16} -width 16 -text "Temperature"
label .lblTTime -font {{MS ゴシック} 16} -width 16 -text "Time"
label .lblTTempUnit -font {{MS ゴシック} 16} -width 10 -text "celcius(C)"
label .lblTTimeUnit -font {{MS ゴシック} 16} -width 10 -text "(mm:ss)"
label .lblP0 -font {{MS ゴシック} 14 italic} -width 10 -text "P0"
label .lblP1 -font {{MS ゴシック} 14 italic} -width 10 -text "P1"
label .lblP2 -font {{MS ゴシック} 14 italic} -width 10 -text "P2"
label .lblP3 -font {{MS ゴシック} 14 italic} -width 10 -text "P3"
label .lblP4 -font {{MS ゴシック} 14 italic} -width 10 -text "P4"
label .lblP5 -font {{MS ゴシック} 14 italic} -width 10 -text "P5"
label .lblFileName -font {{MS ゴシック} 16} -width 10 -text "FileName"
label .lblHandling -font {{MS ゴシック} 14 bold} -width 10 -text "HANDLING"
label .lblPath -font {{MS ゴシック} 14 bold} -width 10 -text "PATH"
label .lblCTime -font {{MS ゴシック} 14 bold} -width 16 -text "Time"
label .lblCTemp -font {{MS ゴシック} 14 bold} -width 16 -text "Temperature"
label .lblCPathV -font {{MS ゴシック} 14 bold} -width 16 -textvariable cPathV
label .lblCTimeV -font {{MS ゴシック} 14 bold} -width 16 -textvariable cTimeV
label .lblCTempV -font {{MS ゴシック} 14 bold} -width 16 -textvariable cTempV
#**************
# define entry
#**************
entry .edtP0Temp -font {{MS ゴシック} 12 bold} -textvariable xexe_temp(P0) -width 10 -bg cyan
entry .edtP1Temp -font {{MS ゴシック} 12 bold} -textvariable xexe_temp(P1) -width 10 -bg cyan
entry .edtP2Temp -font {{MS ゴシック} 12 bold} -textvariable xexe_temp(P2) -width 10 -bg cyan
entry .edtP3Temp -font {{MS ゴシック} 12 bold} -textvariable xexe_temp(P3) -width 10 -bg cyan
entry .edtP4Temp -font {{MS ゴシック} 12 bold} -textvariable xexe_temp(P4) -width 10 -bg cyan
entry .edtP5Temp -font {{MS ゴシック} 12 bold} -textvariable xexe_temp(P5) -width 10 -bg cyan
entry .edtP0Time -font {{MS ゴシック} 12 bold} -textvariable xexe_time(P0) -width 10 -bg yellow
entry .edtP1Time -font {{MS ゴシック} 12 bold} -textvariable xexe_time(P1) -width 10 -bg yellow
entry .edtP2Time -font {{MS ゴシック} 12 bold} -textvariable xexe_time(P2) -width 10 -bg yellow
entry .edtP3Time -font {{MS ゴシック} 12 bold} -textvariable xexe_time(P3) -width 10 -bg yellow
entry .edtP4Time -font {{MS ゴシック} 12 bold} -textvariable xexe_time(P4) -width 10 -bg yellow
entry .edtP5Time -font {{MS ゴシック} 12 bold} -textvariable xexe_time(P5) -width 10 -bg yellow
entry .edtFileName -font {{MS ゴシック} 14 bold} -width 10 -bg green -textvariable tFileName
#***************
# define button
#***************
button .btnLoad -font {{MS ゴシック} 16 bold} -bg gray -text "Load" -width 10 -command "fload"
button .btnSave -font {{MS ゴシック} 16 bold} -bg gray -text "Save" -width 10 -command "fsave"
button .btnExecute -font {{MS ゴシック} 16 bold} -bg gray -text "Exec" -width 10 -command "fexec"
button .btnCancel -font {{MS ゴシック} 16 bold} -bg gray -text "Cancel" -width 10 -command "fcancel"
button .btnExit -font {{MS ゴシック} 16 bold} -bg gray -text "exit" -width 10 -command "exit"
button .btnClear -font {{MS ゴシック} 16 bold} -bg gray -text "Clear" -width 10 -command "clrParameters"
#***************
# sub procedure
#***************
proc fload {} {
#
global tFileName xexe_temp xexe_time
#
set theFileName [tk_getOpenFile -filetypes {{"profile code file" {.txt}}}]
# show file name
set xtmp [split $theFileName /]
set cFileName [lindex $xtmp end]
set tFileName [lindex [split $cFileName .] 0]
# open
set fd_in [open $theFileName "r"]
# read context
set i 0
while { [gets $fd_in sbuf] >= 0 } {
# separate hash item
set iname [lindex $sbuf 0]
set itemp [lindex $sbuf 1]
set itime [lindex $sbuf end]
# store
set xexe_temp($iname) $itemp
set xexe_time($iname) $itime
# increment
incr i
}
# close
close $fd_in
}
proc fsave {} {
#
global tFileName xexe_temp xexe_time
#
if { $tFileName == "" } {
tk_messageBox -message "not entry File Name" -type ok
} else {
# create file name
set cFileName "$tFileName.txt"
# open
set fd_out [open $cFileName "w"]
# store
for {set i 0} {$i < 6} {incr i} {
# get items
set xfirst [format "P%1d" $i]
set xsecond $xexe_temp($xfirst)
set xthird $xexe_time($xfirst)
# concatenate
set xtmp "$xfirst $xsecond $xthird"
# save
puts $fd_out $xtmp
}
# close
close $fd_out
}
}
proc fexec {} {
#
global eflag elast ecnt xexe_temp xexe_time xdif tdif ddif bdif
# judge
set xp0 [calc_time $xexe_time(P0)]
set xp1 [calc_time $xexe_time(P1)]
set xp2 [calc_time $xexe_time(P2)]
set xp3 [calc_time $xexe_time(P3)]
set xp4 [calc_time $xexe_time(P4)]
set xp5 [calc_time $xexe_time(P5)]
set xflag 0
if { $xp0 > $xp1 } {
incr xflag
}
if { $xp1 > $xp2 } {
incr xflag
}
if { $xp2 > $xp3 } {
incr xflag
}
if { $xp3 > $xp4 } {
incr xflag
}
if { $xp4 > $xp5 } {
incr xflag
}
# message
if { $xflag > 0 } {
tk_messageBox -message "Time incorrect !" -type ok
} else {
# last count
set elast $xp5
# clear counter
set ecnt 0
# calculate (temperature)
set xtmp "$xexe_temp(P0) $xexe_temp(P1)"
set xtmp "$xtmp $xexe_temp(P2) $xexe_temp(P3)"
set xtmp "$xtmp $xexe_temp(P4) $xexe_temp(P5)"
set ytmp "0 $xtmp"
set result ""
for {set i 1} {$i < 6} {incr i} {
set xx [lindex $xtmp $i]
set yy [lindex $ytmp $i]
set r [expr $xx - $yy]
set result "$result $r"
}
set xdif $result
# calculate (time)
set xtmp "$xp0 $xp1 $xp2 $xp3 $xp4 $xp5"
set ytmp "0 $xtmp"
set result ""
for {set i 1} {$i < 6} {incr i} {
set xx [lindex $xtmp $i]
set yy [lindex $ytmp $i]
set r [expr $xx - $yy]
set result "$result $r"
}
set tdif $result
# calculate boundary
set sum 0
set bdif "0"
for {set i 0} {$i < 4} {incr i} {
set xx [lindex $tdif $i]
set sum [expr $sum + $xx]
set bdif "$bdif $sum"
}
# calculate displacement
set result ""
for {set i 0} {$i < 5} {incr i} {
set xx [lindex $xdif $i]
set yy [lindex $tdif $i]
set r [format "%0.1f" [expr ($xx * 1.0) / $yy]]
set result "$result $r"
}
set ddif $result
# enable
set eflag 1
set ecnt 0
# loop
show_event
}
}
proc fcancel {} {
#
global eflag
# desable
set eflag 0
}
proc which_range {x} {
#
global bdif
# separate
set b0 [lindex $bdif 0]
set b1 [lindex $bdif 1]
set b2 [lindex $bdif 2]
set b3 [lindex $bdif 3]
set b4 [lindex $bdif 4]
# judge
set result 4
if { $b0 <= $x && $x < $b1 } {
set result 0
}
if { $b1 <= $x && $x < $b2 } {
set result 1
}
if { $b2 <= $x && $x < $b3 } {
set result 2
}
if { $b3 <= $x && $x <= $b4 } {
set result 3
}
return $result
}
proc conv_time {x} {
# default
set result "0:00"
# quotient
set q [expr $x / 60]
# residue
set r [expr $x % 60]
#
set result [format "%d:%02d" $q $r]
return $result
}
proc calc_time {x} {
# separate
set stmp [split $x :]
# calculate
set result [expr [lindex $stmp 0] * 60 + [lindex $stmp end]]
return $result
}
proc draw_hand {} {
#
global cPathV cTimeV cTempV eflag xexe_temp ecnt ddif bdif
# show
if { $eflag == 1 } {
# judge block
set bb [which_range $ecnt]
set bbx [format "P%d" $bb]
# path
set cPathV [format "P%d -> P%d" $bb [expr $bb+1]]
# start value
set beginv $xexe_temp($bbx)
# displacement
set dispx [lindex $ddif $bb]
set dispy [lindex $bdif $bb]
# calculate
set ctemp [expr $beginv + $dispx * ($ecnt - $dispy)]
set ctemp [expr int($ctemp)]
set cTempV [format "%d" $ctemp]
# time
set cTimeV [conv_time $ecnt]
} else {
set cPathV ""
set cTimeV "0:00"
set cTempV ""
}
}
proc show_event {} {
#
global ecnt eflag elast
# show
draw_hand
# handling
if { $eflag == 1 } {
incr ecnt
# ? complete
if { $ecnt >= $elast } {
set eflag 0
}
}
after 1000 show_event
}
proc clrParameters {} {
#
global tFileName xexe_temp xexe_time
# file name
set tFileName "unknown"
# temperature
set xexe_temp(P0) 20
set xexe_temp(P1) 20
set xexe_temp(P2) 20
set xexe_temp(P3) 20
set xexe_temp(P4) 20
set xexe_temp(P5) 20
# time
set xexe_time(P0) 0:00
set xexe_time(P1) 0:00
set xexe_time(P2) 0:00
set xexe_time(P3) 0:00
set xexe_time(P4) 0:00
set xexe_time(P5) 0:00
}
#*********************
# window area placing
#*********************
grid .lblTTemp -column 1 -row 0
grid .lblTTime -column 2 -row 0
grid .lblTTempUnit -column 1 -row 1
grid .lblTTimeUnit -column 2 -row 1
grid .lblP0 -column 0 -row 3
grid .lblP1 -column 0 -row 4
grid .lblP2 -column 0 -row 5
grid .lblP3 -column 0 -row 6
grid .lblP4 -column 0 -row 7
grid .lblP5 -column 0 -row 8
grid .lblHandling -column 1 -row 11
grid .lblPath -column 1 -row 12
grid .lblCTime -column 1 -row 13
grid .lblCTemp -column 1 -row 14
grid .lblCPathV -column 2 -row 12
grid .lblCTimeV -column 2 -row 13
grid .lblCTempV -column 2 -row 14
grid .edtP0Temp -column 1 -row 3
grid .edtP1Temp -column 1 -row 4
grid .edtP2Temp -column 1 -row 5
grid .edtP3Temp -column 1 -row 6
grid .edtP4Temp -column 1 -row 7
grid .edtP5Temp -column 1 -row 8
grid .edtP0Time -column 2 -row 3
grid .edtP1Time -column 2 -row 4
grid .edtP2Time -column 2 -row 5
grid .edtP3Time -column 2 -row 6
grid .edtP4Time -column 2 -row 7
grid .edtP5Time -column 2 -row 8
grid .lblFileName -column 3 -row 0
grid .edtFileName -column 3 -row 1
grid .btnLoad -column 5 -row 0
grid .btnSave -column 5 -row 1
grid .btnClear -column 0 -row 9
grid .btnExecute -column 0 -row 11
grid .btnCancel -column 0 -row 13
grid .btnExit -column 5 -row 20
目次
前
次