реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> COM-порт, MATLAB и GPM-8212
dmitriy37
сообщение Dec 8 2008, 12:29
Сообщение #1





Группа: Новичок
Сообщений: 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 записывается массив из трех чисел, причем этот массив всегда один и тот же.
Запускал много раз, менял код, и ничего. Одни и теже цифры. Никаких измерений нет...

Скажите, пожалуйста, что я делаю не так? Может быть все намного сложнее, чем мне кажется?
Go to the top of the page
 
+Quote Post
uriy
сообщение Dec 8 2008, 16:19
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Почитал хелп, нашел примеры. Там использованы функции 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
Go to the top of the page
 
+Quote Post
dmitriy37
сообщение Dec 8 2008, 18:14
Сообщение #3





Группа: Новичок
Сообщений: 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-портом через старый модем. В результате, когда передавал какую-либо строчку через ком-порт, а потом считывал, то считывал, собственно, эту же строчку, как и в приведенном выше примере.
Но с прибором даже этого не происходит.
Go to the top of the page
 
+Quote Post
uriy
сообщение Dec 9 2008, 04:53
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Для начала вам видимо нужно изучить что такое COM-порт. Не трудно посчитать что там 9 контактов. Если еще внимательней приглядеться, то на пластиковой части разъема, откуда торчат штырьки можно разглядеть цифры от 1 до 9. Это собственно и есть номер контатка. Правда иногда этих цифр на разъеме не бывает, но это редко. Если смотреть на разъем со стороны компьютера то 3 это линия TX, 2 это линия RX. Вроде не перепутал, но может быть наоборот. Так вот если эти линии замкнуть то, переданные данные должны вернуться обратно. Так? Это называется эхо. Кроме линий TX и RX возможно ваш прибор еще требует работу с CTS и RTS. Для полноценной отладки достаточно иметь два COM-порта на одном компе.
Go to the top of the page
 
+Quote Post
dmitriy37
сообщение Dec 9 2008, 09:22
Сообщение #5





Группа: Новичок
Сообщений: 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-порта на одном компе.

Их замыкать надо физически или с помощью какого-то кода? unsure.gif
Писал программу с помощью вот этой статьи: soft.mail.ru/journal/pdfversions/9141130.pdf
Так вот там ни слова про эти замыкания...
Что же делать?
Go to the top of the page
 
+Quote Post
uriy
сообщение Dec 9 2008, 17:51
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Читать хелп от матлаба. Он там замечательный. И самое главное изучить как работает COM-порт.
Go to the top of the page
 
+Quote Post
dmitriy37
сообщение Dec 9 2008, 19:04
Сообщение #7





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



Цитата(uriy @ Dec 9 2008, 20:51) *
Читать хелп от матлаба. Он там замечательный. И самое главное изучить как работает COM-порт.

Да, открыл хелп сегодня, и увидел, что там, действительно, все очень подробно и понятно написано. Вот только проблема в том, что с английским плоховато. =). Так что не совсем понятно. =). Но буду разбираться, куда ж деваться. Спасибо большое, за помощь!

Хотя, все таки, раз все не так просто, как казалось, почему же в руководстве к данному прибору на языке BASIC написано всего лишь 10 коротких строчек кода чтения и записи через COM-порт......
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 10:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01444 секунд с 7
ELECTRONIX ©2004-2016