Opět RS232   zodpovězená otázka

VB.NET, Hardware

Potřebuji po RS232 komunikovat s multimetrem. Nejdřív jsem si komunikaci vyzkoušel pomocí programu Terminal. Už tady jsem zjistil dost nepochopitelnou věc. Bez problémů multimetr nakonfiguruji, ale když dám :READ? (příkaz pro čtení z multimetru) nic se neděje. Když zavřu COM a znovu jej otevřu, dostanu první znak (znaménko +). Znovu zavřu a otevřu a dostanu druhý znak. A tak pořád dokola, až mám celý výsledek.

Samozřejmě potřebuji ten výsledek dostat do programu k dalšímu zpracování. Ten program by měl být ve VisualBasicu 2005 Expres Edition. Směrem do multimetru je všechno bez problémů, ale to čtení dat se mi nedaří. Poslední kód mám takto

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click       
        Dim Port1 As New System.IO.Ports.SerialPort()
        Port1.PortName = "COM1"
        Port1.BaudRate = 9600
        Port1.DataBits = 8
        Port1.StopBits = IO.Ports.StopBits.Two
        Port1.Parity = IO.Ports.Parity.None
        Port1.Handshake = IO.Ports.Handshake.None
        Port1.ReadTimeout = 10000
        Port1.DtrEnable = False
        Port1.Open()
        Port1.WriteLine(":READ?")
        Port1.Close()
        Port1.Open()
        TextBox1.Text = Port1.ReadChar()
        Port1.Close()
        Port1.Dispose()
    End Sub

Z reakce multimetru je jasné, že příkaz čtení do něj příjde. Jenže v požadovaném čase nepříjde žádná odpověď. Zkoušel jsem ten čas prodloužit, taky jsem to zkoušel bez toho opětovného zavření a otevření a místo ReadChar dát ReadByte a ReadLine.

No a vrcholem je, že data v multimetru čekají. Pokud se připojím přes zmiňovaný Terminál, uvedeným postupem všechno přečtu.

Napadá někoho jak z toho ven?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

A pro doplnění ještě jedna zkušenost. Ty data v multimetru opravdu čekají. Když použiji Hyperterminal, tak hned po připojení všechno přečtu. Přitom nepoužívám žádné hardwarové řízení!

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zdravím, podobnou věc jsem řešil při komunikaci s ovládacím prvkem. Doporučuji vyzkoušet : snížit Readtimeout na 50, za příkaz "READ?" vložit "sleep(400)" (nutný Imports system.threading.thread). Aplikace tak počká až externí přístroj připraví data ke čtení. Také "DTRenable = TRUE" v mém případě mělo vliv na funkci. A vícenásobné zavírání a otvírání portu bych vypustil.

Jan.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback