logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

pliki wsadowe *.BAT i ich mozliwości, COM1 AUX i nie tylko

dex 21 Wrz 2006 20:51 4414 10
REKLAMA
  • #1 3043877
    dex
    Poziom 27  
    Posty: 1299
    Pomógł: 40
    Ocena: 100
    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?).
  • REKLAMA
  • Pomocny post
    #2 3043905
    mbo
    VIP Zasłużony dla elektroda
    Posty: 19691
    Pomógł: 2333
    Ocena: 845
    Nic się w tym względzie nie zmieniło.
    Polecenie copy też się do tego nada.
  • REKLAMA
  • #3 3043915
    dex
    Poziom 27  
    Posty: 1299
    Pomógł: 40
    Ocena: 100
    czyli jak? w pliku bat wpisuje w lini "copy a12345a aux1" ?
    A jak zrobic pauze 2 sekundową ?
  • Pomocny post
    #4 3043920
    studi
    Poziom 20  
    Posty: 292
    Pomógł: 31
    Ocena: 6
    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
  • #5 3043945
    dex
    Poziom 27  
    Posty: 1299
    Pomógł: 40
    Ocena: 100
    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.
  • REKLAMA
  • #7 3044176
    dex
    Poziom 27  
    Posty: 1299
    Pomógł: 40
    Ocena: 100
    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?
  • Pomocny post
    #8 3044221
    studi
    Poziom 20  
    Posty: 292
    Pomógł: 31
    Ocena: 6
    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]
  • #9 3151507
    dex
    Poziom 27  
    Posty: 1299
    Pomógł: 40
    Ocena: 100
    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.
  • Pomocny post
    #10 3152166
    studi
    Poziom 20  
    Posty: 292
    Pomógł: 31
    Ocena: 6
    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.
  • REKLAMA
  • #11 3152946
    dex
    Poziom 27  
    Posty: 1299
    Pomógł: 40
    Ocena: 100
    Racja działa :)

Podsumowanie tematu

✨ Dyskusja dotyczy możliwości wysyłania ciągów znaków przez port szeregowy COM1 za pomocą plików wsadowych (*.BAT) w systemie DOS. Do przesyłania danych można użyć poleceń takich jak "copy /b plik com1" lub "echo tekst > com1". Standardowy interpreter poleceń nie obsługuje opóźnień czasowych, dlatego do wprowadzenia pauzy między wysyłanymi sekwencjami proponuje się napisanie prostego programu realizującego opóźnienie lub użycie rozszerzonego interpretera komend, np. 4DOS (tcmd), który umożliwia pętle i opóźnienia. Konfigurację portu szeregowego wykonuje się poleceniem "mode com1 19200,n,8,1". Pliki wsadowe wykonują kolejne polecenia dopiero po zakończeniu poprzednich, co pozwala na synchronizację zewnętrznych programów realizujących pauzy. Wskazano również źródła informacji o przetwarzaniu wsadowym w DOS-ie oraz przykłady użycia poleceń do komunikacji z portem szeregowym.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA