Portál AbcLinuxu, 1. června 2025 22:59
Spravuji profesionální meteorologickou stanici (Meteos 5). Součástí dodávky je i program WinMeteo (samozřejmě pro Windows), který velice neochotně běží pod Wine. Dostal jsem od dodavatele i specifikaci protokolu, kterým meteostanice komunikuje skrz RS232 s PC, ale nemám v současnosti dost prostoru a času napsat program na obsluhu celého systému. Proto jsem sáhl po emulátoru QEMU.
Pod qemu mám rozjetý (legální) Windows 2003 server Standard Edition, ve kterém běží onen WinMeteo. Program funguje naprosto v pořádku, normálně komunikuje se stanicí přes COM2 namapovaný na /dev/ttyS1
v Linuxu.
Problém ovšem nastane v případě, kdy žádám o větší objem dat (tj. pokaždé, když chci downloadnout obsah paměti meteostanice). V okně, které zobrazuje statistiku připojení je vidět TX: 75B, RX: 277B. Od té doby se komunikace zadrhne a vše je ukončeno po cca 20 sekundách timeoutem.
Nejzajímavější však na celém problému je, že automatický download okamžitých hodnot (1x za minutu) projde úplně v pohodě, data se stáhnou, uloží a skript obsluhující informační systém vše v pořádku naimportuje do MySQL databáze. Komunikace s jiným přístrojem (GasMonitor Brüel & Kjæl na ttyS1 funguje jinak bez problému).
Celá věc mi nedala spát a po několika desítkách různých pokusů jsem si (se zavřenýma očima) půjčil od kolegy notebook s Windows XP, nainstaloval WinMeteo a tam se vše chovalo úplně normálně.
Nevěděl by, prosím, někdo recept jak "na to"? Možná jste již někdo řešil podobný problém.
Na závěr mého dotazu bych upřesnil pár detailů celého systému:
Jedná se o standardní 32-bitový PC, na kterém běží FC5.
stty hlásí:
[root@meteo ~]# stty -aF /dev/ttyS1 speed 57600 baud; rows 0; columns 0; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = undef; eol2 = undef; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0; -parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 -isig -icanon -iexten -echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
QEMU se spouští příkazem:
qemu -kernel-kqemu -m 128 -serial /dev/ttyS1 -hda Wserver2003.iso -cdrom winmeteo.iso -boot c\ -net nic -net tap
QEMU kompilované ze zdrojáků i s jaderným modulem KQEMU pod gcc 3.4.2.
Za případné odpovědi velice děkuji.
Výsledek je stejný, i když mu přidám paměti na 256 MB, 512 MB i více. Vzhledem k výsledku jsem nakonec uznal za dostačující mu nechat "jen" 128 MB paměti. Pro úplnost bych ještě dodal, že jsem si hrál i s nastavováním UART pro příslušný port.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.