Накопитель данных на HP48GX/HP49G. Интерфейс RS-232

| рубрика «Программы» | автор site_editor
Метки: ,

Описание использование калькуляторов линейки 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
    \>>
\>>