문제

아래의 모든 코드는 작동합니다. 내 장치가 응답합니다. C, 7은 재설정입니다. 내가 이것을 두 번째로 실행하면 응답하지 않습니다. 장치를 수동으로 켜고 켜면이 스크립트를 다시 실행합니다. 그러나 버튼을 눌러 스크립트를 두 번째로 실행하면 아닙니다.

RS232 : 57600,8, n, 1

어떤 아이디어 ?? 이것을 해결하는 데 필요한 더 많은 정보가 있습니까?

*또한이 작업을 수행 할 때는 read () 함수를 사용하여 장치 응답을 얻어야합니다. 아래 코드를 기반으로 사용해야하는 올바른 형식을 아는 사람이 있습니까? C ++를 처음 사용해서 죄송합니다 ... 저는 PHP 사람이 더 많습니다.

*나는 또한 1024가 옳은지 모르겠지만, 그렇게 작동하는 것 같습니다 ...

#include <termios.h>

int fd;
struct termios options;
fd=open("/dev/tty.KeySerial1", O_RDWR | O_NOCTTY | O_NDELAY);
fcntl(fd, F_SETFL, 0);
tcgetattr(fd,&options);
options.c_ispeed=57600;
options.c_ospeed=57600;
options.c_cflag |= (CLOCAL | CREAD);
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
options.c_cflag &= ~CSTOPB;
options.c_lflag &= ~ECHO;
options.c_oflag &= ~ECHO;
options.c_oflag &= ~OPOST;
options.c_cflag |= CS8;
options.c_cflag |= CRTSCTS;
options.c_cc[VMIN] = 0;
options.c_cc[VTIME] =10;
tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&options);

write(fd, "C,7\r\n", 1024);

close(fd);
도움이 되었습니까?

해결책

1024는 실제로 당신의 문제 일 수 있습니다. 세 번째 매개 변수 write() 함수는 작성할 바이트 수를 나타냅니다.

ssize_t write(int fildes, const void *buf, size_t nbyte);

참조 write () 용 남자 페이지 자세한 내용은.

귀하의 경우에는 5 자 ( 'C' ','7 '' R '및' n ')를 보내기 때문에 숫자는 5 여야합니다.

1024의 값을 제공함으로써 실제로 일련 채널에 또 다른 1019 개의 쓰레기 문자를 보내는 것입니다.

업데이트:

그만큼 read() 기능은 거의 동일한 주장을 가지고 있습니다.

ssize_t read(int fildes, void *buf, size_t nbyte);

두 번째 매개 변수로 쓰기 가능한 버퍼를 제공해야합니다. 예를 들어, 12 바이트를 읽으려면 다음을 사용합니다.

char someData[12];
read(fd, someData, 12);

읽어야 할 문자 수를 어떻게 결정하는지 잘 모르겠지만 ssize_t 함수에 의해 반환 된 숫자는 실제로 얼마나 많이 읽었는지 알려줍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top