VS2005 C++ Ausgabe in eine TXT Datei an einen COM umleiten (serielle Ausgabe)





  • Hallo vielen Dank für die Antworten,

    aber das Serial library for C++ Project erschlägt mich als C++ Neuling,
    dafür bin ich einfach noch zu doof.

    Eigentlich würde ich denken :
    Serial.h in das include files verzeichnis meines Programmes kopieren ,
    Serial.dsp und Serial.cpp HelloWorld.cpp in mein source verzeichnis kopieren,
    ADD Serial.cpp und HelloWorld.cpp unter sorcefiles,
    wie bekomme ich die serial.h in header verzeichnis ?

    Und jetzt meine doofen Fragen:
    Kann ich nicht alle Sourcen in meine Example.cpp hineinkopieren ? Was muss ich sonst beachten, Wie bekomme ich die serial.h datei angezeigt/add?

    wenn alles richtig ist könnte ich doch den befehl:
    lLastError = serial.Write("Hello world\n"); für meine Ausgabe benutzen oder?

    Gruß Dirk



  • mach es mit VB 6 oder so:) 10 zeilen und es funzt;)



  • Ich habs gerade mal ausprobiert, man braucht nur Serial.h und Serial.cpp. Deine Fragen kann ich nicht beantworten da ich sie nicht so wirklich verstehe. Probier doch einfach ein bisschen rum und meld dich wenn du nicht mehr weiter kommst.



  • Kann ich nicht alle Sourcen in meine Example.cpp hineinkopieren ?

    Geht auch. Hier hab ich es mal für dich gemacht: http://rafb.net/p/eqswgm12.html
    Das Ansprechen des COM-Ports hab ich einfach mal in die Funktion ExitRealtime getan.



  • vielen Dank für die freundliche Hilfe !!!!!!

    ich habe die zusammenkopierte Example.cpp noch aufgearbeitet.

    jetzt habe ich den Com aufruf auch in die richtige Stelle kopiert in die

    UpdateTelemetry Funktion (eine nach der Funktion ExitRealtime)

    letzter Schritt für micht

    der alter Aufruf

    fprintf( fo, "s%.0fr%.0fk%.0ft%.0fg%.0fm%dp%.0fo%.0fa%.0fb%.0fc%.0fd%.0fe",metersPerSec * 3.6f, info.mEngineRPM, info.mClutchRPM, info.mEngineWaterTemp, info.mFuel, info.mGear, pitch * radsToDeg, roll * radsToDeg ,info.mWheel[0],info.mWheel[0],info.mWheel[0],info.mWheel[0]);

    in die neue COM Form übernommen:
    serial.Write("s%.0fr%.0fk%.0ft%.0fg%.0fm%dp%.0fo%.0fa%.0fb%.0fc%.0fd%.0fe",metersPerSec * 3.6f, info.mEngineRPM, info.mClutchRPM, info.mEngineWaterTemp, info.mFuel, info.mGear, pitch * radsToDeg, roll * radsToDeg ,info.mWheel[0],info.mWheel[0],info.mWheel[0],info.mWheel[0]);

    dann bekomme ich einen error:
    Fehler 1 error C2661: 'CSerial::Write': Keine überladene Funktion akzeptiert 13 Argumente d:\simulator ii\tachoansteuerung\internalspluginsv3\benötigte dateiaugabe\source\example.cpp 2051

    meine Idee erstmal einen string zusammensetzten und dann serial.write den string wegschicken.

    z.B.:
    ausgabestring = ("s%.0fr%.0fk%.0ft%.0fg%.0fm%dp%.0fo%.0fa%.0fb%.0fc%.0fd%.0fe",metersPerSec * 3.6f, info.mEngineRPM, info.mClutchRPM, info.mEngineWaterTemp, info.mFuel, info.mGear, pitch * radsToDeg, roll * radsToDeg ,info.mWheel[0],info.mWheel[0],info.mWheel[0],info.mWheel[0]);

    serial.Write(ausgabestring);

    wie / wo muss ich die ausgabestring variable definieren ?

    VIELEN DANK

    Gruß dirk



  • Beschäftige dich mal mit Stringstreams, damit macht man das in C++.
    Da die Umstellung darauf aber einiges an Arbeit ist bei sovielen Eingaben könntest du ja auch einfach wieder die Datei in den Speicher lesen. Oder wird das so oft aufgerufen das es auf Geschwindigkeit ankommt?



  • Du könntest auch in etwa folgende Funktion der Serial Klasse hinzufügen:

    LONG WriteFormated(char * format, ...)
    {
    	char buffer[10000]; // ist bestimmt gross genug ;-)
    	va_list args;
    	va_start(args, format);
    	vsprintf(buffer,format, args);
    	va_end(args);
    	return Write(buffer);
    }
    

    Dann kannst du es so machen wie du vorhattest.



  • Hallo

    vielen Dank nochmal an alle.

    die Ausgabe :

    char buffer[64];
    sprintf(buffer, "s%.0fr%.0fk%.0ft%.0fg%.0fm%dp%.0fo%.0fe",metersPerSec * 3.6f, info.mEngineRPM, info.mClutchRPM, info.mEngineWaterTemp, info.mFuel, info.mGear, pitch * radsToDeg, roll * radsToDeg ,CR, LF);
    CSerial serial;
    serial.Open(_T("COM1"));
    serial.Setup(CSerial::EBaud115200,CSerial::EData8,CSerial::EParNone,CSerial::EStop1);
    serial.SetupHandshaking(CSerial::EHandshakeOff);
    serial.Write(buffer);
    serial.Close();

    funktioniert jetzt super, aber mein Microschip Code wartet auf ein
    RETURN ( also CR LF), wo und wie kann ich das einfügen ? das hinter radsToDeg
    ist falsch ! bringt leider nichts ! oder ggf noch ein serial.Write(... nach der Ausgabe serial.Write(buffer); anhängen ?

    Gruß Dirk



  • "s%.0fr%.0fk%.0ft%.0fg%.0fm%dp%.0fo%.0fe\r\n"
    


  • Vielen dank nochmals.

    Es funktioniert...

    leider mit der einschränkung das es das Spielausbremst.

    Da pro Frame ca 25ms die Daten geschickt werden, und die serielle Übertrag sehr lange dauert ruckelt das Spiel jetzt stark.

    Ich überlege mir bei gelegenheit noch eine verbesserung . (seltener schicken, nur veränderte Daten schicken ..)

    Gruß dirk


Anmelden zum Antworten