Jak napsat v terminálu paket pro modemový přenos dat?
Moderátor: Moderátoři
Jak napsat v terminálu paket pro modemový přenos dat?
Nemám vůbec žádné zkušenosti s programováním, přesto
bych potřeboval vytvořit paket, který vyšlu z PC přes terminál
RS-232 do modemu, který správně naprogramovaný paket pozná a odvysílá ven.
Od výrobce modemu jsem dostal pouze informaci, jak takový paket vypadá (viz. níže), podrobnější info nemám. Pokusil jsem se tak sestavit příkaz v několika osmibitových příkazech, ale modem tuto informaci nepřijímá. Proto prosím, jestli by mi mohl někdo pomoci napsat správný funkční příkaz. Díky, Kuba
Bajt / význam
0 / 5AH (90) – znak „Z“
1 / adresná část (1. místo) - požaduji 60
2 / adresná část (2. místo) - požaduji 0
3 / adresná část (3. místo) - požaduji 0
4 / adresná část (4. místo) - požaduji 0
5 / adresná část (5. místo) - požaduji 0
6 / typ telegramu C_VYZVA_N: 37H (55) – znak „7“
7 / příznaky pro vysílání zprávy (vysvětlení níže)
8 / adresa přijímače (nejméně významný bajt) - požaduji 0
9 / adresa přijímače - požaduji 0
10 / adresa přijímače (najvíce významný bajt) - požaduji 524
11 / délka zprávy pro přijímač (N)
12÷12+N-1 / zpráva pro přijímač - požaduji TEST
12+N / kontrolní suma (součet 1. až 12+N-1. bajtu)
Vysvětlení k Bajtu 7:
bit / význam
B0 / 1 – alfanumerické kódování
B2:B1 / 0:0 – schránka 0
B3 / 0 – negativní polarita signálu
B4 / 0 – rychlost vysílání 512 bps
B7-B5 / nevyužité
Tam kde je na konci napsáno požaduji znamená, že bych potřeboval, aby bit obsahoval.
Zde jsem se pokusil napsat paket včetně start a stop bitů, ale nefunguje:
0010110101000000001100000000010000000001000000000100000000010001101111
0000000001000000000100000000010000000101000000001100000000110001111001
Když pominu, že je máš nějak divně spřeházené, tak neznám terminál, do kterého by se dalo klofat binárně nuly a jedničky. Běžný sériový terminál to vezme jako 140 bytů.
Osobně bych těch 12+N bytů zapsala do souboru a pak dala terminálem poslat ten soubor.
kubaval píše:Ahoj, no já vůbec nevím jak se to provádí, tak jsem předpokládal že to bude chtít binární příkaz. Doporučuješ mi tedy převést paket do HEX???
Terminál posílá znaky, jaké do něj klofeš. Když napíšeš znak 0, pošle znak 0, což je byte 30h. Když napíšeš A, pošle byte 41h, když Z, pošle byte 5Ah. Takže napiš do souboru těch požadovaných 12+N bytů (asi to bude chtít nějaký hexa editor) a pak ten soubor (dlouhý 12+N bytů) pošli terminálem nebo ho zkopíruj přímo na COM port.
- po přijetí povelu ATD<tel. číslo> a následném navázání spojení
- je-li nastaven do automatického módu povelem ATA a přijme-li příchozí volání
- a další způsoby viz zde.
Takže nejprve musíte modem "naprogramovat" pomocí AT příkazů a po jeho přechodu do datového režimu můžete posílat data.
Všechny byte 0 - 12+N=1 (nebo 1 - 12+N-1? - to si ověřte) se sečtou a je jedno, jestli dekadicky nebo hexa. Součet je pořád součet, ne? Výsledek se ořeže na velikost 1 byte a zapíše se na pozici 12+N. Binárně, v datovém módu už mluvíme o binárních datech. Ne o znacích.kubaval píše:Promiň že jsem tak nechápavý, ale opravdu nevím. Znamená to, že ty byty převedu do decimálního čísla a ty potom všechny sečtu a výsledek zase převedu do HEX? Nebo prostě jen sečtu 1+2+3+4, atd. a výsledek součtu zapíšu v HEX podobě jako byte č. 12+N.
Poznámka: na byte číslo 10 chcete velikost větší než se vejde do 8 bitů.