Ovladač PT232 pro Linux

Firma PaPouch vyrábí přístroj PT232 resp. PT485. Jedná se o teploměr pro klasické čidlo Pt100 s výstupem na RS232 a RS485. Vzhledem k tomu, že jej chceme využít v projektu hydronet.cz, napsal jsem pro něj ovladač pro Linux.
Ačkoliv se jedná o ovladač pro PT232/485, tak po drobných modifikacích zdrojového kódu může sloužit jako ovladač pro jakýkoliv přístroj používající protokol SPINEL 97. Oproti předchozím verzím ovladačů pro zařízení na seriovém portu, které jsem napsal (např. ovladač pro DRAK5) došlo hned k několika vylepšením:

  • inteligentní detekce chyb s možností samoopravy komunikace
  • dynamické načítání odpovědi na základě údajů od protistrany
  • kontrola vypršení komunikace v blokovacím režimu
  • velká univerzálnost funkcí pro zápis a čtení
  • plně binární přístup k datům bez problémů s '\0' uprostřed řetězců
  • prakticky 100% POSIX kompatibilní

Pro ty, kdo by se chtěli o programování seriové komunikace pod UNIXem dozvědět více, odkazuji na Serial Programming Guide for POSIX Operating Systems.

Program má následující parametry (výpis nápovědy):

--------------------------------------------------------------
gpt232 verze 0.1 - Marek Drapal (c) 2007 pod licenci GNU GPL
--------------------------------------------------------------
a - adresa pristroje (dekadicky 1-253, 254 je univerzalni)
r - rychlost v Baudech (napr. 9600)
p - port (v Linuxu napr. /dev/ttyS0)
l - kalibrace (na vstup treba pripojit presny odpor 100 Ohmu)
x - reset pristroje
y - cteni vystupu - NETESTOVANO
v - cteni vstupu - NETESTOVANO
j - jednorazovy odmer
k - kontinualni mereni
i - interval mezi odmery u kont. mereni. 0=zastaveni mereni,
1-65536 v nasobcich 20 milisekund (tj. hodnota*20 ms)
s - nastaveni adresy a rychlosti
n - nova adresa (1-253)
g - nova rychlost (6-9600, 10-115200, vice viz manual Papouch)
c - cteni surove hodnoty, vraci 0-65536, pouze v nekterych FW
m - cteni komunikacnich parametru
t - cteni jmena a verze firmware
--------------------------------------------------------------
Mezi parametrem a hodnotou musi byt mezera!

Příklady použití:

  • Jednorázový odměr na adrese 1, portu /dev/ttyS0 a při rychlosti 9600 Baudů:

    ./gpt232 -a 1 -r 9600 -p /dev/ttyS0 -j

  • Nastavení komunikačních parametrů zařízení na adrese 8, portu /dev/ttyS1 (druhý seriový port v Linuxu), rychlost 9600 Baudů na nové parametry - adresa 30, rychlost 115200

    ./gpt232 -a 8 -r 9600 -p /dev/ttyS1 -s -n 30 -g 10

Přiložený zdrojový kód zkompilujeme následovně:

gcc -Wall -o gpt232 gpt232.c

Kód by se měl zkompilovat čistě, bez jakýchkoli chyb či varování. Na systémech, které nemají funkci cfsetspeed, je třeba definovat:

#define NO_cfsetspeed
#define BAUD_RATE B9600

případně jinou rychlost komunikace již při kompilaci.


PřílohaVelikost
gpt232.c.txt21.01 KB
kategorie: linux