Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Com portti

Milu [20.12.2003 15:43:09]

#

Helppiä..

VB:lle

Miten pitäis toteuttaa com portin luku, kun lukiessa nopeudella 9600 ,N,8,1
mutta Puskurimuisti täyttyy liian nopeasti.

Laite lähettää tietoa.

Numero1, numero2, kytkintila1, kytkintila2

numero1 on maxsimissaan 65536 ja minimissään 1
numero2 on maxsimissaan 4096 ja minimissään 0

kytkintilat ovat joko 1 tai 0

Luvun yksi ja kaksi eteen olen laittanut pituus merkin montako merkkiä numero1 sisältää.

Pituus1, numero1, pituus2, numero2, kytkin1, kytkin2, 13, 10

Laitoin jonon perään merkin 13,10 (Vbcrlf) ja luin tietoa.

    Timer1.Enabled = False

    MSComm1.InputLen = 1

Do
    datain = datain & MSComm1.Input

    Loop Until InStr(datain, vbCrLf)

    Timer1.Enabled = True

Luku hommeliin hyppään timer1 avulla Interval=1

Ainoastaa lukemalla kokopuskurin tyhjäks kerralla

MSComm1.InputLen = 0
datain = MSComm1.Input

Silloin puskuri ei täyty, mutta miten erottelen tiedot sieltä?

Laitteen lähettämää nopeutta kun ei kai voi suurentaa max. 9600

Veikka71 [21.12.2003 01:00:44]

#

Moro!

Itse lukisin puskurin tyhjäksi juuri noin ja lisäisin puskurin sisällön aina merkkijonon perään.

Dim DataIn as String
Dim Paikka as integer
Dim YksiTieto as string

MSComm1.InputLen = 0
datain = datain & MSComm1.Input

'Testataan onko kokonainen tieto tullut (Monesko merkki on Vbcrlf)
paikka=instr(datain,Vbcrlf)

if Paikka>0 then
   'Jos on, luetaan erotinmerkkiin saakka muuttujaan
   'yksitieto
   yksitieto=left(datain,paikka)
   'Jätetään seuraavan tiedon rippeet muuttujaan datain
   datain=right(datain,len(datain)-paikka)

   'TÄSSÄ SITTEN TEHTÄIS JOTAIN TUOLLE YKSITIETO MUUTTUJASSA OLEVALLE TIEDOLLE

end if

Ja koko tuo hässäkkä Timerin sisällä, lukutiheys saa olla suhteellisen harvakin. Toivottavasti käsitin ongelman oikein.

Milu [21.12.2003 05:21:26]

#

Juu kiitti.

Vähän samanllailla toteutin itsekkin, ei nyt ihan noin lyhyellä rivimäärällä, mutta ajatus sama.

Täytyy vielä muutaa noilla left ja right käskyillä se.

Onko tuohon vielä muuta mahdollisuuta kun ne numero1 ja numero2 ovat joskus eripituisia kuin merkitä ne jotenkin.

laitoin siihen nyt A,B ja C merkit, että tiedän mistä seuraava alkaa ja loppuu

esim. tietoa tulisi


A,65536,B,4096,C,1,0

tai

A,1000,B,0,C,1,0


Sitten mid:llä silmukassa lukee A ja B välistä tiedon, B ja C välistä,
C jälkeen kaksi seuraavaa olisivat jo sitten kytkintietoa.

Nuo kaikki tiedot täytyy saada talteen, mutta jos puskuriin on tullut enemmän ajattelin dim:llä tallentaa ne taulukkon talteen ja vain viimeksi tulleilla päivitän näyttöön lukemat.

Tuo numero1 on pulssin pituutta 2us resoluutiolla ja numero2 on jännitetietoa millivoltteina.

Niitä tietoja tulisi alustavalla systeemillä maksimissaan 100 kertaa sekunnissa ja pitäis ehtiä piirtämään näyttöönkin asiat.

Veikka71 [21.12.2003 15:36:43]

#

>A,65536,B,4096,C,1,0

Hmm, eikö yksinkertaisempaa olisi lukea tieto aina seuraavaan pilkkuun asti.. Turha vaihe toi ABC liennee.

Esim Tieto olisi "65536,4096,1,0"

Dim i as integer
dim mJono as string
Dim Paikka as integer

mjono="65536,4096,1,0"
For i=0 to 3
   Paikka=instr(mJono,",")
   select case i:
      case 0:
         numero1=val(left(mjono,paikka))
      case 1:
         numero2=val(left(mjono,paikka))
      case 2:
         kytkintila1=val(left(mjono,paikka))
      case 3:
         kytkintila2=val(left(mjono,paikka))
   end select
   'Karsitaan mjonosta luettu tieto pois
   mjono=right(mjono,len(mjono)-paikka)
next i

Pientä säätöä voipi olla, mutta ajatus toi. Tämä juttu toimii vaikka tiedon pituus vaihtelisi kuin..

Milu [21.12.2003 17:08:10]

#

Siellä lähtöpäässä pilkulla erotetaan muuttujat, lukiessa sitä pilkkua ei näy.

sillon kun lähettää esim. 65536,4096,1,0
lukiessa se näkyy 65536409610 ne tulee yhdessä pötkössä,pystyykö noita muuten erottellee?
vai pitääkö se sitten lähettää.

65536,","4096,","1,","0
ajateli vaan noiden pilkkujen tilalle laittaa kirjaimet, että
tiedä A-B välissä olevan numero1 , jos jostain syystä kaikki merkit eivät tulisikaan perille tai muuten tilttaisi välillä.

Vastaus

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

Tietoa sivustosta