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.
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.
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
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...
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
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ä?
Aihe on jo aika vanha, joten et voi enää vastata siihen.