|
|
  |
COM-порт, MATLAB и GPM-8212 |
|
|
|
Dec 8 2008, 12:29
|
Группа: Новичок
Сообщений: 4
Регистрация: 8-12-08
Пользователь №: 42 292

|
Здравствуйте! Проблема у меня такая. Студент (я) второго курса взял научную работу по электротехнике. Суть работы - считывать данные с прибора GMP-8212 через COM-порт и отображать все измерения в программе на MATLAB'е. Матлаб я знаю плохо, да и технологию RS-232, поэтому возникли проблемы.
Я создаю сериальный объект: s=serial('COM1'); set(s,'BaudRate', 9600); set(s,'DataBits', 8); set(s,'StopBit',1); set(s,'Parity','none'); set(s,'FlowControl','none'); set(s,'InputBufferSize',2048); set(s,'ByteOrder','bigEndian'); set(s,'ReadAsyncMode','continuous'); fopen(s);
Код считывания и записи такой: string='V00'; fwrite(s,string); byteString=fread(s,2048);
V00 - это, якобы, код, который я должен передавать прибору. В результате программы в byteString записывается массив из трех чисел, причем этот массив всегда один и тот же. Запускал много раз, менял код, и ничего. Одни и теже цифры. Никаких измерений нет...
Скажите, пожалуйста, что я делаю не так? Может быть все намного сложнее, чем мне кажется?
|
|
|
|
|
Dec 8 2008, 18:14
|
Группа: Новичок
Сообщений: 4
Регистрация: 8-12-08
Пользователь №: 42 292

|
Цитата(uriy @ Dec 8 2008, 19:19)  Почитал хелп, нашел примеры. Там использованы функции printf и scanf. Замкнул вторую и третью линию порта, как и положено получил эхо. При разомкнутых линиях вылазила какая-то ошибка. Matlab 2008b >> fclose(s); >> s=serial('COM4'); >> clear >> s=serial('COM4'); >> fopen(s); >> fprintf(s, 'hello world'); >> idn = fscanf(s); >> idn
idn =
hello world Не совсем понимаю что значит "замкнул вторую и третью линию порта". У меня нет возможности работать с прибором дома, поэтому я попробовал поработать с com-портом через старый модем. В результате, когда передавал какую-либо строчку через ком-порт, а потом считывал, то считывал, собственно, эту же строчку, как и в приведенном выше примере. Но с прибором даже этого не происходит.
|
|
|
|
|
Dec 9 2008, 09:22
|
Группа: Новичок
Сообщений: 4
Регистрация: 8-12-08
Пользователь №: 42 292

|
Цитата(uriy @ Dec 9 2008, 07:53)  Для начала вам видимо нужно изучить что такое COM-порт. Не трудно посчитать что там 9 контактов. Если еще внимательней приглядеться, то на пластиковой части разъема, откуда торчат штырьки можно разглядеть цифры от 1 до 9. Это собственно и есть номер контатка. Правда иногда этих цифр на разъеме не бывает, но это редко. Если смотреть на разъем со стороны компьютера то 3 это линия TX, 2 это линия RX. Вроде не перепутал, но может быть наоборот. Так вот если эти линии замкнуть то, переданные данные должны вернуться обратно. Так? Это называется эхо. Кроме линий TX и RX возможно ваш прибор еще требует работу с CTS и RTS. Для полноценной отладки достаточно иметь два COM-порта на одном компе. Их замыкать надо физически или с помощью какого-то кода? Писал программу с помощью вот этой статьи: soft.mail.ru/journal/pdfversions/9141130.pdfТак вот там ни слова про эти замыкания... Что же делать?
|
|
|
|
|
Dec 9 2008, 19:04
|
Группа: Новичок
Сообщений: 4
Регистрация: 8-12-08
Пользователь №: 42 292

|
Цитата(uriy @ Dec 9 2008, 20:51)  Читать хелп от матлаба. Он там замечательный. И самое главное изучить как работает COM-порт. Да, открыл хелп сегодня, и увидел, что там, действительно, все очень подробно и понятно написано. Вот только проблема в том, что с английским плоховато. =). Так что не совсем понятно. =). Но буду разбираться, куда ж деваться. Спасибо большое, за помощь! Хотя, все таки, раз все не так просто, как казалось, почему же в руководстве к данному прибору на языке BASIC написано всего лишь 10 коротких строчек кода чтения и записи через COM-порт......
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|