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é
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.