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