OK1UFC, České Budějovice, JN78fx, dne 25. ledna 2018:

 
Sekvencer UHF setupu pro JT65 provoz, realizovaný softwarově v PC - další příklad vidláckého programování

Úvod

Článek o SW řešení sekvenceru UHF stanice jsem psal na žádost více čtenářů mého webu, a to bezprostředně po zveřejnění článku o kontroleru malé EME stanice, který jsem realizoval na desktopu (PC), na kterém běží SW WSJT-X. Znovu zde musím opakovat, že nejsem programátor. Jenže občas potřebuji mít nějaký ten prográmek, zpravidla jednoduchý a většinou používaný k tomu, abych vůbec zrealizoval nějaké experimenty. Moje metody psaní programů, znovu opakuji, jsou vidlácké. Moje způsoby algoritmizace jsou svérázné, a pokud jde o řízení v reálném čase pod Windows, řekl bych, až sprosté. Znovu opakuji, někdy se však nevyhnete potřebě mít potřebný SW, který nikdo nenapsal a potřebujete ho mít rychle. Rychle, často znamená, napsat ho třeba za dvě hodiny jízdy v expresu mezi Prahou a Českými Budějovicemi, napsat ho na malém notebooku a napsat ho při kávě.

Poznámka: Zde, proboha, nepovažujte, že pro psaní takových programů je ten nejsprávnější nástroj Visual Studio. Pokud občas SW píšete, dělejte to s nástroji, se kterými umíte dělat a práce vám jde od ruky. Protože jsem na webu v minulosti dávné i v minulosti nedávné popsal několik svých řešení, u kterých jsem nechal nahlédnout pod pokličku, ve Visual Basicu, ukázal jsem vidláckou algoritmizaci zde právě v tomto nástroji.

Algoritmizace sekvenceru

Klasicky hamové řeší sekvencer tak, že odvozují posloupnosti spínání od události PTT. Pokud řídíme stanici pro WSJT, nemusíme ji řídit od události PTT, ale můžeme řízení realizovat přímo od času, kterým se synchronizuje při JT provozu všechno.

Výhoda řešení: Hlavní výhodou popsaného řešení je čas, který máme na všechna spínání.

Jak to pracuje, bych vyjádřil na analogii postupu, kdy chceme odjet v 9.30 vlakem ke kamarádovi. Musíme udělat několik kroků: nasadit si na ruku (nebo vzít do kapsy) hodinky - odejít včas z bytu - zamknout a odejít včas na stanici - cestou si včas koupit před odjezdem jízdenku z mobilu - přijít včas na perón - nastoupit a odjet. Sekvencer je dokonce ještě jednodušší. Musíme v PC umět sehnat čas (abychom věci dělali včas), spustit časovač, který nám bude s pravidelným intervalem spouštět 3 hlavní procedury programu. V té první se z časové informace vydolují hodiny, minuty a sekundy. Ve druhé se provede srovnání s nastavenými prvky, tedy, zda chceme jen poslouchat RX nebo zda chceme vysílat v liché nebo v sudé minutě. Ve třetí se odešlou povely do kontroleru v outdoorové jednotce.

Jak to vypadá, jste viděli na stránce s popisem kontroleru - viz úvod článku. Než to budeme mít ve finální verzi, můžeme si napsat algoritmus samostatně v přehledné maličké verzi, kde si ho vyzkoušíme. Taková verze ke zkoušení vypadala v mém případě takto (na obrázku obrazovky je třikrát spuštěná, zachycená v konkrétním čase 18.46 46 a v každém okně je jiný režim - jen RX, TX v liché a TX v sudé minutě):

Tak jednoduchý algoritmus napsaný v jediném okně zabere jen asi 20 kB. Můžete si demoverzi sami stáhnout např. zde a spustit na svém PC.

Jak je to naprogramováno?

Nebo napsáno, nakresleno? Vidlácky. Neprogramátorsky. Co se dalo, tak jsem nepsal, ale nakreslil ve Visual Basicu. Technik neprogramátor se od programátora liší v tom, že programy raději kreslí, než píše :-) Jenže nakreslit nejde všechno a občas je třeba nějaké informace od někud číst, formátovat, zpracovávat, zobrazovat, uchovávat, odesílat. Tak je to, bohužel, i v tomto jednoduchém prográmku.

Téměř celý, celkem bohatě komentovaný kód lze pro prohlédnutí stáhnout v pdf formátu zde. Skládá se z několika málo řádků programu:
1. Deklarace proměnných:

Poznámky:

1.Na deklaracích upozorňuji na jednu supervidláckou techniku programování. Po sériovém portu se z PC dobře posílají data jako celé bajty. Jeden byte je celkem 8 bit a reprezentuje číslo od 0 do 255 (v desítkovém tvaru). Vidlák si ulehčuje život, šetří časem i námahou a tak si klidně posílá místo jednobitové informace celý bajt a jeho hodnotu testuje (např. zjišťuje, jestli je stejně veliká jako jiný celý bajt) také jako celý bajt a podle té hodnoty třeba spíná pouze jeden kontakt.

2. Zobrazení čísel, bajtů a bitů (1 byte - 8 bit), se často píše jak v desítkovém, tak v hexadecimálním formátu. Bity se často zobrazují jako nuly a jedničky, jako úrovně L a H. V úlohách, které souvisejí s komunikací po sériovém portu, např. z PC do kontroléru TCVRu nebo do kontroléru pro řízení azimutu a elevace, se běžně pracuje se zobrazením ve všech zmíněných formátech a občas je také třeba přepočítat z jedné soustavy do druhé. K tomu v ham praxi slouží různé kalkulátory. Stáhnete je z internetu, najdete je na bakelitových kalkulačkách, bývají často součástí vývojových nástrojů pro práci s mikropočítači. Můžete si je také sami napsat nebo nakreslit. Příklad, včetně spustitelného programu ke stažení, včetně okomentovaného výpisu zdrojového kódu, najdete také na této stránce.

2. Hlavní procedura, kterou se spouštím periodicky, intervalem časovače:

Co k tomu dodat? Skutečně mám v hlavní proceduře jen tři řádky, tři skoky do podporogramů. V prvním zjišťuji, kde se pohybuji v čase, v druhé nastavuji sekvence, což znamená, že zkoumám, co chci dělat (jen RX, sudá/lichá minuta TX), kolikátá je sekunda a nastavuji povely. Konkrétně v 53 sekundě odpojuji LNA a přepínám anténní relé, v 54 sekundě zapínám PA a 58 sekundě zapínám TX. Vše je tedy připraveno a v další minutě od sekundy 00 jde z programu WSJT-X do TX modulace. A to až do 50 sekundy. V 52 sekundě odpojuji TX, PA, přepínám anténní relé a zapínám LNA. Vše je tedy několik sekund před novou minutou a 00 sekund opět v pohotovosti se zapnutým RX. A to až do 53 sekundy. A tak to jede pořád dokola.

3. Procedura Prave_nyni ()

Opět k tomu není co dodat. Procedura má jen 4 řádky, na kterých se postupně:
- sežene okamžitý systémový čas funkcí Now(), naformátuje se do viditelné podoby jako řetěz znaků a zobrazí se v text. políčku cas_nyni.Text
- obdobně se sežene řetězec sekund ve formátu ss
- řetězec minut ve formátu mm
- a ještě se připraví hodnota Datum_mmpul, jako hodnota z text. řetězu Datum_mm, vydělená dvěma. Tuto hodnotu potřebuji v další proceduře k tomu, abych zjistil, zda je sudá nebo lichá minuta. Když číslo Datum_mmpul je celé a nemá nic za desetinnou tečkou (např. 24), pak ta minuta je sudá (48). Když to číslo má za desetinnou tečkou nenulovou číslici (např. 24.5), tak ta minuta byla lichá (49-tá). A tento dílčí algoritmus programuji např. tak, že od čísla Datum_mmpul odečtu celou část z Datum_mmpul. Použiji na to systémovou funkci Int () - viz výpis a rozdíl testuji na nulový nebo nenulový výsledek.

4. Procedury Nastavuj_sekvence() a Makej()

Domnívám se, že fakt nemá smysl další proceduru tady popisovat, jak fachčí, je to vidět z komentovaného výpisu. Proceduru Makej(), která se týká odesílání bajtů do sériového portu jsem z demoverze vymazal. Sériovou komunikaci jsem popsal už dřív a jindy. Povely jsou navíc poplatné mikropočítači v zařízení, tj. protokolu, který si navrhneme (já používám Icom), adrese, kterou si pro zařízení zvolíme, povel, který si zvolíme pro spínání LNA, ANT, PA, TX. Já posílám za sebou celkem čtyři bajty ve správném místě protokolu (LNAb, ANTb, PAb, TXb). Každý nabývá jen hodnot 255 nebo 0 a hodnoty znamenají zapnuto nebo vypnuto.

Závěry

Jak jsem psal v úvodu, u supervidláckých věcí se není čím chlubit. Přesto jsem je na přání čtenářů jako námět uvedl, aby čtenář viděl:
- že si dílčí algoritmy zkouším samostatně a teprve potom je použiji ve složitějších strukturách
- že programy převážně kreslím a když to nejde jinak, tak dopíšu pár řádek
- že si občas zjednodušuji život supervidláckým provedením, tj. takovým, které umím rychle napsat. Erudovaný programátor by to dělal pravděpodobně jinak.

Vlastní sekvencer nemá u stanice praktické využití. Proto byl PC kontrolér rozšířen o další algoritmy, jako jsou spínací hodiny (spínačky) napájecích zdrojů, voltmetry napájecích napětí, voltmetry směrových odbočnic PA, o astro část pro výpočet dat pro nastavování astronomické montáže Skywatcher (směr hlavního laloku antén) a pro nastavování Doppleru v TCVRu.

 

 

TU 73, Mira, ok1ufc