Warning: Illegal string offset 'name' in [path]/includes/functions.php on line 6439
RS-232 un VB6 problēma.
+

thread: RS-232 un VB6 problēma.

  1. #1
    Senior Member
    Aug 2006
    233

    RS-232 un VB6 problēma.

    Sveiki visapkārt.
    Ir projekts kurā vēlos komunicēt ar kontrolieri no datora caur com.Ir uzrakstīts viss kas vajadzīgs lai kontrolieris saņemtu komandas un atbildētu uz tām.Consoles variantā viss strādā.
    Tagad uzveidoju vb grafisko vidi ar pogām un dažādiem logiem.Spaidot pogas kontroliers visu dara tā kā nākas un arī atbild.Tik tālu viss ok.Problēma sākas kad gribu ielasīt buferī to ko sūta man kontrolieris atpakaļ.
    Saņemu tikai vienu baitu.To parāda viss ok.Bet man vajadzētu tā lai atsūta buferī teiksim 64 baitus un ja tur ir iekļauts teksts tunerOn tad lai šo saprotot attiecīgā logā parādas ON.Ar viena baita komunikāciju viss strādā ar if funkciju bet kā lai ielasa tos vairākus baitus.
    Kādi ir jūsu ieteikumi.Nezinu kā būtu pareizāk jo ja es te ievietošu kautkādus citus ascii simbolus tad man komandrindā būs nesmuki
    Šādi te man viņš strādā.

    Private Sub MSComm1_OnComm()
    Dim StrData As Variant 'define variable type as it is variant
    StrData = MSComm1.Input
    Text9.Text = StrData
    MSComm1.Output = StrData 'Aizsuta atpakall uztverto
    If StrData = "2" Then
    Text2.Text = "On"
    End If
    If StrData = "3" Then
    Text3.Text = "On"
    End If
    If StrData = "4" Then
    Text4.Text = "On"
    End If
    If StrData = "5" Then
    Text5.Text = "On"
    End If
    If StrData = "6" Then
    Text6.Text = "On"
    End If
    If StrData = "7" Then
    Text7.Text = "On"
    End If
    If StrData = "8" Then
    Text8.Text = "On"

    End If


    End Sub

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

  2. #2
    Moderator
    Mar 2008
    Ogre
    1,445

    MSComm1.InputLen = 1
    njaa, pat lasīt nemākam ko paši uzrakstījuši... nez ko nozīmē šī rindiņa? varu derēt, ka liela daļa koda tev ir copy/paste
    If it's worth doing, it's worth overdoing, right? / Tory Belleci, Mythbusters /

  3. #3
    Moderator
    Jan 2009
    Rīga
    4,417

    Tas nekas ka input LEN=1.
    Idejai:
    StrData = MSComm1.Input
    Text9.Text = text9.text + StrData
    if instr(text9.text,"tunerON") then txtTunerStatus.text="ON"
    if len(text9.text)>100 then text9.text="" 'te vajag kurtāk organizēt. Izdomā kā, jo man sāp galva
    Nav tas korektākais, bet ceru ka ideju saprati.

  4. #4
    Moderator
    Mar 2008
    Ogre
    1,445

    vo jautājums VB ".=" konstrukciju saprot?
    If it's worth doing, it's worth overdoing, right? / Tory Belleci, Mythbusters /

  5. #5
    Senior Member
    Mar 2003
    Rīga
    840

    vo jautājums VB ".=" konstrukciju saprot?
    Nekad neesmu redzējies iekš VB tādu. Domāju, ka nesaprot.

  6. #6
    Senior Member
    Apr 2006
    979

    Vai ir kāds pamatojums, kāpēc jāizmanto VB6, ja ir pieejama modernāka valoda - VB.NET, pie tam bez maksas?
    Pirmajā fremworkā (1.1) bija nedaudz problemātiski ar seriālo portu, bet sākot jau ar 2.0 ir pieejams System.IO.Ports "namespace", kurā ir seriālā porta klase.

    Starp citu, ļoti nelabi ar If'iem esi uztaisījis kodu. Ja nu vienīgi kompilators nenooptimizē, sanāk neefektīvs kods. Ir taču Select Case konstrukcija pieejama.
    Kaut kā šādi:
    :
    Select Case StrData
        Case "2"
            Text2.Text = "On"
        Case "3"
            Text3.Text = "On"
        'U.t.t
    End Select

    Un atbilde ansiusam - VB.NET saprot &= operatoru (VB6 nē), kas ir tas pats .= tikai VB.NET notācijā.
    Text9.Text &= StrData

+