Gast
#721341
Hi!
Ich habe grad ein kleines C++ problem.
Ich möchte ein kabel bauen das mir langzeitbelichtung mit einer EOS
erlaubt. prinzipiell muss ich da nur einen schalter haben der
angesteuert wird... alles kein problem.
Das ansteuern geht über RTS eines seriellen ports.
Nun hab ich mir aus der MS Hilfe mal eine kleine routine kopiert die die
ports öffnet, und (da noch kein kabel) mit einem multimeter die pins
gemessen. Im geschlossenen betrieb haben die Pins bei dem echten com1
eine spannung von ~ -11V. Ist der Port offen, sind es 11V. Das programm
hab ich gestestet und es funktioniert. Nun aber das problem. Da ich das
am Notebook machen will, und dieses weder seriell noch parallel hat,
muss ich einen USB -> Seriell adapter dazwischen schalten. Dafür nehme
ich den ELV UR - 100. Alles wieder verdrahtet zeigt mir im geschlossenen
zustand -8.2V. Allerdings lässt sich der port mit dem selben c++ code
nicht öffnen.
Treiber sind installiert, im geräte manager wird mir auch ein neuer com
port 3 angezeigt. Aber der Port geht einfach nicht auf.
Mit einer speziellen software die auch dafür geschrieben wurde, klappt
das, nur hab ich den code dieser software nicht, und will diese auch
nicht benutzen. Das zeigt aber, aber die hardware in ordnung ist.
Nun, muss ich beim ansprechen eines virtuellen ports irgendwas anders
machen?
hier der code, falls daraus was ersichtlich wird.
DCB dcb;
HANDLE hCom;
BOOL fSuccess;
TCHAR *pcCommPort = TEXT("COM3");
hCom = CreateFile(
pcCommPort,
GENERIC_WRITE,
0, // must be opened with exclusive-access
NULL, // default security attributes
CREATE_ALWAYS, // must use OPEN_EXISTING
1, // not overlapped I/O
NULL // hTemplate must be NULL for comm devices
);
if (hCom == INVALID_HANDLE_VALUE)
{
// Handle the error.
printf ("CreateFile failed with error %d.\n", GetLastError());
return (1);
getchar();
}
// Build on the current configuration, and skip setting the size
// of the input and output buffers with SetupComm.
SecureZeroMemory(&dcb, sizeof(DCB));
dcb.DCBlength = sizeof(DCB);
fSuccess = GetCommState(hCom, &dcb);
if (!fSuccess)
{
// Handle the error.
printf ("GetCommState failed with error %d.\n", GetLastError());
return (2);
}
// Fill in DCB: 57,600 bps, 8 data bits, no parity, and 1 stop bit.
dcb.BaudRate = CBR_57600; // set the baud rate
dcb.ByteSize = 8; // data size, xmit, and rcv
dcb.Parity = NOPARITY; // no parity bit
dcb.StopBits = ONESTOPBIT; // one stop bit
fSuccess = SetCommState(hCom, &dcb);
if (!fSuccess)
{
// Handle the error.
printf ("SetCommState failed with error %d.\n", GetLastError());
return (3);
}
_tprintf (TEXT("Serial port %s successfully reconfigured.\n"),
pcCommPort);
ich muss dazu sagen, das ich mich im bereich hardwareansteuerung nicht
wirklich auskenne, daher hab ich das von MS einfach nur kopiert und dann
getestet obs läuft oder nicht.
thx.