Ga naar inhoud

VB6-MSCOMM32


anoniem

Aanbevolen berichten

Hoi allemaal. Ik kom er toch nog niet helemaal uit. Als ik dit comtest-programmaatje start dan werkt het. Ik heb aan mijn PC-1 nog een PC-2 hangen die verbonden is met een nulmodemkabel. Als ik PC-2 NIET aanzet dan krijg ik de text uit textbox1 in textbox2. MSCOMM krijgt standaard een baudrate van 9600 mee. Zodra ik op een keuzerondje druk om de baudrate aan te passen dan loopt het programma vast in de volgende sub. [code:1:2474c25dee] Public Sub ReloadSettingsMSCOMM(frm As Form) Form1.MSComm1.Settings = Baudrate + ",8,n,1" <= Het hangt op deze regel End Sub [/code:1:2474c25dee] Op Form1 heb ik 2 textboxen.. Textbox 1 voor text out en textbox 2 voor text in. Daarnaast de mscomm32.ocx, 3 cmd buttons en 3 labels en een frame met keuzerondjes voor de baudrate. Code in het Form. [code:1:2474c25dee] Option Explicit Private Sub Command1_Click() Call DataOutput(frm:=Me) End Sub Private Sub Command2_Click() End 'Stop programma End Sub Private Sub Form_Load() Call DirectLoad(frm:=Me) End Sub Private Sub Form_Unload(Cancel As Integer) 'Dit sluit de ComPoort bij afsluiten programma. MSComm1.PortOpen = False End Sub Private Sub MSComm1_OnComm() Call DivMSCOMM(frm:=Me) End Sub Private Sub Option2_Click(Index As Integer) Call optBaudRate(Me, Index) Call ReloadSettingsMSCOMM(frm:=Me) End Sub [/code:1:2474c25dee] Code in de module. [code:1:2474c25dee] Option Explicit 'Option Base 1 'Hierdoor beginnen arrays met 1 Public Baudrate As String Public Sub DataOutput(frm As Form) Form1.MSComm1.Output = Form1.Text1.Text End Sub Public Sub DivMSCOMM(frm As Form) Dim InBuff As String Select Case Form1.MSComm1.CommEvent 'Errors: Case comEventBreak ' A Break was received. Case comEventCDTO ' CD (RLSD) Timeout. Case comEventCTSTO ' CTS Timeout. Case comEventDSRTO ' DSR Timeout. Case comEventFrame ' Framing Error. Case comEventOverrun ' Data Lost. Case comEventRxOver ' Receive buffer overflow. Case comEventRxParity ' Parity Error. Case comEventTxFull ' Transmit buffer full. Case comEventDCB ' Unexpected error retrieving DCB] 'Events: Case comEvCD ' Change in the CD line. Case comEvCTS ' Change in the CTS line. Case comEvDSR ' Change in the DSR line. Case comEvRing ' Change in the Ring Indicator. Case comEvReceive ' Received RThreshold # of chars. InBuff = Form1.MSComm1.Input Call HandleInput(InBuff) Case comEvSend ' There are SThreshold number of ' characters in the transmit buffer. Case comEvEOF ' An EOF character was found in the ' input stream. End Select End Sub Public Sub HandleInput(InBuff As String) Form1.Text2.SelStart = Len(Form1.Text2.Text) Form1.Text2.SelText = InBuff End Sub Public Sub DirectLoad(frm As Form) 'Benaming van de frame's waar de option buttons zich in bevinden. Form1.Frame2.Caption = "Baudrate" 'Met Option1(1).Value = True 'worden bij het opstarten 'alle eerste keuzerondjes geselecteerd. 'Form1.Option2(1).Value = True 'Option buttons voor de baudrate. Form1.Option2(1).Caption = " 300" Form1.Option2(2).Caption = " 1200" Form1.Option2(3).Caption = " 2400" Form1.Option2(4).Caption = " 4800" Form1.Option2(5).Caption = " 9600" Form1.Option2(6).Caption = "19200" Form1.Option2(7).Caption = "38400" Form1.Option2(8).Caption = "57600" 'Hier voorlopig de aanroep van MSCOMM32 met vaste instellingen. Form1.Caption = "FX-Plus terminal programma" Form1.Text1.Text = "Test string from Form1 " Form1.Text2.Text = "" Form1.Command1.Caption = "&Send" Form1.Command2.Caption = "STOP" With Form1.MSComm1 .Handshaking = 2 - comRTS .RThreshold = 1 '.RTSEnable = True <== 'Bij drukken op send komt de send data in de receive .CommPort = 1 'databox terecht als deze uitstaat. .Settings = Baudrate + ",n,8,1" ' Stop .SThreshold = 1 .PortOpen = True ' Leave all other settings as default values End With End Sub Public Sub ReloadSettingsMSCOMM(frm As Form) Form1.MSComm1.Settings = Baudrate + ",8,n,1" ‘<= Probleem End Sub Public Sub optBaudRate(frm As Form, Index As Integer) Select Case Index Case 1 Baudrate = "300'" frm.Label3.Caption = "300" Case 2 Baudrate = "1200" frm.Label3 = "1200" Case 3 Baudrate = "2400" frm.Label3 = "2400" Case 4 Baudrate = "4800" frm.Label3 = "4800" Case 5 Baudrate = "9600" frm.Label3 = "9600" Case 6 Baudrate = "19200" frm.Label3 = "19200" Case 7 Baudrate = "38400" frm.Label3 = "38400" Case 8 Baudrate = "57600" frm.Label3 = "57600" End Select End Sub Sub main() Form1.Show End Sub [/code:1:2474c25dee] Ik blijf maar rommelen met die MSCOMM32. groetjes, Yvonne
Link naar reactie
[quote:151064c9ff]Public Sub ReloadSettingsMSCOMM(frm As Form) Form1.MSComm1.Settings = Baudrate + ",8,n,1" <= Het hangt op deze regel End Sub[/quote:151064c9ff] Die regel is inderdaad fout, een klein foutje want je hebt de 8 en de N omgewisseld. Het moet dus zijn Form1.MSComm1.Settings = Baudrate + ",n,8,1" _________________ I used to have an open mind but my brains kept falling out. [ Dit Bericht is bewerkt door: DarkScribe op 2002-02-20 18:30 ]
Link naar reactie
Hoi Tja, .......... :eek: Dat komt omdat ik veel aan het editten ben in die regel. Maar dan blijf ik nog altijd zitten met: run time error '380' invalid property value De waarde van de baudrate wordt door mij nergens gegeven, maar deze is standaard 9600 baud. Als ik na het vastlopen de cursor op MSCOMM1 zet dan geeft hij deze waarde ook aan. (Klopt, want het programmaatje werkt)En als ik de waarde in dat regeltje op de string Baudrate zet, dan geeft deze keurig 300 baud aan. Maar deze zelfde regel om de baudrate te "refreshen" krijg ik maar niet aan de praat. groetjes, Yvonne _________________ -Y&F- [ Dit Bericht is bewerkt door: Yvonne op 2002-02-20 19:23 ]
Link naar reactie
Ik had er inderdaad nog een verandering in aangebracht, maar die ben ik nu vergeten om jou te vertellen. Een string plak je niet aan elkaar met een + teken maar met een & teken. Wat ik gedaan heb is het volgende: [code:1:bdf8235a98]Public Sub ReloadSettingsMSCOMM(frm As Form) Baudrate = Baudrate & ",n,8,1" Form1.MSComm1.Settings = Baudrate <= Het hangt op deze regel End Sub[/code:1:bdf8235a98] Niet dat het veel uitmaakt, je kunt het ook 1 regel laten zijn. Overigens heb je die fout ook ergens anders gemaakt. Vraag me af waarom VB die fout er daar niet uitpakt. _________________ I used to have an open mind but my brains kept falling out. [ Dit Bericht is bewerkt door: DarkScribe op 2002-02-20 19:38 ]
Link naar reactie
Hoi DarkScribe nee, dat is het toch ook niet. Stel dat ik alle 4 de settings zou willen wijzigen dan zou dit tot de mogelijkheden moeten kunnen behoren. [code:1:adf90eda30] MSComm1.Settings=(Baudrate+","+Parity+","+databits+","+stopbits) [/code:1:adf90eda30] Let wel, ik heb bovenstaande even gauw ingetypt! En die + mag van mij best een & zijn, maar dat alleen brengt geen oplossing. Ik begrijp echt niet waarom die eene regel de baudrate niet refresht. Ik werk al volgens de stap voor stap methode, dus eerst de baudrate en dan pas de andere 3 settings proberen. Maar deze eene pakt hij al niet.:sad: Het zal wel weer zo'n kleinigheidje zijn,... of niet :smile: groetjes Yvonne Heb inmiddels gezien dat je al weer een reply hebt staan, ik zal dit eerst bekijken. _________________ -Y&F- [ Dit Bericht is bewerkt door: Yvonne op 2002-02-20 20:05 ]
Link naar reactie
Het werkt Ik liep dus vast op 300' En dit is de buadrate om te kunnen zien of het daadwerkelijk werkt, omdat je dan de letters niet in één keer op het scherm krijgt vanwege de lage boudrate. De regel wordt dan redelijk traag neergezet. Vandaar dat ik maar met 300 boud bleef testen. En daar zat nou net dat tikfoutje in. Dat is dus echt :eek: De sub werkt dus gewoon met + [code:1:89a5444a14] ReloadSettingsMSCOMM(frm As Form) Form1.MSComm1.Settings = Baudrate + ",n,8,1" End Sub [/code:1:89a5444a14] Maar je kunt ook & gebruiken, heb ik inmiddels getest. Hartstikke bedankt, ik kan nu gelukkig naar de 1500 meter gaan kijken. Ik begin morgen met de andere settings. :smile: Of breng ik je nu aan het schrikken? groetjes, Yvonne
Link naar reactie
Dat zou kunnen, als je die vier variabelen hebt, dan krijg je [code:1:7630baac80]MSComm1.Settings = Baudrate & "," & parity & "," & databits & "," & stopbit[/code:1:7630baac80] Jouw code zoals die nu moet zijn is [code:1:7630baac80]Public Sub ReloadSettingsMSCOMM(frm As Form) Form1.MSComm1.Settings = Baudrate & ",n,8,1" '<= Probleem End Sub[/code:1:7630baac80] Dit werkt bij mij.
Link naar reactie
[quote:fa9bfde944] Wist trouwens niet eens dat de + ook werkte. Weer wat geleerd. [/quote:fa9bfde944] Leer het dan maar weer gauw af. & is de enige juiste operand om een concat mee uit te voeren. Als je + gebruikt zou, in geval van numerieke waarden, de boel wel eens gewoon opgeteld kunnen worden. (slordig voorbeeld) 8 + 8 -> 16 8 & 8 -> 88 Dit is vooral van belang als er variant variabelen gebruikt worden waarbij je niet van te voren weet wat voor soort waarde er in staat.
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

  • Populaire leden

    Er is nog niemand die deze week reputatie heeft ontvangen.

  • Leden

    Geen leden om te tonen

×
×
  • Nieuwe aanmaken...