2013-03-11 4 views
1

Andrew Rapp의 XBee-API을 사용하여 두 개 이상의 종점에서 코디네이터를 통해 I/O 데이터를 샘플링하는 방법은 무엇입니까?XBee - XBee-API 및 다중 종단점

17 시리즈 1 XBees가 있습니다. 저는 하나를 코디네이터 (API 모드 = 2)로 프로그래밍하고 나머지는 엔드 포인트로 프로그래밍했습니다. XBee-API를 사용하여 Force I/O Sample ("IS") 원격 AT 명령을 보내고 각 엔드 포인트에 유니 캐스팅합니다. 이것은 두 개의 끝점이있을 때 완벽하게 작동하지만 세 번째가 추가 되 자마자 세 개 중 하나가 항상 응답하지 않습니다 (XBeeTimeoutException으로 시간 초과 됨). 응답하지 않는 물리적 장치가 항상 같지는 않지만, 항상 세 번째 장치 (예 : Device1, Device2 및 Device3에 Force I/O Sample을 보내면 Device3이 시간 초과됩니다. 장치 3, 디바이스 1, 디바이스 2에 대한 순서는, 디바이스 2 시간이 초과됩니다

나는 시간 종료 개 이상의 XBees, 3 중 약 1을 설정 한 경우 -..하지만 모든 세 번째

나는 것을 확인했습니다 XBee 자체는 괜찮습니다. 인터넷 및 스택을 검색했습니다.   오버플로가 특히 유용하지 않습니다. 간단한 ZNetRemoteAtRequest를 사용하여 시도했습니다. XBee 코디네이터 직렬 연결을 한 번 세 번 모두 열고 한 번 시도해 보았습니다 장치 당, 프로그램 당 한 번 r 유엔. 나는 코디네이터와 엔드 포인트 사이의 거리를 변화 시키려고 시도했다. Digi 설명서에서 다른 코디네이터 구성 매개 변수를 시도했습니다. 코디네이터에 대한 XBee를 변경하려고했습니다.

이것은 내가 응답 각 엔드 포인트에 강제 I/O 샘플 요청을 보내고 읽기 위해 사용하고 코드 : 두 개 이상의 엔드 포인트에서

xbee = new XBee(); // Coordinator 
xbee.open("/dev/ttyUSB0, 115200)); // Happens before any of the endpoints are contacted 

... // Loop through known endpoint addresses 

XBeeRequest request = new ZBForceSampleRequest(new XBeeAddress64(endpointAddress)); 
ZNetRemoteAtResponse response = null; 
response = (ZNetRemoteAtResponse) xbee.sendSynchronous(request, remoteXBeeTimeout); 
if (response.isOk()) { 
    // Process response payload 
} 

... // End loop and finally close coordinator connection 

어떤 도움이 될 폴링 I/O 샘플을?

답변

0

직렬 포트에서 하드웨어 흐름 제어를 사용하고 있습니까? 로컬 XBee에서 CTS가 취소 된 경우 (예 : 전송을 중단하라는 요청) 요청을 내보내는 것이 가능합니까? XBee 직렬 포트가 네트워크 데이터 속도를 따라갈 수 있도록 115200 bps로 실행 중이라고 가정합니다.

디버깅 정보를 켜거나 일부 포트 모니터링 하드웨어/소프트웨어를 연결하여 직렬 포트를 통해 로컬 XBee로가는 데이터를 표시 할 수 있습니까?

+0

하드웨어 흐름 제어가 사용되고 있습니다. 로컬 XBee가 정지 문자를 보냈지 만 코드에 도달하기 전에 rxtx와 xbee-api를 거칩니다. xbee-api는 이것에 대한 관리 기능을 갖고있는 것처럼 보이지만, 라이브러리를 사용하는 요령은 컨트롤 바이트가 몇시에 전송되는지를 알지 못하게하는 것입니다. 제가 말하고자하는 것은이 수준에서 거의 알지 못합니다. 각 요청에 대해 로컬 XBee로 전송되는 데이터를 정확히 수집하기위한 테스트를 설정하는 중입니다. 사용할 수있는 데이터가 있으면 여기에서 업데이트하겠습니다. 제안 해 주셔서 감사합니다. – spins

+0

직렬 스트림에서 소프트웨어 흐름 제어가 시작/중지 문자에 대해 걱정할 필요가 없습니다. 도서관이 모든 것을 처리해야한다는 것이 맞습니다. 어떤 이유로 든 라이브러리를 통해 코드를 작성하지 않는 XBee에서 오는 추가 패킷이 있는지 알아 보는 것이 도움이됩니다. – tomlogic

+0

XBee와 XBee의 응답으로 전송되는 데이터를 캡처 할 수있었습니다. xbee-api와 S1 XBees에서 읽은 정보가 하드웨어 흐름 제어가 기본적으로 사용됨을 나타내지 만, 데이터는 일정한 시작 바이트가 사용되고 있음을 나타냅니다. xbee-api를 제거하고 rxtx를 직접 사용하면 요청이 XBee로 보내지면 직렬 입력이 전송 완료되기 전에 직렬 출력을 방해하는 것으로 나타났습니다. 응답은 스트림 끝을 나타내는 -1입니다. . 주말 내내 조사를 계속할 것입니다. – spins

관련 문제