임베디드 485통신 개발 중 슬레이브에서 온 데이터가 읽히지 않습니다.
글쓴이: yanggungg / 작성시간: 화, 2021/07/27 - 11:15오전
485를 이용해 마스터와 슬레이브간 통신을 구현하고 있습니다.
현재까지 마스터에서 보낸 신호를 슬레이브가 받아 응답을 출력하는 부분까지는 구현된 상태입니다.
(이 부분은 PC와도 라인을 같이 연결해서 시리얼캡쳐 프로그램을 이용해 확인하였습니다.)
(슬레이브의 응답데이터도 기술문서에 작성되어있는 응답데이터와 일치하는것 또한 확인하였습니다.)
문제는 마스터 쪽에서 슬레이브의 응답데이터가 읽히지 않는다는 것입니다.
구현에 문제가 있나싶어 다른 종류의 슬레이브 장치를 구해 마스터로 신호를 보내봤는데 이 때는 잘 읽힙니다.
뭔가 놓친 부분이 있긴 한것 같은데 제가 485통신에 대해 배우거나 작업을 한적이 없어서 전혀 감을 잡을 수 없어 글 올립니다.
아래는 마스터의 시리얼을 read 모드로 셋팅할 때 호출하는 터미널셋팅입니다.
static int _set_read_termios() { struct termios tio; int modemctlline; tio.c_cflag = B9600 | CRTSCTS | CS8 | CLOCAL | CREAD; tio.c_iflag = 0; tio.c_oflag = 0; tio.c_lflag = 0; tio.c_cc[VINTR] = 0; /* Ctrl-c */ tio.c_cc[VQUIT] = 0; /* Ctrl-\ */ tio.c_cc[VERASE] = 0; /* del */ tio.c_cc[VKILL] = 0; /* @ */ tio.c_cc[VEOF] = 4; /* Ctrl-d */ tio.c_cc[VTIME] = 0; /* inter-character timer unused */ tio.c_cc[VMIN] = 0; /* blocking read until 1 character arrives */ tio.c_cc[VSWTC] = 0; /* '\0' */ tio.c_cc[VSTART] = 0; /* Ctrl-q */ tio.c_cc[VSTOP] = 0; /* Ctrl-s */ tio.c_cc[VSUSP] = 0; /* Ctrl-z */ tio.c_cc[VEOL] = 0; /* '\0' */ tio.c_cc[VREPRINT] = 0; /* Ctrl-r */ tio.c_cc[VDISCARD] = 0; /* Ctrl-u */ tio.c_cc[VWERASE] = 0; /* Ctrl-w */ tio.c_cc[VLNEXT] = 0; /* Ctrl-v */ tio.c_cc[VEOL2] = 0; /* '\0' */ modemctlline = TIOCM_RTS; ioctl( ircm.fd, TIOCMBIC, &modemctlline ); tcflush(ircm.fd, TCIFLUSH); tcsetattr(ircm.fd, TCSANOW, &tio); g_usleep(10*1000); return 0; }
Forums:
댓글 달기