2013-10-28 4 views
0

직렬 포트를 통해 Matlab에 연결된 CyberGlove가 있습니다. 데이터 샘플을 요청한 다음 샘플을 다시 읽는 명령을 작성하려고합니다. 나는 다음 중 하나 진수 또는 ASCII에서 센서 정보를 얻을 수 읽기/쓰기 할 수Matlab에서 직렬 포트 읽기/쓰기 문제

s = serial('/dev/ttyS0') 
set(s,'BaudRate',115200) 
fopen(s) 

:

나는 성공적으로 다음 코드로 장갑을 연결했다. 바이너리에서

내가 뭐하는 거지 : 다음 밖으로

항상
fwrite(s,'G') 
fread(s) 

fread 번과 겉으로는 임의의 길이를 의미 정수를 포함하는 (1-100 +)의 열 벡터를 뱉어.

는 ASCII로, 명령은 다음과 같습니다

fprintf(s,'g') 
fscanf(s) 

이는 판독 값으로 빈 문자열을 제공합니다. 글러브가 점점 커지고 있고, 적어도 다소 명령을 처리하고 있다는 것을 알고 있습니다. 왜냐하면 잘못된 명령을 주면 오류 메시지 e?이 반환되기 때문입니다.

나는 정말로 나를 혼란스럽게하는 부분이 있습니다. 나는 우연히 장갑에서 올바르게 읽을 수있는 방법을 발견했습니다.

(겉으로는 임의의 출력을 제공 밖으로 회)

fread(s)

fprintf(s,'g')

fscanf(s)

그때 올바른 문자열 출력 'g 1 76 93 113 89 42 20 77 98 106 117 81 62 23 52 60 34 68 57 254 92 26'을 얻을.

내 질문은 :

(1) 당사 마지막 부분은 올바른 응답을 생성합니까?

(2) 어떻게하면 바이너리 명령을 읽을 수 있습니까? 이것은 내가 실제로 얻고 싶은 것입니다.

+0

이것은 Matlab 문제가 아닌 기기의 통신 프로토콜에 문제가있는 것처럼 들립니다. –

+0

그럼 아마 다른 테스트를해야 할 것 같습니다. 거기에 사용할 수있는 간단한 명령 줄 방법이 있습니까? – Pterosaur

+0

좋은 질문 ... 이것이 최선의 방법인지는 잘 모르겠지만,'cat/dev/ttyS0'을 읽고 쓰고'printf ...>/dev/ttyS0'를 써서 쓸 수있을 것 같습니다. printf는 bash가 내장되어 있습니다. 하지만 먼저 권하는 것은 장치의 문서를 확인하고 모든 것을 이해하는지 확인하는 것입니다. –

답변

1

문제를 파악했습니다. 예상보다 많은 바이트가 반환되지 않아 시간 초과가 발생했으며 잘못된 숫자가 예상됩니다. 기본적으로 get(s, 'InputBufferSize')은 512를 반환하지만 실제 데이터는 24 바이트입니다. fopen(s)을 호출하기 전에, 나는 방금 set(s, 'InputBufferSize', 24);을 실행했고, 내가 기대했던 바이너리 읽기/쓰기에서 올바른 24 8 비트 정수를 타임 아웃없이 얻었다.