Visual Basic 2010 čtení ze seriového portu

Počítače stolní, notebooky, tablety, tiskárny, scanery a vše, co nějak souvisí s PC

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
markoni
Příspěvky: 2312
Registrován: 30 říj 2006, 00:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

Visual Basic 2010 čtení ze seriového portu

#1 Příspěvek od markoni »

Zdravím
Hledal jsem pomocí googla ale nenašel.Potřebuji testovat vstupní linky DSR,DCD,CTS,RI na sériovém portu.Nahazování výstupních linek jako je třeba DTR je snadné

Kód: Vybrat vše

SerialPort1.DtrEnable = True

ale testovat vstupní linky to nevím díky
Čím víc dál se snažím se učit tím poznávám že nic nevím .Poslední 2 roky mám kvadruparézu
hakamusai
Příspěvky: 939
Registrován: 17 dub 2007, 00:00

#2 Příspěvek od hakamusai »

Co na to používáš ? (nějakou komponentu SerialPort aj. ?)
Uživatelský avatar
markoni
Příspěvky: 2312
Registrován: 30 říj 2006, 00:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

#3 Příspěvek od markoni »

Používám na to komponentu SerialPort1 která je obsažena ve Visual Basicu 2010 express
Čím víc dál se snažím se učit tím poznávám že nic nevím .Poslední 2 roky mám kvadruparézu
hakamusai
Příspěvky: 939
Registrován: 17 dub 2007, 00:00

#4 Příspěvek od hakamusai »

Se samotnou komponentou neporadím -Visual Basic 2010 express neznám ,ale je to ve všech jazycích o tom samým.
Tady najdeš kompletní popis. Na ovládání a čtení stavu je funkce SetCommMask a GetCommMask (možná má i ta komponenta nějakou property s podobným názvem).
Na čtení stavu DSR je údajně Visual Basicu SerialPort1.DsrHolding. Zkus kouknout sem.
Uživatelský avatar
markoni
Příspěvky: 2312
Registrován: 30 říj 2006, 00:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

#5 Příspěvek od markoni »

Díky za pomoc odzkoušeno a funguje

Kód: Vybrat vše

SerialPort1.DsrHolding  ' DSR 
SerialPort1.CDHolding   ' DCD
SerialPort1.CtsHolding   'CTS

k úplné spokojenosti my chybí ještě jedna linka RI našel jsem jen pouze tři Holding kdyby někdo věděl díky
Čím víc dál se snažím se učit tím poznávám že nic nevím .Poslední 2 roky mám kvadruparézu
Uživatelský avatar
mtajovsky
Příspěvky: 3728
Registrován: 19 zář 2007, 00:00
Bydliště: Praha

#6 Příspěvek od mtajovsky »

Použijte PinChanged event. RI je nestabilní signál. Podrobnosti například:
http://stackoverflow.com/questions/1162 ... g-property
Uživatelský avatar
markoni
Příspěvky: 2312
Registrován: 30 říj 2006, 00:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

#7 Příspěvek od markoni »

Ve Visual Basic 6 jsem nainportoval tuhle knihovnu viz příloha rar vrchní příloha je oskenování zdroják čtečky telefonní karty (starého typu) který jsem si už je dávno napsal a tam nedělají žádné ciráty s linkou RI .Já vím vývoj nezastavíš ale zatím jsem nepochopil co píšete výše jak tu linku RI testovat jaká by byla syntaxe díky
Přílohy
tečka telefoních karet.jpg
(251.85 KiB) Staženo 103 x
PORTS.rar
(22.12 KiB) Staženo 116 x
Čím víc dál se snažím se učit tím poznávám že nic nevím .Poslední 2 roky mám kvadruparézu
hakamusai
Příspěvky: 939
Registrován: 17 dub 2007, 00:00

#8 Příspěvek od hakamusai »

Knihovna je starého data (nejspíš pro Win98).Je pravděpodobný,že nebude fungovat korektně.
Uživatelský avatar
mtajovsky
Příspěvky: 3728
Registrován: 19 zář 2007, 00:00
Bydliště: Praha

#9 Příspěvek od mtajovsky »

RI nemůžete testovat pomocí třídy .NET SerialPort přímo, ale musíte se chytit na událost změny na portu a podle členu enumerace:

SerialPinChange.Ring

detekovat změnu na portu. Tak můžete detekovat všechny změny. Příklad handleru v C#:

Kód: Vybrat vše

    static void port_PinChanged(object sender, SerialPinChangedEventArgs e)
    {

        if (e.EventType == SerialPinChange.Break)
        {
        }
        else if (e.EventType == SerialPinChange.CDChanged)
        {
        }
        else if (e.EventType == SerialPinChange.CtsChanged)
        {
        }
        else if (e.EventType == SerialPinChange.DsrChanged)
        {
        }
        else if (e.EventType == SerialPinChange.Ring)
        {
                // do something here
        }
    }
Uživatelský avatar
markoni
Příspěvky: 2312
Registrován: 30 říj 2006, 00:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

#10 Příspěvek od markoni »

V C# nejsem kovaný potřeboval bych to ve Visual Basicu díky
Čím víc dál se snažím se učit tím poznávám že nic nevím .Poslední 2 roky mám kvadruparézu
Uživatelský avatar
mtajovsky
Příspěvky: 3728
Registrován: 19 zář 2007, 00:00
Bydliště: Praha

#11 Příspěvek od mtajovsky »

Já nejsem bejsikář, ale je to v podstatě stejné. Takže event handler musí splňovat signaturu pro EventHandler delegáty:

Kód: Vybrat vše

<SerializableAttribute> <ComVisibleAttribute(True)> Public Delegate Sub EventHandler ( sender As Object, e As EventArgs)


Například:

Kód: Vybrat vše

 Sub onPinChanged(sender As Object, e As EventArgs)
        Console.WriteLine("SerialPort status changed.")
End Sub


Někde máte definovánu instanci třídy SerialPort:

Kód: Vybrat vše

Dim seriaPort As SerialPort = New SerialPort()



Třída SerialPort má definovánu událost PinChanged. Do této události přidáte svůj handler:

Kód: Vybrat vše

AddHandler serialPort.PinChanged, AddressOf onPinChanged


V okamžiku, kdy dojde ke změně na portu, serialPort odpálí událost PinChanged a protože je na ní zaregistrován náš handler onPinChanged(), tak se spustí. Jako handler si v tom VB napište něco ve smyslu mého předchozího příspěvku.

Podrobněji o událostech:
http://msdn.microsoft.com/cs-cz/library ... t(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-4

P.S.: píšu to od boku bez ověření, neručím za nějaké chyby.
Odpovědět

Zpět na „Výpočetní technika“