Накопитель данных на HP48GX/HP49G. Интерфейс RS-232
Описание использование калькуляторов линейки HP 50/49/48 для задач приёма, хранения и обработки данных в полевых условиях.
Сведения
Электронный теодолит и ноутбук. Тяжело и неудобно работать.
Вам не приходилось записывать данные из COM порта в файл? А в полевых условиях (ночью, на улице)?
Современные геодезические приборы, GPS приемники и др. имеют возможность записи результатов измерений во внутреннюю память и в порт RS-232, могут проводить сложные вычисления. Но если пользователю потребуется провести заранее не предусмотренные вычисления, сохранить данные в своем формате и т.п., то потребуется внешний компьютер. Часто в полевых условиях используют ноутбуки, но у них большая масса, а заряда батареи может не хватить на рабочую смену. Можно использовать внешние аккумуляторы (растет масса!).
Работа геодезиста в принципе связана с постоянным переходом между объектами измерения, поэтому крайне важно уменьшить массу и размеры накопителя данных. Любой отказ накопителя приводит к потере рабочего времени, поэтому сбоев быть не должно. Пользователи не разбираются в компьютерах, поэтому интерфейс программы и порядок работы должны быть максимально простыми.
Из всего этого следует, что нужен маленький и легкий накопитель данных с возможностью вычислений, записи данных в файл и со связью по RS-232. Этим требованиям соответствуют графические калькуляторы серии HP-48 и HP-49. Их можно купить в России.
3 батареи ААА в зависимости от режима (COM-порт, звук) работают от месяца до года (и больше).
Заметим, что сейчас полно разных карманных ПК, но многие ли умеют программировать на них? Встроенный язык UserRPL HP48/49 довольно прост, можно посмотреть пример рабочей программы в конце статьи. Можно программировать и на SysRPL, на ассемблере, но это гораздо труднее.
Единственный недостаток применения такого калькулятора - требуется сравнительно высокая квалификация того, кто будет работать с таким накопителем :(. Но вообще все, с кем я работал, смогли его освоить. Кроме того, в новейших (и дорогих) геодезических приборах уже встроен аналогичный накопитель.
Научный программируемый калькулятор
HP-48GX
- Память 128 (до 1,128) кБ
- Графический экран 131x64 точек
- Языки программирования HP Basic, RPL (Lisp), SysRPL, ассемблер
- Многочисленные встроенные математические функции
- Файловая система
- Двумерная и трехмерная графика
- Размер 8.9x18.7x2.8 см
- Последовательный порт: RS232 (провод продается отдельно)
- Клавиатура: 49 кнопок
- Масса: 264 г.
HP-49G - более новая модель.
- 1.5 Mb памяти, Flash ROM, нет IR-порта, нет возможности расширения памяти
- 51 кнопка, надежный корпус.
Программирование
Необходимы начальные знания основ HP-48/HP-49, чтобы повторить этот пример. Программу на языке RPL (LISP) можно ввести прямо с клавиатуры HP и сохранить в файл для дальнейшего быстрого вызова.
Программа инициализации COM-порта.
Программа отправляет строку символов + CR + LF в COM-порт
Программа получает строку символов из COM-порта и показывает ее на экране. Размер буфера 255 символов.
Если соединить ПК и калькулятор проводом (самодельным или фирменным), то можно передавать данные.
Результаты приема данных калькулятором размещены в т.н. стеке, и могут быть сохранены в файл.
Сохраним строку в файл.
В HP-48/HP-49 есть встроенный файловый менеджер.
В файловом менеджере можно просмотреть полученный файл.
Просмотр.
Обмен данными с компьютером
Для обмена данными с ПК нужно запустить в калькуляторе Server и использовать программа для передачи данных в ПК.
Программа для передачи данных в ПК (входит в набор для связи с компьютером). Ее можно скачать на www.hp.com.
Применение
Приведу пример практического использования накопителя. Из прибора при измерении получаем текстовые данные в известном формате:
81..00+00003596 82..00-00007783 83..00+00001324 32..00+00008574
812.00-00000027 822.00-00000013 832.00+00000001 32..00+00008753
21.103+16181600 22.103+08178800 32..00+00008766 33..00+00001408
21.103+16181600 81..00+00002736 82..00-00008328 32..00+00008766
11....+00000000 21.103+16181500 22.103+08178900 31..00+00008856
Наша задача перебрать их и записать в файл в памяти накопителя:
%%HP: T(1)A(R)F(.);
"File started at 22.28 13.032001
200 31388 16793 -114 35598 M8 22.29 XYZgp
200 -1568 -2034 -315 2568 M9 22.30 XYZgp
200 -1566 -2032 -314 2566 22.30 XYZgp
200 -38171 -7653 -105 38931 M10 22.31 XYZgp
200 -33912 -20809 50 39787 M11 22.32 XYZgp
200 -33155 -18373 -1651 37905 3 22.34 XYZgp
200 -20812 -11158 -1675 23614 3 22.35 XYZgp
200 -1835 287 -1640 1858 3 22.36 XYZgp
"
Получение, разбор данных и запись в файл делает моя программа на RPL.
Исходники
Пример рабочей программы на языке RPL в конце статьи.
Ссылки
В Интернете много софта под HP-48/HP-49. Есть эмулятор, среда разработки на SysRPL, множество исходников. Исходники можно взять на сайте www.hpcalc.org. Ключевые слова для поиска в Интернет - HP-48, HP-49, RPL, SysRPL, EMU48, EMU49, DEBUG2, Visual RPL, HORN.
- HP - Hewlett Packard
- HP 48G Series User's Guide, 1994
- www.hpcalc.org - сайт фанатов калькуляторов HP
- www.area48.com
- www.circuitcellar.com - "X-Y Graphing Data Logger", britti-99.pdf, Alberto Ricci Bitti. Автор соединил калькулятор CASIO и PIC.
%%HP: T(3)A(D)F(.);
\<< ":01s" 13 CHR + ":01s" 13 CHR 10 CHR + + "" "0" "" "NONE" "" "" "" "" "" "" 0 0 0 0 0 0 0 0 "" ""
\-> Comm1 ANSS MSType PKT ID LASTERROR DLIST FNAME Xc Yc Zc Rc MCOUNT FREEMEM KEYP BUFL ITEMM ERRN FEXIST IDCONT TIMEX ST
\<<
CLLCD "Data Collector" 1 DISP
MEM 'FREEMEM' STO
DO
" CHOOSE" { { MEASURE 1 } { QUIT 2 } { SERVER 3 } } 1 CLLCD
CHOOSE DROP 'ITEMM' STO
CASE
ITEMM 1 ==
THEN
9600 BAUD 0 PARITY OPENIO
BUFLEN DROP SRECV DROP DROP 440 .03 BEEP
DO
"Enter filename" "" INPUT "'" SWAP +
"'" + OBJ\-> 'FNAME' STO
VARS 'DLIST' STO
0 'FEXIST' STO
DO
DLIST HEAD
FNAME SAME 'FEXIST' STO
DLIST TAIL 'DLIST' STO
UNTIL
DLIST { } == FEXIST 1 ==
OR
END
IF
FEXIST 1 ==
THEN
1320 .05 BEEP
"FILE EXIST" MSGBOX
ELSE
1320 .05 BEEP
END
UNTIL
FEXIST 0 ==
END
"" FNAME STO CLLCD
TIME \->STR 1 5 SUB " " + DATE \->STR +
'TIMEX' STO
"File started at " FNAME STO+
FNAME TIMEX 10 CHR + STO+
DO
"MEM " FREEMEM \->STR + " PNT " +
MCOUNT \->STR + 1 DISP
DO
UNTIL
BUFLEN DROP 'BUFL' STO
BUFL 0 > KEY
\-> K
\<<
IF
'K==1'
THEN
'KEYP' STO 1
ELSE
0 'KEYP' STO 0
END
\>>
OR
END
CASE
BUFL 0 >
THEN
BUFLEN DROP SRECV DROP 'ST' STO
IF
ST "!01" POS 0 >
THEN
TIME \->STR 1 5 SUB 'TIMEX' STO
ST ST "!01" POS 4 + ST SIZE SUB 'ST' STO
ST 1 ST 13 CHR POS 1 - SUB 'ST' STO
ST 3 DISP
ST 1 ST " " POS 1 - SUB 'Xc' STO
ST ST " " POS 1 + ST SIZE SUB 'Yc' STO
Xc 9 CHR + Yc + 9 CHR + TIMEX + 13 CHR + 10 CHR +
FNAME EVAL
SWAP + FNAME STO
440 .05 BEEP
MCOUNT 1 + 'MCOUNT' STO
MEM 'FREEMEM' STO
"m1 = " Xc + " " + 4 DISP
"m2 = " Yc + " " + 5 DISP
BUFLEN DROP SRECV DROP DROP
ELSE
"ERROR! BUFSIZE " BUFL \->STR + 1 DISP
BUFLEN DROP SRECV DROP DROP
440 .03 BEEP 880 .03 BEEP 1320 .03 BEEP
"" 1 DISP
END
END
KEYP 11 ==
THEN
440 .05 BEEP Comm1 XMIT DROP
END
END
UNTIL
KEYP 16 ==
END
END
ITEMM 3 ==
THEN
OPENIO BUFLEN DROP SRECV DROP DROP 440 .03 BEEP CLLCD
"SERVER MODE" 1 DISP
9600 BAUD 0 PARITY
SERVER
END
END
UNTIL
ITEMM 2 ==
END
9600 BAUD 0 PARITY
\>>
\>>
blog comments powered by Disqus