PlotterController
Ovládací program pro plottery řady XY41xx.
1 Obsah
2 Úvod
Cílem projektu PlotterController je vyvinout portovatelný ovládací program pro plottery řady XY41xx a případně i pro další malé plottery.
3 Podporovaný hardware
3.1 Hardware
3.1.1 Raspberry PI -> GPIO -> XY41xx
Raspberry PI pracuje s 3.3V zatímco XY41xx používá 5V. Proto není možné připojit Raspberry PI napřímo s XY41xx - to by Raspberry zničilo. Níže je popsáno možné propojení.
3.1.2 Linux PC -> /dev/parportx -> XY41xx
Je třeba se jen přesvědčit zda máte oprávnění číst a zapisovat na zařízení /dev/parportx. Pokud zařízení /dev/parportx nevidíte, tak zkuste následující:
$ sudo modprobe ppdev
3.1.3 FreeBSD PC -> /dev/ppix -> XY41xx
Je třeba se jen přesvědčit zda máte oprávnění číst a zapisovat na zařízení /dev/ppix.
3.1.4 DOS -> LPTx -> XY41xx
Program byl testován na kompilátoru Borland Turbo C 2.01 který je dostupný zdarma:
http://edn.embarcadero.com/article/20841
- použijte Turbo C a soubor PLOTTER.PRJ který se nachází v adresáři src
- ujistěte se že font1.fnt se nachází ve stejném adresáři jako PLOTTER.EXE
3.1.5 MS Windows -> LPTx -> XY41xx
Tato kombinace není dobře otestovaná. V některých verzích Windows je potřeba podpůrný software (např userport nebo porttalk22) který umožní přímý přístup k LPTx portům. Prozkoumejte následující odkazy:
http://hw-server.com/parallel-port-lpt-ieee-1284#xp
http://www.drdobbs.com/184409876
3.2 Rozhraní
3.2.1 Raspberry PI GPIO
Raspberry PI pracuje s 3.3V zatímco XY41xx používá 5V. Proto není možné připojit Raspberry PI napřímo s XY41xx - to by Raspberry zničilo. Budete tedy potřebovat následující tranzistorový interface:
Pokud máte Raspberry Pi, Pi Zero, Pi Zero W nebo Compute Module vytvořte referenci na printer následujícím způsobem:
PRINTER *prn = pr_create_printer(GPIO, "1");
V případě Raspberry Pi 2, Pi 3 and Compute Module 3 vytvořte referenci takto:
PRINTER *prn = pr_create_printer(GPIO, "2");
3.2.2 PC Paralelní port
Je rovněž možné připojit plotter přes paralelní port. V takovém případě použijte následující zapojení:
PLOTTER
PC-printer port XY4131 XY4140 XY4150
bit 2 4 ------------------ 1 ----------- 1 ----------- 1 PEN
bit 3 5 ------------------ 2 ----------- 2 ----------- 2 STEP
bit 1 3 ------------------ 3 ----------- 3 ----------- 3 X/Y
bit 0 2 ------------------ 4 ----------- 4 ----------- 4 +/-
bit 4 6 ------------------ 5 ----------- 5 ----------- 5 READY
GND 18 ------------------ 6 ----------- 6 ----------- 6 GND
Linux PC:
PRINTER *prn = pr_create_printer(PARPORT, "/dev/parport0");
FreeBSD PC:
PRINTER *prn = pr_create_printer(PARPORT, "/dev/ppi0");
DOS PC:
PRINTER *prn = pr_create_printer(PARPORT, "0x378");
4 Použití
4.1 Sestavení programu
Program sestavíte následujícím způsobem:
- Udělejte klon repozitáře
git clone https://github.com/berk76/plottercontroller PlotterController
- Přepněte se to adresáře projektu
cd PlotterController
- Spusťte
make
- Výsledkem kompilace budou následující soubory:
plotter_controller
,prn_hpgl
- Nyní můžete spustit
plotter_controller
a zkusit demo, nebo můžete vyzkoušet tisk HPGL souborů použitímprn_hpgl
4.2 Kreslení HPGL souborů
Použitím prn_hpgl
programu můžete kreslit HPGL soubory.
Usage:
prn_hpgl [-s <scale factor>] -i <interface number> -f <file.hpgl>
Interface numbers available:
(1) Linux PC (/dev/parport0)
(2) FreeBSD PC (/dev/ppi0)
(3) DOS PC (0x378)
(4) Raspberry Pi, Pi Zero, Pi Zero W and Compute Module
(5) Raspberry Pi 2, Pi 3 and Compute Module 3
Například - pokud máte plotter připojený k Linuxu přes paralelní port, spusťe program s následujícími parametry:
$ ./prn_hpgl -i 1 -f hpgl_examples/kuzeloid.hpgl
Pokud máte HPGL výkres který je větší nebo menší než kreslící plocha plotteru, tak můžete použít fit_hpgl
program a velikost výkresu přizpůsobit:
Usage:
fit_hpgl [-i] -x <new x size> -y <new y size> -f <file.hpgl>
-i print info only
-f input file
-x new x size
-y new y size
Použitím tohoto programu můžete přizpůsobit velikost HPGL výkresu a uložit výsledek do souboru:
$ ./fit_hpgl -x 2500 -y 1750 -f hpgl_examples/kuzeloid.hpgl > saved.hpgl
nebo můžete výstup předat rourou přímo do prn_hpgl
:
$ ./fit_hpgl -x 2500 -y 1750 -f hpgl_examples/kuzeloid.hpgl | ./prn_hpgl -i 1
Více HPGL kreseb můžete nalézt zde: cygnus.speccy.cz …
4.3 Programování
Plotter controller je knihovna funkcí v c-čku.
Příklad použití:
#include <stdio.h>
#include "printer.h"
#include "graph.h"
#include "text.h"
int main(int argc, char **argv) {
PRINTER *prn;
if ((prn = pr_create_printer(GPIO, "2")) == NULL) {
fprintf(stderr, "Error: Cannot access port\n");
return -1;
}
pr_init(prn); /* Initialization */
POSITION paper = pr_get_max_position(prn);
xy_vr(prn, paper.x, 0); /* Vector Relative */
xy_vr(prn, 0,paper.y);
xy_vr(prn, -paper.x,0);
xy_vr(prn, 0,-paper.y);
xy_vr(prn, paper.x,paper.y);
xy_mr(prn, 0,-paper.y); /* Move Relative */
xy_vr(prn, -paper.x,paper.y);
xy_set_font_size(8); /* Set Font Size */
xy_set_text_angle(M_PI_2); /* Set Text Orientation */
xy_ma(prn, paper.x - 100, 100); /* Move Absolute */
xy_vs(prn, 7); /* Velocity Set */
xy_write(prn, "Hello World!"); /* Draw text */
xy_hm(prn); /* Takes pen home */
pr_close_printer(prn);
return 0;
}
Pro inspiraci použití prozkoumejte soubor main.c.
V API dokumentaci naleznete kompletní seznam funkcí.
5 Architektura
PlotterController má následující architekturu tvořenou pěti vrstvami:
+---+--------------------+
| 5 | Client program |
+---+------+------+------+
| 4 | Text | HPGL | |
+---+------+------+ |
| 3 | Graph |
+---+--------------------+
| 2 | Printer |
+---+---------+------+---+
| 1 | Parport | GPIO |...|
+---+---------+------+---+
5.1 Interface
Vrstva Interface implementuje paralelní port a GPIO I/O.
5.2 Printer
Vrstva Printer implementuje konkrétní plotter.
Prozkoumejte API…
5.3 Graph
Vrstva Graph implementuje podporu základního kreslení.
Prozkoumejte API…
5.4 Special Graph
Tato vrstva implementuje podporu pro kreslení textu nebo pro HPGL příkazy. Prozkoumejte API…
5.5 Klientský program
Klienský program/aplikace používá přímo vrstvu pro základní kreslení, nebo vrstvu pro speciální grafiku (text, HPGL).
6 Podpora
Pokud máte jakékoliv dotazy, nápady nebo připomínky, navštivte diskuze.