Stránka 1 z 1

Visual Basic 2010 čtení ze seriového portu

Napsal: 08 led 2015, 14:46
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

Napsal: 08 led 2015, 15:20
od hakamusai
Co na to používáš ? (nějakou komponentu SerialPort aj. ?)

Napsal: 08 led 2015, 15:28
od markoni
Používám na to komponentu SerialPort1 která je obsažena ve Visual Basicu 2010 express

Napsal: 08 led 2015, 23:34
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.

Napsal: 09 led 2015, 12:48
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

Napsal: 09 led 2015, 14:55
od mtajovsky
Použijte PinChanged event. RI je nestabilní signál. Podrobnosti například:
http://stackoverflow.com/questions/1162 ... g-property

Napsal: 09 led 2015, 15:46
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

Napsal: 09 led 2015, 16:01
od hakamusai
Knihovna je starého data (nejspíš pro Win98).Je pravděpodobný,že nebude fungovat korektně.

Napsal: 09 led 2015, 16:44
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
        }
    }

Napsal: 09 led 2015, 19:31
od markoni
V C# nejsem kovaný potřeboval bych to ve Visual Basicu díky

Napsal: 09 led 2015, 20:01
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.