Stránka 1 z 4
Visual basic 2010- com port
Napsal: 24 kvě 2021, 14:59
od scorpions-cz
Zdravím.
Začínám se trochu učit s VB. Nevím jak nastavit v programu com port pro odesílání a příjem dat.
Mám tento kód:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim data As String = TextBox1.Text
Using com11 As IO.Ports.SerialPort =
My.Computer.Ports.OpenSerialPort("com11")
com11.WriteLine(data)
End Using
End Sub
text z textového pole se mi po stisku tlačítka odešle na port 11.To funguje dobře. Zde je však COM11 pevně nastaven v kódu. Já bych však potřeboval ho umět měnit. tak abych si ho zvolil v jiné části programu a on se mi promítl do tohoto kódu.
Něco jako COM X a X bych přiřazoval různá čísla dle potřeby.
Poradí Někdo?

Napsal: 24 kvě 2021, 15:29
od termit256
Kdyz si ten port nekde nadefinujes jako globalni promennou ti nefunguje?
Napsal: 24 kvě 2021, 17:43
od mihal
Matne si spominam že musíš port aj otvoriť. A ten obsah "xxx" daj value toho kde to nastavuješ.
Napsal: 24 kvě 2021, 17:46
od scorpions-cz
Právě s tou proměnnou mi to nejde, nebo dělám někde chybu.
mihal můžeš nastínit jak s tím value? Jinak v tom kódu se port otevře.
A ještě jedna věc, jde "nějak udělat" aby to odesílalo i znaky s diakritikou?
Napsal: 24 kvě 2021, 21:06
od petrfilipi
Doporučuji ti prostudocat knihu Bergharda Kainky Využití rozhraní PC pod Windows.
Kniha je na ulozto.cz. Já používat to druhou polovinu knihy pro Delphi a vše funguje k mé naprosté spokojenosti.
PF
Napsal: 24 kvě 2021, 21:23
od termit256
scorpions-cz píše:Právě s tou proměnnou mi to nejde, nebo dělám někde chybu.
Problem mas s globalni promennou obecne, nebo v tom ze ti to nefunguje s tim portem? Na prvni pohled nevidim nejaky zrejmy duvod proc by to nemelo fungovat, ale ve VB delam jen dost okrajove, takze ruku do ohne bych za to nedal

A nemam jak to ted vyzkouset.
Mrkni treba tady, resi neco podobneho.
https://www.vbforums.com/showthread.php ... erial-port
Napsal: 24 kvě 2021, 21:38
od rnbw
Vo Visual Basicu som v zivote nerobil, ale povedal by som podla syntaxe, ze miesas dokopy dve veci - nazov premennej/objektu:
scorpions-cz píše:Using com11 As IO.Ports.SerialPort =
a nazov portu:
My.Computer.Ports.OpenSerialPort("com11")
Takze namiesto nazvu premennej/objektu
com11 daj len napr.
com (ak to nie je nejake rezervovane slovo). Ten bude vzdy rovnaky.
A nazov portu
"com11" je obycajny retazec. Namiesto neho tam mozes dat nazov tej globalnej premennej alebo niecoho ineho, do coho nastavis spravny port.
Napsal: 24 kvě 2021, 21:43
od scorpions-cz
rnbw
To možná jo, ale pokud se neshoduje název portu s názvem objektu tak to nefunguje
oprava

tak to by asi šlo, zkusím to.
Napsal: 24 kvě 2021, 21:43
od mihal
No ja som používal tak 15rokov dozadu MSCOMM32.OCX a port sa nastavoval nejak MSComm1.CommPort = Combo1.Text kde bolo na výber číslo portu ale presný syntax už odvial čas. Matne si spomínam že som s tým tiež zápasil, mal som to dlho cez sériu If ale potom som niekde našiel správny syntax, no, bolo to dávno.
Napsal: 24 kvě 2021, 21:51
od termit256
scorpions-cz píše:To možná jo, ale pokud se neshoduje název portu s názvem objektu tak to nefunguje

V teto ukazce kodu primo od M$ s tim zadny problem nemaji.
Public Function ReceiveSerialDataPort8() As String
' Receive strings from a serial port.
Dim returnStr As String = ""
Dim com1 As IO.Ports.SerialPort = Nothing
Try
com1 = My.Computer.Ports.OpenSerialPort("COM8", 9600, Parity.None, 8, StopBits.One)
com1.ReadTimeout = 10000
Do
Dim Incoming As String = com1.ReadLine()
If Incoming Is Nothing Then
Exit Do
Else
returnStr &= Incoming & vbCrLf
End If
Loop
Catch ex As TimeoutException
returnStr = "Error: Serial Port read timed out."
Finally
If com1 IsNot Nothing Then com1.Close()
End Try
Return returnStr
End Function
Napsal: 24 kvě 2021, 21:59
od scorpions-cz
Dík.
Teď jsem to zkoušel podle rnbw a začalo to fungovat.
Dim X As String
X = "com6"
Dim data As String = TextBox1.Text
Using com As IO.Ports.SerialPort =
My.Computer.Ports.OpenSerialPort(X)
com.WriteLine(data)
Ještě jde nějak vyřešit ta diakritika?

Napsal: 24 kvě 2021, 22:37
od termit256
Co ti to vlastne posila v hexu kdyz pouzijes diakritiku?
Sedi to podle tohoto?
Nebo tam mas nad 127 jen otazniky nebo nebo podobneho?
https://cs.wikipedia.org/wiki/Windows-1250
Napsal: 24 kvě 2021, 22:53
od scorpions-cz
když použiju písmeno s diakritikou, tak je tam ?
Napsal: 24 kvě 2021, 23:05
od termit256
Musis to prekodovat.
Zkus to treba pomoci muj_port.Encoding = System.Text.Encoding.GetEncoding(1250)
Napsal: 24 kvě 2021, 23:16
od scorpions-cz
Dík. dneska už do toho čučet nebudu, zítra to zkusím a dám vědět.