layout | title | nav_order |
---|---|---|
default |
PlotterController (cs) |
2 |
Ovládací program pro plottery řady XY41xx.
Cílem projektu PlotterController je vyvinout portovatelný ovládací program pro plottery řady XY41xx a případně i pro další malé plottery.
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í.
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
Je třeba se jen přesvědčit zda máte oprávnění číst a zapisovat na zařízení /dev/ppix.
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
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
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");
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");
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
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 ...
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í.
PlotterController má následující architekturu tvořenou pěti vrstvami:
+---+--------------------+
| 5 | Client program |
+---+------+------+------+
| 4 | Text | HPGL | |
+---+------+------+ |
| 3 | Graph |
+---+--------------------+
| 2 | Printer |
+---+---------+------+---+
| 1 | Parport | GPIO |...|
+---+---------+------+---+
Vrstva Interface implementuje paralelní port a GPIO I/O.
Vrstva Printer implementuje konkrétní plotter.
Prozkoumejte API...
Vrstva Graph implementuje podporu základního kreslení.
Prozkoumejte API...
Tato vrstva implementuje podporu pro kreslení textu nebo pro HPGL příkazy. Prozkoumejte API...
Klienský program/aplikace používá přímo vrstvu pro základní kreslení, nebo vrstvu pro speciální grafiku (text, HPGL).
Pokud máte jakékoliv dotazy, nápady nebo připomínky, navštivte diskuze.