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;
}