So anbei das Einfaches Programm um drei Byt per RS232 raus zu schreiben einfach geht es Glaube ich nicht. Fehlerfängen sind nur Kommentare.
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
}
}
die Zeile #include "stdafx.h" muss eventuell durch #include <windows.h> ersetzt werden. Dann sollte sich das Teil mit jedem Compiler übersetzen lassen.
Funktion:
Öffen der RS232 (COM1) und dann Dreibyt senden und nach 200 Millisek wieder drei byte und dann RS232 Freigeben.
Gruß
Lesezeichen