[VB6] verschil mscomm debuggen & gewoon runnen

Pagina: 1
Acties:

  • mmy841
  • Registratie: Juli 2004
  • Laatst online: 09-07-2021
Ik heb volgend testprogramma gemaakt. Als ik op een knop druk moet er een karakter (of later een nummer uit een tekstfile) worden doorgestuurd naar de seriële poort, gevolgd door ESC + s

De data die ik uitstuur wil ik om te testen laten zien in een tekstvak txtGetal.
code:
1
2
3
4
5
6
7
8
9
Private Sub Form_Load()
    'indien de poort nog niet open is -> instellen & openen
    If MSComm1.PortOpen = False Then
        MSComm1.Handshaking = comNone
        MSComm1.Settings = "9600,N,8,1"
        MSComm1.CommPort = 1
        MSComm1.PortOpen = True
    End If
End Sub

code:
1
2
3
4
5
Private Sub cmdZendData_Click()
    'getal 8 (=chr 56) uitsturen, gevolgd door ESC en "s" (chr 27 en 115)
    MSComm1.Output = Chr$(56) & Chr$(27) & Chr$(115)
    txtGetal.Text = MSComm1.Input
End sub

Ik heb slechts 1 com poort op deze PC. Ik heb pin 2 +3 (RxD en TxD) verbonden voor de test. In hyperterminal kan ik controleren dat data die ik verstuur ook werkelijk ontvangen wordt.

Het probleem nu: Ik ontvang pas iets in het tekstvak als ik 2x op de knop druk. Na de eerst druk wordt het tekstvak leeggemaakt. Na de 2de druk verschijnt de data er.

Werk ik echter stap voor stap met de debugger, dan verschijnt de data wel direct na de 1ste druk op de knop.

In een ander topic hier kwam dit probleem ook voor. De persoon had dit opgelost door de connectie met de com-poort in form_load te plaatsen (zoals ik nu doe, zonder resultaat echter).

Gebruik ik RThreshold = 1 en gebruik ik het onComm event, dan wordt het comEvReceive ook pas getriggerd na 2x drukken op de knop (1x bij debuggen)

Weet iemand waar hier de fout kan zitten?

edit: als ik het volgende doe: MSComm1.Output = "test nummer 1 en nummer2" dan wordt er bij de 1ste klik op de knop wel "test num" verstuurd en ontvangen (onvollodige string - maar de rest volgt bij de 2de klik --> "mer 1 en nummer2test num")
edit 2: en bij het debuggen werkt dit natuurlijk wel perfect (wel na 2x klikken) :?

[ Voor 22% gewijzigd door mmy841 op 12-04-2005 10:17 ]


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 07-05 10:04
Zou pin 5 GND ( in geval van 9 polige stekker ) ook doen :)

Btw je moet de input blijven pollen want er wordt vanaf je hardware tot je vb app behoorlijk wat gebuffered, je hebt dus een timing probleem in je code.

[ Voor 64% gewijzigd door farlane op 12-04-2005 11:55 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • mmy841
  • Registratie: Juli 2004
  • Laatst online: 09-07-2021
met wat moet ik de gnd dan verbinden?

En in de code die ik voorlopig heb stuur ik toch gewoon enkele karakters door die ik dan onmiddellijk uitlees. Zoveel problemen ivm timing kan dat toch niet opleveren dan?

Als ik direct na txtGetal.Text = MSComm1.Input een msgbox laat zien, dan verschijnt de regel wel direct. Gebruik in een vertraging (bv. sleep) dan werkt het niet

edit: dit lijkt resultaat te geven:
code:
1
2
3
4
mscomm1.output "dit is een teststring - nummer 1, nummer 2,..."
sleep 1000
mscomm1.inputlen = 0
txtUitvoer.text = mscomm1.input


toch een timing probleem dus, als ik afga op de vertraging van 1sec...maar ik begrijp niet goed waarom

[ Voor 28% gewijzigd door mmy841 op 12-04-2005 12:41 ]


  • teun-v
  • Registratie: Maart 2005
  • Niet online

teun-v

Koffie? ja graag...

Zou het niet handig zijn om ook nog even te wachten totdat de compoort daatwerkelijk de chars verzonden en ontvangen heeft voordat je deze weer uit de incomende buffer haalt??

Ook gek op Ovalracen? | Canon EOS 350 D | Canon EF-S 10-22mm F/3.5-4.5 | Sigma 17-70 F/2.8-4.5 DC Macro | Canon EF 70-200 F/2.8L USM | >Blog< |


  • mmy841
  • Registratie: Juli 2004
  • Laatst online: 09-07-2021
teun-v schreef op dinsdag 12 april 2005 @ 12:40:
Zou het niet handig zijn om ook nog even te wachten totdat de compoort daatwerkelijk de chars verzonden en ontvangen heeft voordat je deze weer uit de incomende buffer haalt??
je was me juist voor....

  • teun-v
  • Registratie: Maart 2005
  • Niet online

teun-v

Koffie? ja graag...

....

toch een timing probleem dus, als ik afga op de vertraging van 1sec...maar ik begrijp niet goed waarom
Redelijk eenvoudig, als ik het nu goed uitleg, je verstuurt namelijk 3 byts, dat zijn als ik het goed zeg 24 bits.
in jou instelling: MSComm1.Settings = "9600,N,8,1"
kun je als het goed is maximaal 9600 bits per seconde versuuren.
Als je dus die 24 bits wilt verzenden, dan zou dit 1 sec / 9600 * 24 bit = 0,0025 sec
duuren als ik het goed heb. Dit is zonder controll bits start/stop bit etc...
ook heeft je comm object even tijd nodig om dit te de verzonden en te ontvagen data te verwerken.
waar schijnlijk zal het wachten van op dit proces niet veel langer hoeven te duuren dan 0,02 sec

dat je niks uit leest bij de eerste keer op de knop drukken heeft er mee te maken dat je vb progje sneller is dan het versturen en onvangen van de eerste char, anders had je op zijn minst het verzonden nummer in de buffer kunnen vinden.

Ook gek op Ovalracen? | Canon EOS 350 D | Canon EF-S 10-22mm F/3.5-4.5 | Sigma 17-70 F/2.8-4.5 DC Macro | Canon EF 70-200 F/2.8L USM | >Blog< |


  • mmy841
  • Registratie: Juli 2004
  • Laatst online: 09-07-2021
ok, ik zal er rekening mee houden.

Bedankt voor de reacties

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 07-05 10:04
mmy schreef op dinsdag 12 april 2005 @ 13:48:
ok, ik zal er rekening mee houden.

Bedankt voor de reacties
Naast die verzend en ontvangst tijd heb je dus ook nog met buffering te maken.

Btw, ground moet aan ground dus
2->3
3->2
5->5

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1