HAllo,
ich habe hier eine Anfrage von jemandem, der sein VB-Makro nach
OpenOffice umziehen möchte und fragt, ob das möglich ist.
In dem Makro werden verschiedene Werte per Dialog ausgewählt (Frequenz,
Amplitude, Wellenform), damit ein Datensatz zusmammengebaut, der zur
seriellen Schnittstelle geschickt wird um ein bestimmtes Gerät (er nennt
es "Zapper") anzusteuern und auch Daten von dort einzulesen.
Leider kenne ich mich nicht mit dem Kommunikationsfähigkeiten von SBASIC
aus: vielliecht kann eine(r) von Euch ja einen Tip geben, ob das
überhaupt machbar ist, und wenn ja wie bzw. wo dazu etwas zu finden wäre ?
Er schreibt:
_ich verwende zum Schreiben die folgende Befehlssequenz._
Das Besondere ist die Verwendung eines Softwarebuffers,
den VB bereitstellt:
'--- bereite Senden vor: Timeout initialisieren: 4s muss genuegen um
512byte ins EEPROM schreiben
timeout = False
Timer1.Interval = WRITETIMEOUT ' bestimmte Zeit warten bevor ggf.
Fehlermeldung erzeugt wird
'Timer1.Interval = 6000 ' 40000 ms im Debugbetrieb warten bevor
ggf. Fehlermeldung erzeugt wird
Timer1.Enabled = True
'--- loesche die Pufferspeicher der ser. Schnittstelle ---
MSComm1.OutBufferCount = 0 ' loesche Outbuffer
MSComm1.InBufferCount = 0 ' und auch Inbuffer
For X = 1 To Len(outString$)
strTmp = Mid$(outString$, X, 1)
MSComm1.Output = strTmp ' schicke Zeichen los
Do ' warte, bis Zapper das Zeichen exakt bestaetigt
DoEvents
'If timeout = True Then Exit Function ' fehlerhaftes Zeichen
' oder keines oder zu langsam
If timeout = True Then
MsgBox "Der Zapper antwortet nicht. Ausgeschaltet? Kabelfehler?"
WriteEEPROM = 1 ' Fehlermeldung setzen
Exit Function ' Abbruch, wenn es zulange dauert
End If
If MSComm1.CommEvent = 2 And MSComm1.InBufferCount > 0 Then
varTmp = MSComm1.Input
If InStr(1, strTmp, varTmp) > 0 Then Exit Do
' mache erst weiter, wenn Zeichen ok war
End If
Loop
Next X
_Und dies ist der Teil mit Buffer zum Lesen:_
'--- Timeout initialisieren ---
' =vermeide spaeteres Aufhaengen des Systems, wenn Zapper nicht sendet
timeout = False
Timer1.Interval = READTIMEOUT ' gewisse Zeit warten bevor ggf.
' Fehlermeldung
Timer1.Enabled = True ' Timer fuer Ueberwachung aktivieren
'--- loesche die Pufferspeicher der seriellen Schnittstelle ---
MSComm1.OutBufferCount = 0 ' loesche Outbuffer
MSComm1.InBufferCount = 0 ' und auch Inbuffer
'--- Steuerzeichen fuer Auslesen an µC senden ---
MSComm1.Output = "L" ' uC empfaengt dies und schickt sofort 512byte
' von denen der PC hoffentlich nichts
' verlieren wird!
' sind Puffer korrekt eingestellt?
'--- lese alle 512 Zeichen ein ---
Dim cntBytes As Integer
cntBytes = 0 ' 512 bytes zu lesen
inString$ = "" ' starte mit leerem String
Do
DoEvents ' damit der Timer aktiv ueberwachen kann
If timeout = True Then ' Abbruch, wenn es zulange dauert
MsgBox "Der Zapper antwortet nicht. Ausgeschaltet? Kabelfehler?"
ReadEEPROM = 1 ' Fehlermeldung setzen
Exit Function ' Abbruch, wenn es zulange dauert
End If
If MSComm1.CommEvent = 2 And MSComm1.InBufferCount > 0 Then
Dim Temp As Byte
Temp = AscB(MSComm1.Input)
inString$ = inString$ & Chr(Temp) ' baue String aus binaeren
' Daten auf
cntBytes = cntBytes + 1 ' zum naechsten byte
If cntBytes = 512 Then Exit Do ' 512 binaere bytes zu
' uebertragen
End If
Loop
'--- Timer entschaerfen, damit er nun nicht mehr zuschlaegt ---
Timer1.Enabled = False
Meinen Sie, daß so etwas mit OO einfach umsetzbar ist?
Es war damals eine monatelange Arbeit, bis Graphik und
Code soweit fertiggestellt und korrekt im Zusammenspiel
mit dem Mikrocontroller funktioniert hatten.
--
/ \
gruss \ / ASCII Ribbon Campaign
gisbert friege X Against HTML Mail
/ \
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]