So anbei das Einfaches Programm um drei Byt per RS232 raus zu schreiben einfach geht es Glaube ich nicht. Fehlerfängen sind nur Kommentare.
die Zeile #include "stdafx.h" muss eventuell durch #include <windows.h> ersetzt werden. Dann sollte sich das Teil mit jedem Compiler übersetzen lassen.Code:#include "stdafx.h" HANDLE g_hCom = INVALID_HANDLE_VALUE; // Variable in der das Handle für den Port ist static const char *CP[]={"COM1","COM2","COM3","COM4","COM5","COM6"}; bool OpenRS232(int portnr,long baud, char bytes, char parity, char stopbit); void SetServoPos(BYTE nServoNr,BYTE nServoPos); int main(int argc, char* argv[]) { // Hauptroutine // Com1 mit 9600,8,N,1 if(OpenRS232(0,9600,8,NOPARITY,ONESTOPBIT)) { SetServoPos(7,254); // 7. Servo ganz rechts Sleep(200); //Warten 200 milisec SetServoPos(7,0); // 7. Servo ganz links //RS232 Port wieder Frei geben. CloseHandle(g_hCom); } else { //Fehler beim Öffnen des Ports. } return 0; } bool OpenRS232(int portnr,long baud, char bytes, char parity, char stopbit) { DCB dcb; // Konfig Strucktur RS232 unter windows BOOL res = false; g_hCom = CreateFile(CP[portnr], GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if(g_hCom==INVALID_HANDLE_VALUE) { // Kann den Port nicht Öffnen return false; } // Aktuelle Konfig auslesen res=GetCommState(g_hCom, &dcb); if(!res) { // Da ist was schief gegangen return false; } // Werte Ändern dcb.fBinary = TRUE; dcb.BaudRate = baud; dcb.ByteSize = bytes; dcb.Parity = parity; dcb.StopBits = stopbit; dcb.fParity = (dcb.Parity != NOPARITY); // Konfig schreiben res=SetCommState(g_hCom, &dcb); if(!res) { // Da ist was schief gegangen return false; } return true; } void SetServoPos(BYTE nServoNr,BYTE nServoPos) { BYTE ServoBefehl[3]; ServoBefehl[0] = 255; ServoBefehl[1] = nServoNr; ServoBefehl[2] = nServoPos; unsigned long sendet = 0; if(!WriteFile(g_hCom, &ServoBefehl[0], 3, &sendet, NULL)) { //Fehler bei Schreiben auf dem Port } if(sendet != 3) { // Nicht alle Bytes geschrieben } }
Funktion:
Öffen der RS232 (COM1) und dann Dreibyt senden und nach 200 Millisek wieder drei byte und dann RS232 Freigeben.
Gruß






Zitieren

Lesezeichen