| |
|
|
Robert Hildebrand | Hallo zusammen,
ich habe 6 serielle Schnittstellen permanent abzufragen (Messgeraete) und muss diese in einer Datenbank (dBase) speichern.
Hat jemand eine Idee??
LG
Robert |
|
|
| |
|
|
|
KHR | Hallo,
so schwer ist das doch nicht.
Ich mach das bei 8 seriellen (USB) Schnittstellen und dann noch über ModBus - Protokoll
Leider darf ich den Code nicht veröffentlichen, da er zu viele Details über die Kommunikation mit unseren Sensoren zeigen würde.
Der Zugriff auf die ComPorts war einfach, das lesen und schreiben auch. An der ModBus-Kommunikation hab ich mir ne Weile die Zähne ausgebissen
Und wenn Du dann die Strings im Speicher hast, bleiben Dir für die Speichermöglichleiten alle Wege offen
ComPorts einrichten,
dann in ner schleife
die Anfragen senden, in nem String die Antwort abolen, den String verarbeiten, Ergebnis speichern, senden oder was auch immer und weiter zum nächten Port, die selbe Aktion
wenn alle durch sind, wieder an den Anfang der Schleife |
|
|
| Gruß Karl-Heinz WIN XP home/Pro / XPROFAN 11 / P2CPP ATMEL + BASCOM Fan | 27.05.2009 ▲ |
|
|
|
|
Robert Hildebrand | Ich müsste die Com4 und COM5 abfragen, aber ich bekomme die Daten nicht auf den Schirm |
|
|
| |
|
|
|
Sato Pinto | Hallo
Erzähl mal welche Deine Schwierigkeiten sind. Hardware? und was Du genau machen möchtest, vielleicht kann ich Dir helfen.
Gruss Sato |
|
|
| |
|
|
|
E.T. | |
|
| Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 06.06.2009 ▲ |
|
|
|
|
GDL | Hi,
mal schnell nen paar Auszüge aus meinem Steuerprogramm.Komme zeitlich nicht dazu das besser auseinander zu klauben.Vielleicht hilft es dir etwas. KompilierenMarkierenSeparieren====================================================================
proc schnittstelle
declare such%
If comname$=Port
Let t$=Falsche Schnittstelle
Let n$=Port wird nur bei GDL genutzt.Stelle jetzt COM1 ein.Bitte im Startmenü unter Einstellungen ändern.
MessageBox(n$,t$,64)
comname$=Com1 Testmodus.Später Ausremmen
endif
Alte Rechner benötigen DTRhi/DTRlow
comname$=comname$+:
comi1&=opencom(comname$,4096,4096)
erfolg%=SetCom(comname$+9600,N,8,1)
erfolg%=setcomext(comi1&,0,0,0,$001,0,0) Ältere Rechner stürzen ohne diese Zuweisung ab
case erfolg% = 0: settext _text&[5],comname$+ erfolgreich geöffnet.
Proc_DTRhi (comi1&) PC Anbindung DTR auh High setzen
daten$=chr$(111)
senden
fehler%=WriteCom(comi1&,daten$)
ComError(comi1&)
endproc
ja
=======================================================================
proc empfangen
nur für 1 Zeichen abfangen
name$=@ReadCom$(comi1&,1)
@ComError(comi1&)
casenot name$=:return
WhileNot name$ =
name$=@ReadCom$(comi1&,1)
EndWhile
endproc
======================================================
=== DTR auf HIGH setzen: ====================================================
PROC Proc_DTRhi
PARAMETERS Handle% Parameter 1 = Handle des Comports
fehler% = @EscapeCommFunction(Handle%, 5)
ENDPROC
=== DTR auf LOW setzen: =====================================================
PROC Proc_DTRlo
PARAMETERS Handle% Parameter 1 = Handle des Comports
fehler% = @EscapeCommFunction(Handle%, 6)
ENDPROC
====================================================
proc senden
Proc_DTRhi (comi1&)
Proc_DTRlo (comi1&) PC_Anbindung synchronisieren
sleep 30
daten$=chr$(100)+chr$(100)+chr$(100)+daten$
fehler%=WriteCom(comi1&,daten$)
ComError(comi1&)
Proc_DTRhi (comi1&) Geht nicht
ja
einlesen im Betrieb ausremmen
endproc
===================================================================
Dauerempfang.Nochmals mit Sync.da die Übertragung von Rad auf Schiene naturgemäß des öfteren Übertragungsfehler produziert. KompilierenMarkierenSeparieren
proc einlesen BMelder Stellpulttaster
COM Schnittstelle auslesen
Schnittstelle wird am Proganfang geöffnet und erst am Progende geschlossen
declare sync%,lb%
settext _text&[12],Einlesestatus : aktiv +time$(0)+ +left$(time$(1),5)
+ Zeitwechsel ist ein Einlesevorgang.
Schnittstelle auslesen 3mal 255 und 1mal 0 hintereinander ist Sync
Empfangsprotokoll 255 255 255 0 Bahnhof Punkt Lok Auswahl Fehlerbyte
Auswahl
254 = Stellpult
253 = Geschwindigkeit
252 = Standardgeschwindigkeit bei Umschalten auf Grün anfordern
ja
clear cstart%
clear sync%
clear lb%
comwert$=@ReadCom$(comi1&,1)
@ComError(comi1&)
case str$(ord(comwert$))=255:inc sync%
whilenot comwert$=
comwert$=@ReadCom$(comi1&,1)
@ComError(comi1&)
case str$(ord(comwert$))=255:inc sync%
If str$(ord(comwert$))=0 Beginn des Datenprotokolls
Hat hier nichts mit Start,Stopbit zu tun, sondern ersetzt das Handshaking if sync%=3
lb%=1 Die drei 255 Startbyte wurden beim folgendem Nullbyte erkannt
else
clear sync%
clear cstart%
clear lb%
endif
endif
if lb% =1
inc cstart%
_inhalt%[cstart%]=ord(comwert$)
endif
if cstart% = 5
clear cstart%
clear sync%
clear lb%
Fehlerbyte erzeugen
Fehlerbyte vergleichen
Bei Fehler _inhalt%[5]=0
if _inhalt%[5]=253
settext _text&[8],Lok : +right$(00+str$(_inhalt%[4]),3)
auswerten1
Falls dieser BMelder etwas auslöst
tasterbahnhof%=_inhalt%[2]
tasterwert%=_inhalt%[3]
tasterwert%=tasterwert%+(tasterbahnhof%*256)-256 Punkte gehen hier von 1 bis 999
bm_auswerten
elseif _inhalt%[5]=254
settext _text&[8],Taster : +right$(00+str$(_inhalt%[3]),3)
settext _text&[9],Stellwerk : +right$(00+str$(_inhalt%[2]),3)
tasterbahnhof%=_inhalt%[2]
tasterwert%=_inhalt%[3]
auswerten
elseif _inhalt%[5]=252
settext _text&[8],Lok : +right$(00+str$(_inhalt%[4]),3)
real_speed
endif
endif
wend
sonst gibt es bei der thread.pcu Schlüsselfeldsalat
case wennoffen%=1:dbuse(#1)
case dannoffen%=1:dbuse(#2)
Ablaufbox abfragen
if getfocus(ablaufbox&)
setfocus(%hwnd)
endif
endproc
Servus Georg |
|
|
| |
|
|
|
Robert Hildebrand | Ich muss 6 serielle Schnittstellen abfragen und die Daten in eine Datei schreiben. Angschlossen sind jeweils ein Vielfachmessgerät mit welchen ich jeweils Strom, Spannung, Frequenz usw. abfragen muss. Leider kann ich die Daten noch nicht einmal auf dem Bildschirm sehen. Ich benutze das Beispielprogramm aus der Profan-Hilfe. Vielleich kannst Du mir helfen.
Robert |
|
|
| |
|
|
|
Sato Pinto | Hallo Robert
Vormal vergiss die 6 Schnitstellen und schreibe den Program so das zuerst eine Schnitstelle funktioniert, dann sehen wir weiter. Es wurde auch helfen den code hier zu postet damit wir sehen können fals da eventuell etwas geändert werden sollte
Grus
Sato |
|
|
| |
|
|
|
GDL | Habe leider keine 6 Schnittstellen.Daher nicht funktionüberprüft. KompilierenMarkierenSeparierendeclare com&[6],ende&,erfolg%,anzahl%,comname$,wert$
cls
Schnittstellen vorbereiten
anzahl%=1
whilenot anzahl% > 6
comname$=Com+str$(anzahl%)+:
com&[anzahl%]=opencom(comname$,4096,4096)
erfolg%=SetCom(comname$+9600,N,8,1)
case erfolg% = 0: print comname$+ erfolgreich geöffnet.
casenot erfolg% = 0: print comname$+ nicht geöffnet.
erfolg%=setcomext(com&[anzahl%],0,0,0,$001,0,0) Bei manchen Rechnern nötig
inc anzahl%
wend
================== Ende Vorbereiten
################## Unterprogramme ####################
proc empfangen
declare comwert$,leswert$
clear wert$
comwert$=@ReadCom$(com&[anzahl%],1)
@ComError(com&[anzahl%])
leswert$= str$(ord(comwert$))
wert$=leswert$
whilenot comwert$=
comwert$=@ReadCom$(com&[anzahl%],1)
@ComError(com&[anzahl%])
leswert$=str$(ord(comwert$))
wert$=wert$+leswert$
wend
drawtext 100,100, wert$
endproc
====================================================
################ Hauptschleife ###########################
whilenot ende&
settimer 10 Bestimmt die Zugriffszeiten
waitinput
killtimer
anzahl%=1
whilenot anzahl% > 6 Abfrageschleife
empfangen
inc anzahl%
wend
wend
######################## Ende Hauptschleife #####################
Schnittstellen wieder schließen
anzahl%=1
whilenot anzahl% > 6
closecom(com&[anzahl%])
inc anzahl%
wend
Servus Georg |
|
|
| |
|
|
|
Robert Hildebrand | Erst mal Dank Euch allen. Bin jetzt soweit, dass ich etwas angezeigt bekomme, s. Screenshot und Quellcode. Ich habe jetzt erst mal eine Schnittstelle abgefragt. Bringt mich aber noch nicht so richtig weiter solange ich keinen Klartext angezeigt bekomme.
Gruss
Robert
Nachtrag: Sorry, die Grafik fehlte. |
|
|
| |
|
|
|
Robert Hildebrand |
|
|
| |
|
|
|
GDL | Hallo Robert probier einfach mal meinen Code 1zu1 aus und berichte.
Servus Georg |
|
|
| |
|
|