Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: mscomm input

sanderz [31.10.2004 21:55:58]

#

Olisiko tietoa kuinka saisin vastaanotettua mscomm komennolla com portilta 01 arvon? Olen onnistunut vastaanottamaan ja tulostamaan arvon 1 tekstiboxiin, mutta tämä tapahtuu vasta sen jälkeen, kun portille saapuu toinen arvo vaikka 02. Eli OnComm käynnistyy siis vasta kun bufferiin on saapunut arvot 01 ja 02 ja tästä poimii siis tekstikenttään 1:sen ja taasen 2 tulostuu sitten kun portille tulee uusi kaksinumeroinen arvo jne. Miten siis saisin poimittua bufferista tuon arvon 1, silloin kun se saapuu portille eikä vasta sitten kun seuraava arvo ilmestyy sinne.

BadSource [01.11.2004 08:01:00]

#

MSComm:lla on ominaisuus RThreshold, jossa määritellään kuinka paljon dataa on pitänyt tulla puskuriin ennen kuin OnComm käynnistetään, eli tarkista tuon arvo. Tuleeko data portilta muodossa "01" vai "01" + vbCrLf eli rivinvaihto perässä? Ensimmäisessa tapauksessa RThreshold:n arvon tulisi olla 2 ("0" ja "1") ja jälkimmäisessä 4 ("0", "1", CarrierReturn ja LineFeed), jotta tulos luettaisiin aina yhden arvon saavuttua.

sanderz [01.11.2004 11:25:19]

#

Tarkastelin hieman lisää tuota dataa ja sen muoto onkin "1" (tällä koodilla MSComm1.Output = Chr$(1)).
Mutta vaikka vaihdan RThresholdin arvoksi 1, tulos on sama eli tekstiboxiin tulostuu "1" vasta kun portille on tullut seuraava data.
Tällä koodilla tulostan inputin:

Private Sub MSComm1_OnComm()
Dim sData As String
Dim lLowByte As Long
Dim lWord As Long
If MSComm1.CommEvent = comEvReceive Then
    sData = MSComm1.Input
    lLowByte = Asc(sData)
    lWord = lLowByte
    Text1.Text = CStr(lWord)
End If
End Sub

BadSource [01.11.2004 12:06:29]

#

Selvitä tuon sDatan pituuden

sData = MSComm1.Input
Debug.Print Len(sData) '<-lisää tämä rivi, niin näet tuon sDatan merkkien määrän

Edit: tyop, toyp, typo...

sanderz [01.11.2004 14:13:40]

#

Testasin ja tuo tulosti sarjan
_1_
_1_

nuo alaviivat on välilyöntejä ja ensimmäisen kerran kun portille tulee "1" ei tapahtunut tuossakaan mitään. Tekstikenttään tuli 1 ja 6 ja ensimmäiseksi ei mitään, kun lähetin arvot 1, 6, 7 vuorollaan.
Jos vaihdan Rthresholdin esim. 4 kestää numeroiden tuleminen tuohon tekstikenttään, vielä kauemmin.
Nyt
MSComm1.RThreshold = 1
MSComm1.InputLen = 0

BadSource [02.11.2004 07:16:35]

#

Missä vaiheessa tuo sDatan pituus tulostuu Immediate-ikkunaan? Kokeile testa lähettämällä ensin yhden merkin ja sen jälkeen kaksi merkkiä, jos se vain on mahdollista. Kokeile myös seuraavaa:

Debug.Print Len(sData) '<-muuta tämä muotoon
Debug.Print "Merkkejä:" & Len(sData) & " Bufferissa jäljellä:" & MSComm1.InBufferCount

Miten alustat portin? Eli mitkä Com-portin asetukset sinulla on käytössä?

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta