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 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
Nur tote Fische schwimmen mit dem Strom...
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ß
P: Meine Tochter (06.11.07) und https://www.carnine.de
M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken
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.
ich bekomm ohne ende nullen angezeigt, aber wenn ich was drücke, wird leider keine andere zahl angezeigt.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; }
"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ß
P: Meine Tochter (06.11.07) und https://www.carnine.de
M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken
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ß
P: Meine Tochter (06.11.07) und https://www.carnine.de
M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken
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();
Lesezeichen