Knowledge Base Nr: 00080 GetLineStatusRS232.cpp - http://www.swe-kaiser.de
Downloads:
linux: zustand der CD (carrier detect) leitung an der rs232 abfragen.
benutzt um 24V signal von einer SPS über spannungsteiler einzulesen.
//beschaltung: spannungsteiler 2x3kOhm; ende an pin5 (GND) und mitte an pin1 (CD) (DSub9)
//an freiem ende 24V signal. implementiert funter linux.
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/io.h>
const int IOBASE = 0x2f8;
const unsigned char CD = 0x80; //bitmaske
int main(int argc, char *argv[])
{
printf("get rs232 line status...\n");
//berechtigung freischalten
int nErr = ioperm(IOBASE, 8, 1);
printf("ioperm(0x%04X): %d\n", IOBASE, nErr);
//zyklisch lesen (mit 1 sek verzögerung)
while(1)
{
volatile unsigned char ucStatus = inb(IOBASE+6); //f.e. 0x2fe
printf("cd status: cd=%s\n", (ucStatus & CD) ? "on" : "off");
sleep(1);
}
return EXIT_SUCCESS;
}