» »

COM in Visual Basic

COM in Visual Basic

ivek26 ::

Rad bi povezal mikrokontroler (89c2051) z računalnikom preko COM porta. Kako naj to izvedem v Visual basicu. Rad bi bral in pošiljal podatke. Prosim za pomoč. Lp

Tutankhamun ::

Obstaja objekt comm port v toolboxu.
AMD Phenom QUAD 9950 Black Edition, 8GB

ivek26 ::

To vem ,kako ga pa uporabim? Prosim za kak primer če je mogoče? Lp

Tutankhamun ::

Ja, js nimam več VBja. Uglavnem moreš nastavt parametre
MSComm1.CommPort = 1
MSComm1.Settings = "19200,N,8,1"

Pol morš vrjetn odpret port
MSComm1.Open

Pol pa pošiljaš pa bereš.

Drgač sm pa neki najdu na teli strani čist spodi.
AMD Phenom QUAD 9950 Black Edition, 8GB

Nitro Tech ::

Za posiljanje podatkov naredi tole:

Private Sub Form_Load()


MSComm1.CommPort = 1    '  Uporabi COM1. Obvezno, ce mas vec com portov na PC-ju

MSComm1.Settings = "2400,N,8,1"    ' 2400 baud, brez paritete, 8 data bitov, 1 stop bit

MSComm1.DTREnable = False     ' DTR linijo na low, da preprecis reset kontrolerja
 
MSComm1.PortOpen = True  ' sedaj odpres port

End Sub


Private Sub CmdSend_Click()

MSComm1.Output = Chr$(DATA1) & Chr$(DATA2) & Chr(DATA3)   ' poslali bomo 3 razlicne podatke iz spremenljivk
End Sub
' Ce ti dela cip z nizkim taktom daj funkcijo posiljanja podatkov v zanko in ponovi ene parkrat. 


Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False    ' Ko zapiras program (formo), zapri se vrata za sabo!
End Sub



Tale koda je za null-modem kabel. Ce ne ves kaj je to si malo pogooglaj ali pa potem vprasaj. Za sprejemanje podatkov bos moral narediti podobno. Na kontrolerju moras imeti enake nastavitve UARTa (2400,N,8,1). Predlagam da ne zacnes z 19200 baud, ker lahko da ti cip ne bo podpiral te hitrosti. Za testiranje je 2400 cisto dovolj.
format c: najde vse viruse

Zgodovina sprememb…

  • spremenil: Primoz ()

ivek26 ::

Sem probal tekole:

Private Sub Form_Load()
MSComm1.Settings = "4800,N,8,1"
MSComm1.CommPort = 1
MSComm1.InputLen = 3
MSComm1.PortOpen = True
MSComm1.RThreshold = 3

End Sub


Private Sub MSComm1_OnComm()
Dim Data As String
Data = MSComm1.Input
Text1.Text = Data

End Sub

Podatke mi sicer bere,ampak malo čudno,v text boxu sta zraven podatka še dva znaka.Prikazovati bi moral samo številke zraven pa sta še dva "ll".
Kako lahko to rešim?

Tutankhamun ::

tista znaka sta carriage return in line feed (\r\n (0x0a 0x0d))
Pomeni da greš na začetek in v novo vrstico. Lahko pa preden izpišeš na zaslon, vrednost iz com porta vpišeš v spremenljivko pol pa v tej spremenljivki zbrišeš zadnja 2 znaka.
AMD Phenom QUAD 9950 Black Edition, 8GB

ivek26 ::

Kako pa naredim to? Sem bolj začetnik v VB.

Tutankhamun ::

a kako, dobro vprašanje :).

Ker js ful mau delam u basicu, pa še to samo v excellu, ti bom dal en primer, sam nevem če je lih najbolši...

Dim Data As String
Data = MSComm1.Input

Data = Left(Data, Len(Data) - 2)
AMD Phenom QUAD 9950 Black Edition, 8GB

pexo ::

hello,

sem nov član tega foruma in teško našel tapravo temo :)

imam sledeč problem. uporabljam visual basic .net, rad bi komuniciral z neko napravo preko COM1. te ukaze ki ste jih napisali sem uporabljal, vendar mi javi napako :(
naprimer:
MSComm1.Settings = "4800,N,8,1"
MSComm1.CommPort = 1
MSComm1.InputLen = 3
MSComm1.PortOpen = True
MSComm1.RThreshold = 3

Name 'MSComm1' is not declared.
'Settings' is not a member of 'Integer'.
'CommPort' is not a member of 'Integer'.
.
.
.
.

Sem bol začetnik tega programa iščem po googlu pa mi ni nikol jasno. sej drgač tega nebi počel, ampak služba hoče da se to naučim :(

hvala za pomoč

Lp
Matic

majlo ::

Kolko te zastopim, rabiš ti en programček, ki ti bo izpisoval kaj dobiš preko com porta?
Ali boš tudi pošiljal podatke nazaj?

napiši mail al ga pošlji na zs, ti bom poslal en mali projekt za test com porta(v Visual studio 2005, visual basic). Tam ven boš lahko dobo vse kar potrebuješ.

LP

maš mail!

Zgodovina sprememb…

  • spremenilo: majlo ()

pexo ::

podatke bi posiljal in prejemal

majlo::
morem počakat da naložim visual studio 2005, ker jz mam visual basic .net 2003

lp vsem

Zgodovina sprememb…

  • spremenil: pexo ()

majlo ::

Sporoči kak je šlo
lp

pexo ::

majlo:
program deluje, vendar je problem ker pošilja ASCII kodo. rabil bil pa v HEX obliki. razen če mi zna kdo kako pomagat, da bi pošiljalo v HEX obliki.

problem imam še to, da mi javi Type 'MSComm' is not defined.

spodaj imam napisano tako:

Dim as MSComm
        Dim MSComm1 As MSComm      'New a MSComm control
        MSComm1 = New MSComm
        Dim Buffer As String         ' Buffer to hold input string

        MSComm1.CommPort = 1              ' Use the COM1 serial port
        MSComm1.Settings = "4800,N,8,1"
        MSComm1.InputLen = 3
        MSComm1.PortOpen = True
        MSComm1.RThreshold = 3    
    End Sub

        Dim MSComm1 As MSComm
        Dim Data As String
        Data = MSComm1.Input
        Text1.Text = Data
End Sub

Lp vsem

Zgodovina sprememb…

  • spremenil: Primoz ()

Keki ::

http://www.alfakan.si/
http://mihajerot.si/

Zgodovina sprememb…

  • spremenilo: Keki ()

pexo ::

Type 'MSComm' is not defined

kako odpravit to napako? čudo tehnike :)

Lp

pexo ::

Jutro,
Pa to me še zanima kako odpraviti napako. Morem še za izračun CRC naredit :(


Name 'vbFromUnicode' is not declared.

Public Function CRC16A(ByVal Buffer() As Byte) As Long

        Dim i As Long
        Dim Temp As Long
        Dim crc As Long
        Dim j As Integer
        crc = &HFFFF&
        For i = LBound(Buffer) To UBound(Buffer)
            Temp = Buffer(i) * &H100&
            crc = crc Xor Temp
            For j = 0 To 255
                If (crc And &H8000&) Then
                    crc = ((crc * 2) Xor &H1021&) And &HFFFF&
                Else
                    crc = (crc * 2) And &HFFFF&
                End If
            Next j
        Next i
        CRC16A = crc And &HFFFF

    End Function


    Private Sub Command1_Click()

        Dim aBuf() As Byte

        Dim crc As Long
        Dim p As String
        
        p = Text1.Text
        aBuf = StrConv(p, vbFromUnicode)
        crc = CRC16A(aBuf)
        Text2.Text = Hex(crc)

    End Sub

Zgodovina sprememb…

  • spremenil: Primoz ()

Keki ::

Type 'MSComm' is not defined

kako odpravit to napako? čudo tehnike :)

Lp


Ja MSComm ali ni definiran al pa v tistem bloku kode ni dostopen.
http://www.alfakan.si/
http://mihajerot.si/

pexo ::

ma kdo že narejen program, ker men nikakor ne gre :(
vedno se najde error. če ma kdo mi naj pošle po meilu je prikazan v mojem profilu. program naj bo čist enostaven. napišem sporočilo naprimer: 02 00 09 b0 01 18 43 in naj to pošle. in kar naprava odgovori mi naj prikaže isto. nič ASCII.

lp vsem

majlo ::

Kaj ti poslano ne dela?

pexo ::

ja dela, ampka problem je ker pošla v ascii kodi. jz pa ne znam iz programa vn popravit da bi pošiljalo normalno v HEX boliki. in naprimer če hočem poslat 02 00 09 FF B0 01 00 18 43 ta ukaz bo pretvorilo v ascii in poslalo kr neke čudne hex oblike. :( čudo tehnike pač

majlo ::

Probaj tako

serialPort.Encoding = System.Text.Encoding.GetEncoding(28591)
serialPort.DtrEnable = True
strOutput = Chr(&H24) 
serialPort.Write(strOutput)

lp

Zgodovina sprememb…

  • spremenil: Primoz ()

pexo ::

zadeva zdj deluje :). problem je še naslednje:

Chr(&H00). kot 00 v hex obliki noče poslat. če pa daš Chr(&H5A) pa pošlje 5A.

Pošljem tako
MyChar = Chr(02) & Chr(9) & Chr(&HFF) & Chr(176) & Chr(1) & Chr(1) & Chr(24) & Chr(&H43)
Dobim to:
02 09 FF B0 01 01 18 43 0D

če pa,

Pošljem tak
MyChar = Chr(02) & Chr(&H00) & Chr(9) & Chr(255) & Chr(176) & Chr(1) & Chr(1) & Chr(24) & Chr(&H43)
Dobim to:
02 0D

zgleda da je 00 neko zaključno sporočilo. Bi mi znali o tem povedat in pomagat.

Lp


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Visual Basic 6 branje RS232

Oddelek: Programiranje
9867 (685) cila22
»

[VB] Komunikacija s serijskimi napravami

Oddelek: Programiranje
412315 (1589) mNeRo
»

C++

Oddelek: Programiranje
71431 (1193) zdravcc
»

API+VB

Oddelek: Programiranje
262112 (1816) webblod
»

Odpiranje dat.exe v VB

Oddelek: Programiranje
123007 (2800) webblod

Več podobnih tem