도와주세요!!
글 수 15,339
2007.12.07 09:37:57 (*.18.103.130)
6905
기존의 시리얼로 제어하는 프로그램에 서버가 추가되었습니다.. 그래서 처음 시리얼을 오픈할때 핸들값을 넘겨주는데 이 값이 이상한 값으려 변합니다..;; 도와주세요.. 왜 이렇게 되는지 모르겠습니다.. qt 하는 사람이 저 밖에 없어 답답한 맘에 질문합니다..
initWidget() // 메인위제 초기화 하는 함수
{
QServer *pQServer = new QServer(this); // 서버 객체 포인터 생성
QClient *pQClnt = new QClient(0,0); // 소켓 객체 포인터 생성
plc_fd = initPlcSerial(); // 시리얼 핸들값 리턴
pQClnt->n_plc_fd = plc_fd // QClient 변수에게 넘겨준다.
}
initSubWidget() // 서브 위젯 초기화 하는 함수
{
pQPlcCtrl -> plc_comport = plc_fd // 시리얼 핸들값을 넘겨준다.
}
slotReadClient() // 클라이언트가 프로토콜을 보낼때 호출되는 함수
{
char writeBuf[5] = {0x02, 0x00, 0x00, 0x00, 0x03};
qDebug("Serial Test : %d", n_plc_fd);
}
처음 시리얼 핸들값을 넘겨주는 것은
클라이언트가 서버에게 메시지를 보내면 그 값에 따라 다시 시리얼로 보내주어야 합니다..
두번째에서 넘겨주는 것은 타켓 장비에서 제어할때 넘겨줍니다..
확인을 해 보니까 장비에서 제어할때는 시리얼 핸들값이 이상이 없는데 클라이언트에서 제어할때는 시리얼 값이 변합니다..
예를 들어 첨에 n_plc_fd 값이 6 이라면 slotReadClient 에서는 이상한 값으로 변합니다..
다른 곳에서 n_plc_fd 변경하는 곳은 없습니다.. 왜 이런 현상이 일어나는 것죠?? 도와주세요..;;
initWidget() // 메인위제 초기화 하는 함수
{
QServer *pQServer = new QServer(this); // 서버 객체 포인터 생성
QClient *pQClnt = new QClient(0,0); // 소켓 객체 포인터 생성
plc_fd = initPlcSerial(); // 시리얼 핸들값 리턴
pQClnt->n_plc_fd = plc_fd // QClient 변수에게 넘겨준다.
}
initSubWidget() // 서브 위젯 초기화 하는 함수
{
pQPlcCtrl -> plc_comport = plc_fd // 시리얼 핸들값을 넘겨준다.
}
slotReadClient() // 클라이언트가 프로토콜을 보낼때 호출되는 함수
{
char writeBuf[5] = {0x02, 0x00, 0x00, 0x00, 0x03};
qDebug("Serial Test : %d", n_plc_fd);
}
처음 시리얼 핸들값을 넘겨주는 것은
클라이언트가 서버에게 메시지를 보내면 그 값에 따라 다시 시리얼로 보내주어야 합니다..
두번째에서 넘겨주는 것은 타켓 장비에서 제어할때 넘겨줍니다..
확인을 해 보니까 장비에서 제어할때는 시리얼 핸들값이 이상이 없는데 클라이언트에서 제어할때는 시리얼 값이 변합니다..
예를 들어 첨에 n_plc_fd 값이 6 이라면 slotReadClient 에서는 이상한 값으로 변합니다..
다른 곳에서 n_plc_fd 변경하는 곳은 없습니다.. 왜 이런 현상이 일어나는 것죠?? 도와주세요..;;
2007.12.07 10:56:44 (*.18.103.130)
님 정말 감사합니다.. 님 때문에 해결되었습니다.. 제가 실수로 QClient 객체를 2개 만들었습니다..;;
첨에 0_main, 1_plc, 2_zigbee 이렇게 폴더를 만들고 구현을 했는데 갑자기 서버도 해야 하는 바람에 따로 폴더를 만들지 못하고 0_main 에 소켓에 관련된 부분을 추가했습니다.. 그래서 객체 참조하는 부분이 좀 헤갈려나봅니다.. QServerSocket 클래스를 사용 해본적도 없고 넘 급한 마음에 하다 보니.. 아무리 급해도 천천히 생각하면서 해야 했는뎅..;;
주변에 QT 하는 분이 없어 매날 삽질만 했는뎅.. 감사합니다^^
첨에 0_main, 1_plc, 2_zigbee 이렇게 폴더를 만들고 구현을 했는데 갑자기 서버도 해야 하는 바람에 따로 폴더를 만들지 못하고 0_main 에 소켓에 관련된 부분을 추가했습니다.. 그래서 객체 참조하는 부분이 좀 헤갈려나봅니다.. QServerSocket 클래스를 사용 해본적도 없고 넘 급한 마음에 하다 보니.. 아무리 급해도 천천히 생각하면서 해야 했는뎅..;;
주변에 QT 하는 분이 없어 매날 삽질만 했는뎅.. 감사합니다^^
전체 소스가 없어서 정확히 말씀드리기 어렵습니다만 n_plc_fd 가 QClient 객체에만 선언되어 있는지 궁금합니다. 즉, QClient 외에도 QServer에도 선언되어 있고, slotReadClient() 슬롯이 QClient 가 아닌 다른 객체에 연결된 것이 아닌가하는 생각이 드네요.
n_plc_fd 가 QClient 안에만 있다면 혹시 QClient를 또 다른 곳에서 생성하신 것은 아닌가요?
즉, 시그널과 슬롯에 연결하는 루틴에 또 다른 QClient를 생성하신 것은 아닌가 하는 생각이 듭니다.
모쪼록 도움이 되는 글이었으면 좋겠습니다. ^^;