Stránka 1 z 1

Jak napsat v terminálu paket pro modemový přenos dat?

Napsal: 14 říj 2015, 16:06
od kubaval
Ahoj, obracím se na vás s prosbou o pomoc.
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

Napsal: 14 říj 2015, 18:50
od lesana87
To jsi jako do terminálu klofal ty nuly a jedničky? 8O
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.

Napsal: 14 říj 2015, 19:25
od kubaval
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???

Napsal: 14 říj 2015, 19:36
od Cowley
Ja co vim tak se do modemu pisou prikazy velkym pismem a nasleduje kombinace z cislic.
Nekde jsem mel seznam prikazu, kouknu po tom.

Napsal: 14 říj 2015, 19:38
od Cowley

Napsal: 14 říj 2015, 19:45
od lesana87
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.

Napsal: 14 říj 2015, 20:13
od kubaval
Děkuji oběma za pomoc, vyzkouším, snad to půjde. Kuba

Napsal: 14 říj 2015, 21:14
od kubaval
Lesano prosím, poraď mi ještě jak provedu kontrolní součet uvedených bytů. Děkuji

Napsal: 14 říj 2015, 22:15
od lesana87
Dyť to tam sám píšeš, sečteš byty 1 až 12+N-1. Přetečení do vyššího bytu se zahodí, bere se jen dolní byte součtu.

Napsal: 15 říj 2015, 00:01
od kubaval
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.

Napsal: 15 říj 2015, 01:09
od mtajovsky
Jestli jde o standardní Hayes modem, tak je třeba si uvědomit, že modem může být v povelovém nebo datovém módu. V povelovém módu reaguje na tzv. AT příkazy (attention commands), kterými se provádí například vytočení čísla protější strany, zavěšení a mnoho jiných. Viz například zde. Teprve až když modem přejde do datového módu, je možno přes něj posílat data. Po zapnutí je modem vždy v povelovém módu. Do datového módu může přejít následujícími způsoby:
- 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.

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.
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.

Poznámka: na byte číslo 10 chcete velikost větší než se vejde do 8 bitů.

Napsal: 15 říj 2015, 10:40
od kubaval
Sčítá se byte 1 až 12, tzn. že výsledek je 78? A tím ořezáním do 8 bitů jste to myslel jak? 78 se ještě rozpočítá nějakým dalším způsobem? To že se mi suma vejde do 8mi bitů ale zjistim pouze převodem do binární podoby, je to tak? Děkuji

Napsal: 15 říj 2015, 19:32
od lesana87
Koukám, že v těch převodech krapet plaveš. Do 8 bitů se vejde FF hexadecimálně, což je totéž jako 255 dekadicky nebo 377 oktalově nebo 11111111 binárně.
Takže 78 dekadicky se do bytu vejde, ale 524 ne, bez potřeby nějakého převádění. 524 ořezáno na 8 bitů je 12 (zbytek po dělení 256).