-
rs232 abfragen
hallo zusammen,
ich hoffe und denke ihr könnt mir helfen.
ich habe hier viele freundliche antworten gelesen, und mich deswegen gleich einmal hier angemeldet, da ich denke ihr könnt mir die richtigen denkanstösse und seitentipps geben.
vielleicht sogar nen code :)
so dann fang ich mal an. ich habe vor ein c programm zu schreiben.
mit diesem programm will ich abfragen ob ein knopf an der rs232 schnittstelle gedrückt wurde.
also eine reine ja nein abfrage.
die schnittstelle soll alle secunde abgefragt werden (signal liegt 3 secunden lang an), und dann soll eine phpseite ausgeführt werden.
wenn aber die 2 secunden davor die taste schon gedrückt wurde, sollte diese seite nicht aufgerufen werden.(falls schalter prellt oder auch der user 2 mal drückt)
leider finde ich nichts zu c und rs232 das mir mit meinem wissen weiterhilft. ixch finde nur vb codes :(
also nochmal in kurzfassung:
1. alle secunde abfragen, vorangegangenen zustand mit beachten.
2. php- aufrufen
ich hoffe ihr könnt mir da helfen.
vielen dank und
grüsse
bluna
-
Hi!
Muss es denn C sein - Wie du schon sagtest, ist die Sache in Visual Basic ein Kinderspiel! Das bekommt man auch in diversen Büchern sehr günstig als Autorenversion.
Gruß, Björn
-
hallo.
ich habe leider ein gewisses grundwissen in c, aber leider habe ich von vb keinen plan.
das macht die sache für mich noch schwerer.
zumindest müsste ich mich mit allen randbedingungen ..compiler.etc.. erneut beschäftigen und im falle eines fehler, hätte ich garkeine ahnung wie ich vorgehen muss, bzw. wo der feheler ist.
wenn natürlich ein funktionierendes script vorhanden wäre, wäre dieser "aufwand" günstig.
ich denke mal in c dürft das auch nicht so schwer sein oder?
.. also ich bin gerade am weiterinformieren, falls ich etwas habe , was wie ein ansatz klingt, poste ich diesen mal.
aber falls jemand mich unterstützen will mit codeauszugen .. gerne :)
-
Welches C oder doch vielleicht C++ ?
Weches betriebssystem ?
Wo hängt das signal dran an einer Signalleitung der RS232 ?
Wenn windoofs:
http://msdn.microsoft.com/library/de...tcommevent.asp
Habe die RS232 schon öfters per C++ Programmier unter windows ok die signalleitungen habe mich nocht nicht interresiert aber so schwer sollte das nicht sein.
Gruß
-
guten morgen.
also mein signal hängt an der com1-DTR . es ist also nur ground und dtr belegt.
und ich wollte mit cpp programmieren.
ich schau mir mal den waitcommevet nun an.
Code:
#include<iostream>
#include <stdio.h>
#include<windows.h>
#include<conio.h>
#include<dos.h>
using namespace std;
void main (void)
{
HANDLE hCom = CreateFile( "com1", GENERIC_READ, 0, NULL, OPEN_EXISTING, NULL);
start:
char lpByte [12];
BOOL len = 1 ;
DWORD dwBytesRecive ;
ReadFile(hCom, &lpByte, len, &dwBytesRecive, NULL);
printf("%d ",dwBytesRecive);
goto start;
CloseHandle(hCOM);
return 0;
}
ich bekomm ohne ende nullen angezeigt, aber wenn ich was drücke, wird leider keine andere zahl angezeigt.
"terminal" ist ein programm, das dtr ausgibt , wenn es gedrückt wurde.
wenn ich also meinen taster drücke, wird mein dtr signal auch angezeigt aber leider erscheint sogut wie immer eine null. das wundert mich. wenn man aber hektisch drückt, werden auch einmal andere zahlen angezeigt.
warscheinlich durch prelllen des tasters.
was müsste ich den normalerweisse bekommen wenn ich plus auf mein dtr lege?? ist der pegel zu schwach?
-
Guten Morgen,
Klar das du da nur 0len bekommst du liest daten und nicht Signalleitungen !
das wenn du Hectisch drückst mal was anders kommt häng sicher damit zu sammen das dann die Offene RX leitunge irgendet was interpretiert.
Auserdem dürfe den Prg den rechenr ordenlich beschäftigen oder ?
Ausdem kannst du DTR nicht nehmen da das intern verarbeitet wird nimm
mal DSR dann die Readzeile durch folgende zeile ersetzen.
WaitCommEvent(hCom,EV_DSR,NULL);
Vorsicht das Programm Hängt jetzt an der Stelle solange bis der Signal wechels kommt.
Gruß
-
danke für deine erklärung, ich werde den schalter nocheinmal neu löten.
wiso sollte das prog den pc schädigen?
ich melde mich später mit neuem schalter nocheinmal.
gruss
-
nicht schädigen beschäfigen weil dein endlos loop wohl 100 % Cpu last erzeugen dürfte ausdem wird das Close Com nie auf gerufen.
Gruß
-
hallo.
achso, sorry fürs verlesen. jetzt versteh ich was du meinst, du hast natürlich recht. deine lösung ist beiweitem besser als meine schleife :P
nun habe ich den neu gelöteten schalter.
also wenn nun der taster gedrückt wird, wird ein signal von dtr nach dsr durchgeschleust.
also da der pc sowiso ready ist, wird dann ein modem ready hergestellt.
soweit die theorie.
mit meinem programm terminal kann ich aber leider keine funktion feststellen. com error...? hm.. ich glaube der mann hat sich verlötet, gleich nochmal hinschlappen...
und mein programm läuft egal ob mit oder ohne schalter einfach am waitcommevent vorbei.. also ob er da nicht warten will :P
kannst du mir helfen?
Code:
#include <iostream>
#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include <dos.h>
#include <unistd.h>
using namespace std;
int main(void)
{
HANDLE hCOM = CreateFile ("COM1",GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
int anzahl=0;
//////////////////////////////
start:
char lpByte[12];
BOOL len=1;
DWORD dwBytesRecive, EVDSR;
//////////////////////////////
//warteschelife - damit das signal nicht gleich 2 mal abgegriffen wird
printf("Bitte warten!...");
Sleep(2000);
printf("...Weiter.");
//warteschleife ende
//////////////////////////////
//////////////////////////////
//ReadFile(hCOM, &lpByte,len,&dwBytesRecive,NULL);
cout << "" <<endl;
cout <<"------------------------"<<endl;
cout <<"Auf Signal warten."<<endl;
WaitCommEvent(hCOM,&EVDSR,NULL);
cout <<"Signal erhalten."<<endl;
cout <<"------------------------"<<endl;
cout << "" <<endl;
cout << "" <<endl;
printf("%d",dwBytesRecive);
cout << "" <<endl;
cout << "" <<endl;
//////////////////////////////
//////////////////////////////
//datei oeffnen
//funktioniert
cout <<"Increment wird geoeffnet."<<endl;
cout <<"------------------------"<<endl;
system("d:\\Dev-Cpp\\Examples\\inc.bat");
cout <<"------------------------"<<endl;
cout <<"Increment beendet."<<endl;
//datei oeffnen ende
//////////////////////////////
//////////////////////////////
++anzahl;
cout << "" <<endl;
cout << "" <<endl;
printf("Es wurde ");
printf("%d",anzahl);
printf(" mal Incrementiert.");
cout << "" <<endl;
cout << "" <<endl;
//////////////////////////////
cout << "****************************" <<endl;
cout << "" <<endl;
getch();
goto start;
//////////////////////////////
CloseHandle(hCOM);
return 0;
}
-
ok, der schalter geht nun. ich bekomme dsr mit meinem programm terminal nun angezeigt.
das einzigste problem das ich noch hätte , ist dass mein programm am waitcommevent vorbeiläuft :( bis zum getch();