pliki wsadowe *.BAT i ich mozliwości, COM1 AUX i nie tylko
dex - 21 Wrz 2006 20:51
Mam pytanie :
Czy za pomoca plików wsadowych mozna wysyłac łanuch znaków z tego pliku przez port? Zrobiłem pewien sterownik i potrzebuje zadawac mu sekwencje przez port szeregowy. Program oczywiście jakiś myśle do tego zrobić lepszy, typu czytaj z pliku tekstowego i wyślij na port.
Ale zastanawiam się czy do szybkiego testu nie mozna by wykorzystać plików sadowych.
Chciałbym po prostu wysłać na port szeregowy powiedzmy znaki "a12345a" , pauza 2sek "b54321b" itd.
Kiedyś za dosu wiem że mozna było pościć plik przez port szeregowy za pomoca chyba komendy print aux1(com1?).
mbo - 21 Wrz 2006 20:56
Nic się w tym względzie nie zmieniło.
Polecenie copy też się do tego nada.
dex - 21 Wrz 2006 21:00
czyli jak? w pliku bat wpisuje w lini "copy a12345a aux1" ?
A jak zrobic pauze 2 sekundową ?
studi - 21 Wrz 2006 21:00
Witam,
proponuje rozwiązania takie jak
copy /b plik com1
modyfikując można pisać do rs'a na bierząco poprzez copy /b con com1 a aby zakończyć transmisję wysłać <ctrl><z>
lub bezpośrednio z konsoli echo tekst > com1
Zapis który podałeś wysłał by plik o nazwie a12345 a nie sekwencję a12345
Aby wysłać sekwencję a12345 na com1 podaj echo a12345 > com1
Pozdrawiam
dex - 21 Wrz 2006 21:06
Ale chodzi o to ze ja nie chce przesłać całego pliku od poczatku do końca
copy , tylko wartości ktore bedą w pliku wpisane powiedzmy w kolejnych liniach:
plik.bat
start:
a12345a
pauza 2sekundy
b45321b
..
c123c
d784d
end
W tej chwili wstukuje to przez hypertetrmianal ale chiałbym zadać pewną sekwencje zapisaną w pliku.
paweliw - 21 Wrz 2006 21:13
Zerknij może to coś Ci pomoże http://ik1.kik.pcz.pl/so/?page=57&action=rozdz&id=9&idr=30, poszukaj też informacji na temat przetwarzania wsadowego w DOS-ie.
dex - 21 Wrz 2006 21:57
dzieki!
no więc chodziło mi głownie o "echo a12345 > com1 "Jak dokonać konfiguracji portu pamiętam że gdzieś sie wpiswało bezpośrednio 19200 8E1 , tylko gdzie?
Czy jest jakiś sposob na opoznienie czasowe, czyzby trzeba było coś inkrementowac i sprawdzac if-em?
studi - 21 Wrz 2006 22:06
Problem w tym, że w standardowym interpreterze komend nie ma możliwości ustawienia opuźnienia czasowego.
Znam dwa rozwiązania tego problemu:
1. napisać własny program robiący pauzę np 1 s i wielokrotnie go w pliku bat wywoływać
2, zainstalować rozszerzony interpreter komend tcmd znany w czasach DOS'a pod nazwą 4DOS, ma on bardzo rozbudowane komendy dla plików bat łącznie z pętlami DO...LOOP, FOR....NEXT itd i w ten sposób zrobić opuźnienie czasowe.
Może są bardziej wyrafinowane metody lub ładniejsze, ale jeśli ma być do testów tylko to ta będzie najszybsza.
Co do konfiguracji portu to np: mode com1 19200,n,8,1
H:\>mode /?
Konfiguruje urządzenia systemowe.
Port szeregowy: MODE COMm[:] [BAUD=b] [PARITY=p] [DATA=d]
[STOP=s] [to=on|off] [xon=on|off] [odsr=on|off]
[octs=on|off] [dtr=on|off|hs]
[rts=on|off|hs|tg] [idsr=on|off]
Stan urządzenia: MODE [urządzenie] [/STATUS]
Readresowanie drukowania: MODE LPTn[:]=COMm[:]
Wybór strony kodowej: MODE CON[:] CP SELECT=yyy
Stan strony kodowej: MODE CON[:] CP [/STATUS]
Tryb wyświetlania: MODE CON[:] [COLS=c] [LINES=n]
Szybkość powtarzania klawiatury: MODE CON[:] [RATE=r DELAY=d]
dex - 25 Paź 2006 13:17
Co do tego opoźnienia czasowego mam jeszce pytanie, załozmy ze napisąłem w pascalu program sekunda.exe, który po uruchamieniu czeka sekunde i kończy działanie.
Jak zrobić by bat po wywołaniu tego programu, poczekał do jego zakończenia nim przejdzie do natepnej lini.
studi - 25 Paź 2006 16:59
Bat wykonuje kolejną komendę dopiero po tym jak poprzednia zwróci zakończenie, więc albo twoja sekunda działa o wiele szybciej, albo zwraca zakończenie zanim istotnie sie zakończy.
dex - 25 Paź 2006 20:03
Racja działa