Posredovanje HPGL ukazov s PC računalnika

Avtor:
Miha Krejan







VSEBINA

  1. Uporabniški vmesnik
  2. Protokol prenosa
  3. RS232 komunikacija


 

1. UPORABNIŠKI VMESNIK

Uporabniški vmesnik je napisan s pomočjo okolja TURBO VISION za BORLAND C++ V 3.1. Okenska zasnova in podpora miške omogočata preprosto uporabo. Na voljo je izbira datoteke za izris, nastavljanje serijske komunikacije in snemanje nastavitev. Uporabnik je o dogajanju v programu obveščen preko sporočil o napakah.


Izgled TURBO VISION okolja
 

Izbira datoteke za izris
 

Nastavitev serijske komunikacije

Vsebina


2. PROTOKOL PRENOSA

HPGL ukazi se prenesejo iz datoteke na PC računalniku preko serijskega RS232 vmesnika na krmilnik risalnika. ASCII znaki se zapisujejo v vmesni pomnilnik v krmilniku. Risalnik je precej počasen, zato se vmesni pominlnik hitro napolni in zadnji znak je zavržen. Potrebno ga je ponovno poslati. Krmilnik po vsakem poslanem znaku pošlje nazaj kontrolni znak, ki pove ali je bil znak sprejet ali zavržen. Če program določen čas ne sprejme nobenega znaka, se javi napaka, da ne pride do zamrznitve programa ob izpadu komunikacije.

Del programa v jeziku C++, ki pošilja datoteko krmilniku izgleda takole:

void Plot::handleEvent(TEvent& event) {
    TDialog::handleEvent(event);
    if (!PlotEnd) {
        PChar = fgetc(fp);         // Beri naslednji zna iz datoteke
        if (AsyncOutByte(PChar)) { // Pošlji znak krmilniku
            PlotFail = errFail;    // Če pošiljanje ni uspešno
                                   // uspešno javi napako
            endModal(cmOK);
            return;
        }
        if (AsyncWaitByte()) {        // Čakaj na kontrolni znak
            PlotFail = errNotRespond; // Če kontrolnega znaka ni
                                      // javi napako
            endModal(cmOK);
            return;
        }
        switch (AsyncIn()) {                // Preberi kontrolni
                                            // znak
            case 0xAA:                      // Znak je bil zavržen
                fseek(fp, -1, SEEK_CUR);    // Premakni se za 1 znak
                                            // nazaj po datoteki
                break;
            case 0xFF:                      // Znak je bil uspešno
                                            // sprejet
                plotDone++;                 // Napredovanje
                pb->update();               // Osveži prikazovalnik
                                            // napredovanja
                if (plotDone >= plotSize) { // Ali smo že prenesli
                                            // celo datoteko?
                    PlotEnd = 1;            // Konec prenašanja
                    endModal(cmOK);
                    return;
                }
                break;
            default:
                PlotFail = errIResponse;    // Risalnik se ne odziva
                                            // pravilno
                endModal(cmOK);
                return;
        }
    }
}

Vsebina


3. RS232 KOMUNIKACIJA
RS232 komunikacija je izvedena s pomočjo rutin za asinhrono komunikacijo za povezavo s C programskim jezikom. Osnovne funkcije za komunikacijo so: Primer pošiljanja niza znakov na COM1 port (9600, 8-bitna beseda, 1 stop bit, brez paritete)

#include <stdio.h>
#include "async.h"

char outstring[] = "Ta niz je bil poslan preko COM1";

void main() {
    int i;
    if (AsyncInit(COM1) != 0) {
        AsyncStop();
        printf("Napaka pri inicializaciji COM1\n");
        return;
    }
    AsyncSet(9600, BITS8 | STOP_1 | NO_PARITY);
    AsyncHand(DTR|RTS);
    for (i = 0; i < strlen(outstring); i++) {

        /* --------------------------------------- */
        /* Buffer je dejansko velik 512 znakov,    */
        /* zato v tem primeru ni nujno potrebno    */
        /* testitranje ali je v njem vec kot 10    */
        /* znakov. Spodnja vrstica je le primer.   */
        /* --------------------------------------- */

        while (AsyncInStat() >= 10);
        AsyncOut(outstr[i]);
    }
    AsyncStop()
}

Vsebina


4. RUTINE ZA ASINHRONO KOMUNIKACIJO
Avtor rutin je David Kessner. Napisane so v zbirnem jeziku za intel 0x86 in so bile prevedene s pomočjo Turbo Assemberja. Zasnovane so na prekinitvah in delujejo v MS-DOS okolju. Testirane so bile tudi pod DOS oknom v okolju Windows 95/98. Potrebno je paziti da se jih v vsakem primeru uporablja samo v enem oknu.

Modificirane rutine, ki so bile uporabljene pri tej nalogi:

ASYNC.ASM
ASYNC.H

Originalne rutine:

ASYNLIB2.ZIP

Vsebina


5. DODATKI
Izvorna koda programa PLOT.EXE za pošiljanje HPGL datoteke krmilniku:
PLOT.CPP

Izvorna koda programa za risalnik v mikrokrmilniku:
PLOTER.ASM
 

Povezave:

Vse o grfičnih formatih za programerje
Wotsit's Format: The programmer's file formats and data formats resource

Shareware in uporabni pripomočki za programerje (tu lahko najdete tudu asynlib2.zip)
Simtel.Net Worldwide Shareware Distribution Network

Borland - programski jeziki
BORLAND INTERNATIONAL, INC.

Motorola mikrokontrolerji (uporabljenega mikrokontrolerja ne boste našli, ker je zastarel)
Motorola-Microcontrollers (MCU)

Turbo Vision FAQ
TVPlus:  Home Page
 
 

Vsebina





GLAVNA STRAN

Stran je uredil Miha Krejan

23. Marec 1999