Avatar billede cuac Nybegynder
21. september 2004 - 10:12 Der er 11 kommentarer og
1 løsning

Gemme data via RC232 og MSComm

Jeg har en RS232 opkobling til et instrument. Efter måling af en prøve kan jeg tømme instrumentets ene kanal ved at afsende kommandoen %n (hvor n angiver antallet af datapunkter)

Det jeg behøver er syntaksen til at tømme kanalen samt gemme data i en allerede oprettet tekstfil.

Jeg har en procedure hvor brugeren opretter et bibliotek og en tekstfil, hvor data så senere skal gemmes i:

Private Sub Opretdatafil_Click()
Set myFSO = New FileSystemObject
  If myFSO.FileExists("C:\" & bibliotek & "\" & fil & ".txt") Then
    MsgBox "Filen findes allerede"
  Else
  myFSO.CreateTextFile "C:\" & bibliotek & "\" & fil & ".txt"
  End If
  Set myFSO = Nothing
End Sub


Herefter proceduren til start af instrument og lagring af data



Private Sub Kørprøve_Click()
Dim instrumentstatus As Integer
instrumentstatus = MsgBox("Har du placeret en prøve i instrumentet, samt sat de rette instrument indstillinger?", vbYesNo, "Instrumentindstillinger")

Select Case instrumentstatus

Case 6
MSComm1.PortOpen = True
MSComm1.Output = "R" 'giver remote adgang til instrument
MSComm1.Output = "A" 'starter måling af prøve

gemfil = MsgBox("Tryk Ok for at gemme resultatfilen, når målingen er færdig", vbOKCancel, "Gem datafil")

    Select Case gemfil
   
        Case 1
       
        'gem data fra kanal 0 i txtfil som er oprettet af brugeren - det er her jeg behøver hjælp!
Avatar billede joern Nybegynder
21. september 2004 - 10:21 #1
Hej.

Jeg har ingen erfaring med dataopsamling, men at skrive indholdet af variable til en textfil gøres således når filen i forvejen eksisterer og indeholder data, der skal bevares.

Open dinsti & gemfil for Append as #1
    print #1, var
close #1

Hvis dine data ligger i at variabel-array:  var()

Open dinsti & gemfil for Append as #1
  for a = 0 to Ubound (var)
    print #1, var(a)
  next a
close #1

Hvis filen ikke i forvejen eksiterer:

Open dinsti & gemfil for Output as #1
    print #1, var
close #1

M.v.h. Jørn
Avatar billede cuac Nybegynder
21. september 2004 - 10:29 #2
Kan ikke helt bruge svaret joern

Først afgiver jeg syntaksen
MScomm1.Output = "%1000), dette skulle betyde at der sendes måledata til computerens comport, herefter skal jeg bruge noget a la

MSComm.input = ?????? og herefter noget med at skrive til txt.filen.
Avatar billede joern Nybegynder
21. september 2004 - 11:34 #3
Hej.

Jeg bruger VB5 og her er et eksempel fra on-line hjælpen.  Jeg kommenterer det ikke, håber andre med erfaring i RS-232 kommunikation kommer dig til undsætning:

The following simple example shows basic serial communications using a modem:
Private Sub Form_Load ()
    ' Buffer to hold input string
    Dim Instring As String
    ' Use COM1.
    MSComm1.CommPort = 1
    ' 9600 baud, no parity, 8 data, and 1 stop bit.
    MSComm1.Settings = "9600,N,8,1"
    ' Tell the control to read entire buffer when Input
    ' is used.
    MSComm1.InputLen = 0
    ' Open the port.
    MSComm1.PortOpen = True
    ' Send the attention command to the modem.
    MSComm1.Output = "AT" + Chr$(13)
    ' Wait for data to come back to the serial port.
    Do
        DoEvents
    Loop Until MSComm1.InBufferCount >= 2
    ' Read the "OK" response data in the serial port.
    Instring = MSComm1.Input
    ' Close the serial port.
    MSComm1.PortOpen = False
End Sub
..
Note  The MSComm control can use polling or an event-driven method to retrieve data from the port. This simple example uses the polling method. For an example of the event-driven method, see help for the OnComm event.

Med venlig hilsen  Jørn
Avatar billede cuac Nybegynder
21. september 2004 - 11:43 #4
Hej igen

Ok, ser meget meget brugbart ud, men kan du så ikke lige give mig syntaksen til hvordan jeg overfører inputstrengen til min en txt.fil, altså skriver indholdet ind i den fil som brugeren har oprettet tidligere, men som endnu ikke indeholder data.
Avatar billede cuac Nybegynder
21. september 2004 - 12:23 #5
Jeg mener indholdet af  Instring = MSComm1.Input skal skrives ind i min txt.fil som er oprettet men endnu ikke indeholder data
Avatar billede joern Nybegynder
21. september 2004 - 12:39 #6
Hej.

Jeg ved ikke om VB-programmet bliver event-styret af hvert nyt input, eller om man skal anvende en passende timer til at aftaste værdien - når den formodes at være ny.

Men at skrive indholdet af variablen Instring er jo blot at erstatte mit ord 'var' med Instring.  Du kan måske også anvende værdien direkte fra 'input'

Open dinsti & gemfil for Append as #1
    print #1, MSCommm1.Input
close #1

M.v.h.  Jørn
Avatar billede cuac Nybegynder
21. september 2004 - 13:41 #7
VB bliver eventstyret, ved tryk på OK se:

gemfil = MsgBox("Tryk Ok for at gemme resultatfilen, når målingen er færdig", vbOKCancel, "Gem datafil")

Jeg er ikke helt sikker på hvad #1 betyder, kan du ikke lige uddybe, så er der point på vej. Tak for hjælpen.
Avatar billede skwat Praktikant
21. september 2004 - 13:48 #8
jeg er lidt forviret over om du har fået læst com porten som du vi, hvis ja, så skal du blot gemme dine data således:
Public Sub WriteLineToFile(filename As String, tekstline As String)
    Dim fso As New FileSystemObject
    Dim tekstfile As TextStream
   
    If fso.FileExists(filename) Then
        Set tekstfile = fso.OpenTextFile(filename, ForAppending, False)
    Else
        Set tekstfile = fso.OpenTextFile(filename, ForWriting, True)
    End If
    tekstfile.WriteLine tekstline
   
    tekstfile.Close
    Set fso = Nothing
End Sub

Denne funktion tester om filen findes, hvis den gør appender den, hvis ikke opretter den.
hvis du mangler en metode til at læse porten kan du bruge

readstart = Now()
Do Until (betingelse for at det du læser er i orden)
  returncode = returncode & .Input 'Læser output fra enhed
  If DateDiff("s", readstart, Now()) > 30 Then
    'håntere din timeout
  End If
Loop
Avatar billede cuac Nybegynder
21. september 2004 - 14:02 #9
Hej

Hvorfor står der False efter ForAppending, jeg ville tro at der skulle stå true, således at der kan tilføjes data til den allerede eksisterende fil?
Avatar billede cuac Nybegynder
23. september 2004 - 13:15 #10
Ok, joern jeg har brugt din kode og fået det jeg søgte, men også stor tak til skwat, der også kom med input til hvordan jeg skriver til datafilen
Avatar billede joern Nybegynder
23. september 2004 - 16:15 #11
Hej.

Vigtigst at du fik klaret problemet.  Men tak for point.  m.v.h.  Jørn
Avatar billede skwat Praktikant
23. september 2004 - 16:17 #12
cauc, den sidste parameter for til funktionen er om filen skal oprettes, false betyder.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester