Permalink
Browse files

modified: assemblies/assembly005/assembly005.tcl

	modified:   assemblies/assembly006/assembly006.tcl
	modified:   assemblies/assembly006/measure.tcl
	modified:   assemblies/assembly006/tester.tcl
	modified:   assemblies/assembly006/utils.tcl
	modified:   measure/chart.tcl
	modified:   measure/math.tcl
	modified:   measure/pkgIndex.tcl
	measure/chart/
  • Loading branch information...
unknown unknown
unknown authored and unknown committed Apr 27, 2012
1 parent 6776c15 commit cbf720fe44198d423fc81cdf5bf1ef92050073d0
@@ -212,10 +212,10 @@ proc setTemperature { t tErr err trend sigma derivative1 } {
global runtime canvas
set runtime(value) [format "%0.2f \u00b1 %0.2f" $t $tErr]
- set runtime(error) [format "%0.2f \u00b1 %0.2f" $err $tErr]
+ set runtime(error) [format "%0.3f \u00b1 %0.2f" $err $tErr]
set runtime(trend) [format "%0.3f" $trend]
set runtime(sigma) [format "%0.3f" $sigma]
- set runtime(derivative1) [format "%0.2f" $derivative1]
+ set runtime(derivative1) [format "%0.3f" $derivative1]
measure::chart::${canvas}::addPoint $t
}
@@ -109,7 +109,7 @@ proc startMeasure {} {
# Очищаем результаты в окне программы
clearResults
-
+
# Очищаем график
measure::chart::${chartCanvas}::clear
}
@@ -199,7 +199,7 @@ proc setTemperature { lst } {
set runtime(trend) [format "%0.3f" $state(trend)]
set runtime(sigma) [format "%0.3f" $state(sigma)]
set runtime(derivative1) [format "%0.3f" $state(derivative1)]
- set runtime(error) [format "%0.2f \u00b1 %0.2f" $state(error) $state(measureError)]
+ set runtime(error) [format "%0.3f \u00b1 %0.2f" $state(error) $state(measureError)]
}
proc addPointToChart { t r { series "result" } } {
@@ -216,7 +216,7 @@ measure::logger::server
# Создаём окно программы
set w ""
-wm title $w. "Установка № 6: Измерение УС в зависимости от температуры"
+wm title $w. "Установка № 6: Измерение R(T)"
# При нажатии крестика в углу окна вызыватьспециальную процедуру завершения
wm protocol $w. WM_DELETE_WINDOW { quit }
@@ -287,6 +287,9 @@ pack $p -fill both -padx 10 -pady 5 -expand 1
set chartCanvas [canvas $p.c -width 400 -height 200]
pack $chartCanvas -fill both -expand 1
measure::chart::staticChart -xlabel "T, К" -ylabel "R, Ом" -dots 1 -lines 1 $chartCanvas
+# параметры графика
+measure::chart::${chartCanvas}::series result -color green
+measure::chart::${chartCanvas}::series test -maxCount 10 -color #7f7fff
# Закладка "Параметры измерения"
ttk::frame $w.nb.ms
@@ -25,7 +25,7 @@ package require scpi
###############################################################################
# макс. время ожидания благоприятного момента для старта измерения, мс
-set MAX_WAIT_TIME 3000
+set MAX_WAIT_TIME 1000
###############################################################################
# Подпрограммы
@@ -154,7 +154,6 @@ proc setupMM {} {
-scpiVersion $hardware::agilent::mm34410a::SCPI_VERSION \
-text2 "V1 VOLTAGE" \
$mm
- # scpi::cmd $mm "SENSE:VOLTAGE:DC:RANGE 100"
}
# Инициализация амперметра
@@ -212,53 +211,30 @@ proc oneMeasurementDuration {} {
# Процедура производит одно измерение со всеми нужными переполюсовками
# и сохраняет результаты в файле результатов
proc makeMeasurement { } {
- global mm cmm connectors settings
+ global mm cmm settings
- set vs [list]; set svs [list]
- set cs [list]; set scs [list]
- set rs [list]; set srs [list]
-
- # Пробегаем по переполюсовкам
- foreach conn $connectors {
- # Устанавливаем нужную полярность
- if { [llength $connectors] > 1 } {
- setConnectors $conn
- }
-
- # Ждём окончания переходных процессов,
- after $settings(switch.delay)
-
- # Измеряем температуру до начала измерения
- array set tBefore [measure::tsclient::state]
-
- # Измеряем напряжение
- set res [doMeasure]
-
- # Измеряем температуру сразу после измерения
- array set tAfter [measure::tsclient::state]
-
- # вычисляем среднее значение температуры
- set T [expr 0.5 * ($tAfter(temperature) + $tBefore(temperature))]
- # и суммарную погрешность
- set dT [measure::sigma::add $tAfter(measureError) [expr 0.5 * abs($tAfter(temperature) - $tBefore(temperature))] ]
-
- # Накапливаем суммы
- lassign $res v sv c sc r sr
- lappend vs $v; lappend svs $sv
- lappend cs $c; lappend scs $sc
- lappend rs $r; lappend srs $sr
+ # Измеряем температуру до начала измерения
+ array set tBefore [measure::tsclient::state]
+
+ # Измеряем напряжение
+ set res [doMeasure]
- # Выводим результаты в окно программы
- display $v $sv $c $sc $r $sr $T "result"
+ # Измеряем температуру сразу после измерения
+ array set tAfter [measure::tsclient::state]
+
+ # вычисляем среднее значение температуры
+ set T [expr 0.5 * ($tAfter(temperature) + $tBefore(temperature))]
+ # и суммарную погрешность
+ set dT [measure::sigma::add $tAfter(measureError) [expr 0.5 * abs($tAfter(temperature) - $tBefore(temperature))] ]
+
+ # раскидываем массив по переменным
+ lassign $res v sv c sc r sr
- # Выводим результаты в результирующий файл
- measure::datafile::write $settings(result.fileName) $settings(result.format) [list TIMESTAMP $T $dT $c $sc $v $sv $r $sr]
- }
+ # Выводим результаты в окно программы
+ display $v $sv $c $sc $r $sr $T "result"
- # Вычисляем средние значения
- set c [math::statistics::mean $cs]; set sc [math::statistics::mean $scs]
- set v [math::statistics::mean $vs]; set sv [math::statistics::mean $svs]
- set r [math::statistics::mean $rs]; set sr [math::statistics::mean $srs]
+ # Выводим результаты в результирующий файл
+ measure::datafile::write $settings(result.fileName) $settings(result.format) [list TIMESTAMP $T $dT $c $sc $v $sv $r $sr]
}
# Отправляем команду термостату
@@ -270,24 +246,6 @@ proc setPoint { t } {
measure::interop::cmd [list setPointSet $t]
}
-# Процедура вычисляет продолжительность измерения сопротивления в мс,
-# включая все нужные переполюсовки и паузы между ними.
-proc calcMeasureTime {} {
- global settings
-
- set tm [oneMeasurementDuration]
- set d $settings(switch.delay)
-
- if { $settings(switch.voltage) && $settings(switch.current) } {
- return [expr 4.0 * $tm + 3.0 * $d]
- }
- if { $settings(switch.voltage) || $settings(switch.current) } {
- return [expr 2.0 * $tm + $d]
- }
-
- return [expr $tm + 100]
-}
-
# Процедура определяет, вышли ли мы на нужные температурные условия
# и готовы ли к измерению сопротивления
proc canMeasure { stateArray setPoint } {
@@ -298,7 +256,7 @@ proc canMeasure { stateArray setPoint } {
set tspeed [expr $state(derivative1) / (60.0 * 1000.0)]
# продолжительность измерительного цикла
- set tm [calcMeasureTime]
+ set tm [oneMeasurementDuration]
# предполагаемая температура по окончании измерения
set estimate [expr $state(temperature) + $tspeed * $tm ]
@@ -333,6 +291,7 @@ proc canMeasure { stateArray setPoint } {
proc skipSetPoint {} {
global doSkipSetPoint
+ global log
set doSkipSetPoint yes
}
@@ -343,6 +302,40 @@ proc applySettings { lst } {
array set settings $lst
}
+# Процедура измерения одной температурной точки
+proc measureOnePoint { t } {
+ global doSkipSetPoint
+
+ # Цикл продолжается, пока не выйдем на нужную температуру
+ # или оператор не прервёт
+ while { $doSkipSetPoint != "yes" } {
+ # Проверяем, не была ли нажата кнопка "Стоп"
+ measure::interop::checkTerminated
+
+ # Считываем значение температуры
+ set stateList [measure::tsclient::state]
+ array set state $stateList
+
+ # Выводим температуру на экран
+ measure::interop::cmd [list setTemperature $stateList]
+
+ if { [canMeasure state $t] } {
+ # Производим измерения
+ makeMeasurement
+ break
+ }
+
+ # Производим тестовое измерение сопротивления
+ set tm [clock milliseconds]
+ testMeasureAndDisplay
+
+ # Ждём или 1 сек или пока не изменится переменная doSkipSetPoint
+ after [expr int(1000 - ([clock milliseconds] - $tm))] set doSkipSetPoint timeout
+ vwait doSkipSetPoint
+ after cancel set doSkipSetPoint timeout
+ }
+}
+
###############################################################################
# Начало работы
###############################################################################
@@ -402,34 +395,24 @@ foreach t [measure::ranges::toList [measure::config::get ts.program ""]] {
# Переменная-триггер для пропуска точек в программе температур
set doSkipSetPoint ""
- # Цикл продолжается, пока не выйдем на нужную температуру
- # или оператор не прервёт
- while { $doSkipSetPoint != "yes" } {
- # Проверяем, не была ли нажата кнопка "Стоп"
- measure::interop::checkTerminated
-
- # Считываем значение температуры
- set stateList [measure::tsclient::state]
- array set state $stateList
-
- # Выводим температуру на экран
- measure::interop::cmd [list setTemperature $stateList]
-
- if { [canMeasure state $t] } {
- # Производим измерения
- makeMeasurement
- break
+ # Пробегаем по переполюсовкам
+ foreach conn $connectors {
+ # Устанавливаем нужную полярность
+ if { [llength $connectors] > 1 } {
+ setConnectors $conn
+
+ # Ждём окончания переходных процессов,
+ after $settings(switch.delay)
}
- # Производим тестовое измерение сопротивления
- set tm [clock milliseconds]
- testMeasureAndDisplay
-
- # Ждём или 1 сек или пока не изменится переменная doSkipSetPoint
- after [expr int(1000 - ([clock milliseconds] - $tm))] set doSkipSetPoint timeout
- vwait doSkipSetPoint
- after cancel set doSkipSetPoint timeout
- }
+ # Работаем в заданной температурной точке
+ measureOnePoint $t
+
+ if { $doSkipSetPoint == "yes" } {
+ # коннекторы в исходное
+ break
+ }
+ }
}
###############################################################################
@@ -104,9 +104,6 @@ proc run {} {
# Измеряем сопротивление и выводим результаты в окно программы
testMeasureAndDisplay
- # Считываем значение температуры выводим её на экран
- catch { measure::interop::cmd [list setTemperature [measure::tsclient::state]] }
-
# Выдерживаем паузу
measure::interop::sleep [expr int(500 - ([clock milliseconds] - $tm))]
}
@@ -163,7 +163,17 @@ proc testMeasureAndDisplay {} {
# Снимаем показания
lassign [testMeasure] v sv c sc r sr
- # Выводим результаты в окно программы
- display $v $sv $c $sc $r $sr
+ # Считываем значение температуры выводим её на экран
+ if { [ catch {
+ set t [measure::tsclient::state]
+ array set tstate $t
+ measure::interop::cmd [list setTemperature $t]
+
+ # Выводим результаты в окно программы
+ display $v $sv $c $sc $r $sr $tstate(temperature) test
+ } ] } {
+ # Выводим результаты в окно программы
+ display $v $sv $c $sc $r $sr
+ }
}
Oops, something went wrong.

0 comments on commit cbf720f

Please sign in to comment.