- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 5 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 43

Thema: rs232 abfragen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    13.12.2005
    Beiträge
    21

    rs232 abfragen

    Anzeige

    Praxistest und DIY Projekte
    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

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.02.2005
    Beiträge
    663
    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...

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    13.12.2005
    Beiträge
    21
    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

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    49
    Beiträge
    1.562
    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

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    13.12.2005
    Beiträge
    21
    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?

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    49
    Beiträge
    1.562
    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

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    13.12.2005
    Beiträge
    21
    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

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    49
    Beiträge
    1.562
    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

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    13.12.2005
    Beiträge
    21
    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;
    }

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    13.12.2005
    Beiträge
    21
    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();

Seite 1 von 5 123 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen