Salve, nell'ambito di un progetto, dovrei riuscire a comunicare attraverso porta UART con un dispositivo che utilizza il protocollo MODBUS.
Ho sotto mano un codice che realizza la stessa cosa ma su porta USB (convertitore USB<>RS485); io invece mi trovo a dover lavorare con un convertitore TTL<>RS485 che si interfaccia ad una board A20-OlinuXino-LIME della Olimex attraverso una porta UART2 provvista dei seguenti segnali (RX, TX, RTS, CTS).
Sulla board è installata una distro Linux DEBIAN e la porta mi viene indicizzata come /dev/ttyS1.
Questo è il codice funzionante per la gestione su /dev/ttyUSB0
Se volessi riadattare lo stesso codice per /dev/ttyS1 come faccio a gestire il segnale RTS ? Devo abilitare qualche flag?codice:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <termios.h> union { char c[4]; float f; }u; int main(int argc, char* argv[]) { struct termios serial; char inBuff[1]; char *buffer; char cPower[] = {0x01,0x04,0x00,0x0C,0x00,0x02,0xB1,0xC8}; int fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY); if (fd == -1) { perror(argv[2]); return -1; } if (tcgetattr(fd, &serial) < 0) { perror("Getting configuration"); return -1; } //////////////////// Set up Serial Configuration //////////// serial.c_iflag = 0; serial.c_oflag = 0; serial.c_lflag = 0; serial.c_cflag = 0; serial.c_cc[VMIN] = 0; serial.c_cc[VTIME] = 10; serial.c_cflag = B2400 | CS8 | PARENB | CREAD & ~PARODD; fcntl(fd,F_SETFL,0); tcsetattr(fd, TCSANOW, &serial); // Apply configuration ////////////////////////////////////////////////////////////// int rcount; buffer = &inBuff[0]; int i = 0; int j = 0; //////////////////////////////// Power /////////////////////////////// i = 0; j = 0; memset(&inBuff[0],0,sizeof(inBuff)); write(fd,cPower,sizeof(cPower)); buffer = &inBuff[0]; printf("----------------------------------\n"); printf("Sent: "); for(j = 0;j < sizeof(cPower);j++) { printf("%02x ",cPower[j]); } printf("\r\n"); printf("Received: " ); while( (rcount = read(fd,buffer,1)) > 0) { if (rcount < 0) { perror("Read"); return -1; } buffer++; printf("%02x ",inBuff[i]); i++; } u.c[3] = inBuff[3]; u.c[2] = inBuff[4]; u.c[1] = inBuff[5]; u.c[0] = inBuff[6]; printf("\r\n"); printf("Power: %4.2f W \r\n\r\n",u.f); /////////////////////////////////////////////////////////////////////////////////////////// close(fd); }

Rispondi quotando