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

 
 
> 3 ATMega8 к 1 COM-порту ПК
li4
сообщение Jan 5 2007, 20:45
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 11-06-06
Пользователь №: 17 980



Подскажите пожалуйста как решить такую задачу. Есть 3 ATMega8 каждый из которых используется как 3-х канальный АЦП. Мне нужно их все подключить к одному COM-порту компьютера, причем нужно чтобы передача данных происходила без потерь. Ведь пока 1 контроллер передает данные в ПК, остальные тоже работают, а данные передавать не могут, потому что линия занята.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
otrog
сообщение Jan 9 2007, 15:19
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 22-02-06
Из: Воронеж
Пользователь №: 14 589



Ссылка на WAKE
http://www.spetspribor.com/support/software/wake/wake.html
к сожалению не работает sad.gif , поэтому выложил сохраненную страницу со всеми файлами на ФТП
/upload/DOCs/WAKE.rar

байт-стаффинг конечно не очень хорошо, но жесткая времянка еще хуже(ИМХО).
А то что MODBUS закрытый может я и ошибся, но всякие там оговорки типа:
Цитата
After 30 days, the ActiveX Controls stop communicating and return a result indicating that trial has expired
мне не нравятся.

ПС
2 prottoss На Вашем сайте исходников MODBUS нет, значит это закрытый протокол smile.gif .


--------------------
Истина рождается в спорах; но когда страсти кипят, истина испаряется.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jan 9 2007, 19:15
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(otrog @ Jan 9 2007, 19:19) *
2 prottoss На Вашем сайте исходников MODBUS нет, значит это закрытый протокол smile.gif .
Мдя, после того, что я тут выложил, и Ваших слов некоторые точно подумают, что MODBUS придумал я smile.gif , хм....я уже подумываю о новой версии - PROTTOSSBUS, а че? звучит biggrin.gif ...

Зато на моем сайте есть достаточное количество информации, что бы разобраться в протоколе и начать продуктивно работать в этом направлении. Что касается исходников - я уже говорил выше - есть на http://modbus.org совершенно БЕЗВОЗМЕЗДНЫЕ готовые исходники (под PIC, но переделывается влет за неделю) и для клиента и для сервера. Все на Сях. Может быть выложу и свои - надо их причесать немного...


--------------------
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 10 2007, 13:42
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(prottoss @ Jan 9 2007, 20:15) *
Цитата(otrog @ Jan 9 2007, 19:19) *

2 prottoss На Вашем сайте исходников MODBUS нет, значит это закрытый протокол smile.gif .
Мдя, после того, что я тут выложил, и Ваших слов некоторые точно подумают, что MODBUS придумал я smile.gif , хм....я уже подумываю о новой версии - PROTTOSSBUS, а че? звучит biggrin.gif ...

Зато на моем сайте есть достаточное количество информации, что бы разобраться в протоколе и начать продуктивно работать в этом направлении. Что касается исходников - я уже говорил выше - есть на http://modbus.org совершенно БЕЗВОЗМЕЗДНЫЕ готовые исходники (под PIC, но переделывается влет за неделю) и для клиента и для сервера. Все на Сях. Может быть выложу и свои - надо их причесать немного...


Это замечательно, может кому то понадобитсся именно полный MODBUS. Я, правда достаточно давно, реализовывал его на ASM51. В принципе с точки зрения микроконтроллера ничего сложного нет. Но для меня немного нафталином попахивает.

А вот с точки зрения PC, всё не так просто. Например задача - контроллировать задержку в 1.5 символа (пишу по памяти) на высоких скоростях (а RS485 поддерживает до 2Мбит) представляется сомнительной. Я столкнулся с тем что у меня PC самопроизвольно рвала пакеты. Иногда вставляя незначительные промежутки, но и скорость у меня не рекордная! А что будет на большой? Кроме того незнание момента окончания передачи для PC, а расчёт его, - тоже вызывает ощущение - не очень.

Всё идейно важное, - на мой взгляд из первого уровня (как я бы сказал) из MODBUS взял тот же WAKE. А для меня красивым протоколом на втором уровне является X-modem. Я исследовал для себя. Он даёт самую высокую скорость при ошибках в линии. Очень идея красивая. Правда я делал адаптивные размеры пакетов и анализировал статистику.

Интересно было бы повозится с LIN и с CAN. Чтобы самому составить своё собственное мнение.

А вообще интересно наблюдать, что все более-менее современные протоколы в конечном итоге приближаются к сетевым.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jan 11 2007, 01:04
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(SasaVitebsk @ Jan 10 2007, 13:42) *
Например задача - контроллировать задержку в 1.5 символа (пишу по памяти) на высоких скоростях (а RS485 поддерживает до 2Мбит) представляется сомнительной. Я столкнулся с тем что у меня PC самопроизвольно рвала пакеты. Иногда вставляя незначительные промежутки, но и скорость у меня не рекордная! А что будет на большой? Кроме того незнание момента окончания передачи для PC, а расчёт его, - тоже вызывает ощущение - не очень.

Разве идея MODBUS это не master-slave (запрос-ответ)?
Насколько помню там тупо до ужаса.
Посылаешь пакет, ставишь тайм-аут (отфонарный) ~100ms, если в ответ что-то пришло - хорошо, считаешь CRC, 0 - отлично, проверяешь код функции, совпал - значит ответ на наш запрос, ну а дальше парсишь сообщение.
Слейву еще проще. Получил команду - отправил незамедлительно ответ.

Где там задержки в 1.5 символа-то?

фунции modbus драйвера:

Код
void mb_SendPacket(U8 *pData, U8 size)
{
  while (size--)
    uq_PutChar( *pData++ );
}


void mb_PutMessage(PModbusDesc pDesc)
{
    pDesc->CRC = mb_crc16( (U8 *)pDesc, sizeof(*pDesc) - 2 );
    mb_SendPacket( (U8 *)pDesc, sizeof(*pDesc));
}

U8 mb_GetMessage(U8 *pStorage, U8 *retsize, U8 maxsize)
{
  U32  tempclock = Kernel_GetClock() + 100; // 100 ms timeout
  U8   temp;
  *retsize = 0;
  do
  {
     if ( (uq_GetChar(&temp)) && (*retsize < maxsize))
     {
        pStorage[(*retsize)++] = temp;
     }
     Kernel_idle();
   } while (Kernel_GetClock() < tempclock);
  
   return ((*retsize) == 0) ?  FAILED : SUCCESS;
}
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jan 11 2007, 02:22
Сообщение #6


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(defunct @ Jan 11 2007, 01:04) *
Слейву еще проще. Получил команду - отправил незамедлительно ответ.

Не, незамедлительно нельзя!
по стандарту нужно выдержать интервал не менее 4 длительностей байта
Цитата
Посылаешь пакет, ставишь тайм-аут (отфонарный) ~100ms, если в ответ что-то пришло - хорошо

если ставить слишком большие таймауты, то это очень плохим образом может сказаться
на производительности линии, если она слегка шумит
Цитата
Где там задержки в 1.5 символа-то?

По стандарту нужно чтобы каждый принимаемый байт попадал в фрейм
длительностью 1,5 байта на данной скорости.
Правда эту часть стандарта обычно никто не контролирует строго.
Главное это чтобы межбайтовые промежутки не превышали межпакетные.
Ну и контролировать можно только со стороны слейва.
Если слейв микроконтроллер то это сделать легко, а вот если PC под Win да и еще скорость
приличная, то тогда легче сразу повеситься smile.gif

Когда мастер PC под Win то существует проблема обрезания длинных пакетов:
Цитата(SasaVitebsk @ Jan 10 2007, 13:42) *
Например задача - контроллировать задержку в 1.5 символа (пишу по памяти) на высоких скоростях (а RS485 поддерживает до 2Мбит) представляется сомнительной. Я столкнулся с тем что у меня PC самопроизвольно рвала пакеты. Иногда вставляя незначительные промежутки, но и скорость у меня не рекордная! А что будет на большой? Кроме того незнание момента окончания передачи для PC, а расчёт его, - тоже вызывает ощущение - не очень.

Кстати SasaVitebsk какая у Вас скорость ?
Удалось ли победить обрезание пакетов ?
Go to the top of the page
 
+Quote Post
defunct
сообщение Jan 14 2007, 02:56
Сообщение #7


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(singlskv @ Jan 11 2007, 02:22) *
Не, незамедлительно нельзя!
по стандарту нужно выдержать интервал не менее 4 длительностей байта

Я не согласен c этой частью стандарта, потому что такая задержка ничем не обоснована, кроме кривизны мастера. Нормальный драйвер переключается на прием сразу после отправки последнего бита.

Цитата
если ставить слишком большие таймауты, то это очень плохим образом может сказаться
на производительности линии, если она слегка шумит

Однако это позволит запросто избавиться вот от этого:
Цитата
Когда мастер PC под Win то существует проблема обрезания длинных пакетов


Цитата
По стандарту нужно чтобы каждый принимаемый байт попадал в фрейм
длительностью 1,5 байта на данной скорости.

опять-таки, эта часть стандарта объясняется только кривизной мастера, и надумана только для ASCII режима. В RTU посылки-то с нормальным кодом защиты, т.о. нам не страшны любые искажения и смещения потока.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 14 2007, 20:53
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Я думаю всё это обосновано следующим. Должно быть описано КАЖДОЕ состояние. И это, в принципе, правильно. Я начал передавать фрейм. Передал - заголовок. Слэйв принял. Но ждать он может ограниченное время - иначе клинч.

Давайте посчитаем какой должен быть разрыв м/у байтами. Фактически разрыв м/у байтами должен быть меньше, чем для слэйва принятие решения о завершении пакета. Так какой он должен быть? Ну возьмём фиксированный - к примеру 5мс. Нельзя. Для скорости 1200 бод (а нижняя по стандарту думаю вообще 300) байт - 8.3мс. Таким образом для данной скорости 5мс - мало. Поэтому таймаут привязан к скорости. Возьмём 10 байт. Учтём, что после завершения пакета (для слэйва) слэйв должен обработать команду и подтвердить её приём или ответить на команду. Таким образом к задержке для мастера надо прибавить ещё задержку на ответ. Таким образом чем больше задержка - тем ниже пропускная способность шины. Это понятно. Таким образом желательно ввести МИНИМАЛЬНУЮ задержку. Но она не может быть меньше одного символа. В этом случае мы просто не будем знать закончилась ли передача. Ну вот Вам и формула должна быть минимальная задержка более одного символа. Выбрано 1.5.


Как раз здесь у меня претензий нет. Претензии по самим командам. С некоторыми я ни соглашусь ни в жизнь.

Должен быть интерфейс. Слейв должен по запросу выдавать свою програмную модель что-ли. А мастер не вправе читать/писать всё подряд. Мастер и слэйв должны быть защищены друг от друга. А здесь протоколы этого не предусматривают.
Go to the top of the page
 
+Quote Post
otrog
сообщение Jan 15 2007, 15:36
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 22-02-06
Из: Воронеж
Пользователь №: 14 589



Цитата(SasaVitebsk @ Jan 14 2007, 20:53) *
Слейв должен по запросу выдавать свою програмную модель что-ли.

Давно присматриваюсь к "Пирамиде".
http://upload.caxapa.ru/pyramid/
Цитата
Целью проектирования является разработка простого метода доступа к внутренним
параметрам приборов. Базовое условие - терминал не обязан знать или предполагать что-
либо о приборе для решения этой задачи. Единственное требование к терминалу –
реализация стандартов доступа, относящихся к системе Пирамида. Вся информация о
параметрах, методах работы с ними, элементах навигации по параметрам должна храниться
исключительно в приборе.

Изумительно выглядела бы связка WAKE(транспортный уровень) + Пирамида(логический уровень).


--------------------
Истина рождается в спорах; но когда страсти кипят, истина испаряется.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- li4   3 ATMega8 к 1 COM-порту ПК   Jan 5 2007, 20:45
- - Сергей Борщ   Цитата(li4 @ Jan 5 2007, 19:45) Подскажит...   Jan 5 2007, 21:34
- - Dopler   Цитата(li4 @ Jan 5 2007, 20:45) Подскажит...   Jan 5 2007, 21:35
|- - defunct   Цитата(Dopler @ Jan 5 2007, 21:35) ... Ид...   Jan 5 2007, 21:54
|- - vvs157   Цитата(defunct @ Jan 5 2007, 21:54) Толку...   Jan 5 2007, 22:01
|- - Dopler   Цитата(defunct @ Jan 5 2007, 21:54) Цитат...   Jan 5 2007, 22:30
|- - defunct   Цитата(Dopler @ Jan 5 2007, 22:30) Линии ...   Jan 5 2007, 22:40
||- - Dopler   ЦитатаЦитатаЛинии TX от мег соединяются в одну и п...   Jan 5 2007, 23:01
||- - defunct   Цитата(Dopler @ Jan 5 2007, 23:01) Посмот...   Jan 5 2007, 23:11
||- - Dopler   Цитата(defunct @ Jan 5 2007, 23:11) Цитат...   Jan 5 2007, 23:18
|- - Dog Pawlowa   Цитата(Dopler @ Jan 5 2007, 23:30) Да ну,...   Jan 6 2007, 07:05
- - jorikdima   А можно я тут несколько в сторону отойду. У меня п...   Jan 5 2007, 23:41
|- - Сергей Борщ   Цитата(jorikdima @ Jan 5 2007, 22:41) Вне...   Jan 6 2007, 11:20
|- - li4   Цитата(Сергей Борщ @ Jan 6 2007, 11:20) Я...   Jan 6 2007, 12:52
|- - Dopler   Цитата(li4 @ Jan 6 2007, 12:52) Цитата(Се...   Jan 6 2007, 13:34
|- - SasaVitebsk   Цитата(li4 @ Jan 6 2007, 13:52) Цитата(Се...   Jan 6 2007, 14:30
|- - Dog Pawlowa   Цитата(SasaVitebsk @ Jan 6 2007, 15:30) ....   Jan 6 2007, 15:22
|- - Dopler   Цитата(Dog Pawlowa @ Jan 6 2007, 15:22) Ц...   Jan 6 2007, 17:00
|- - Сергей Борщ   Цитата(Dog Pawlowa @ Jan 6 2007, 14:22) Н...   Jan 6 2007, 20:54
|- - SasaVitebsk   Цитата(Dog Pawlowa @ Jan 6 2007, 16:22) Ц...   Jan 6 2007, 22:34
|- - Сергей Борщ   Цитата(SasaVitebsk @ Jan 6 2007, 21:34) В...   Jan 6 2007, 23:28
|- - Dog Pawlowa   Цитата(SasaVitebsk @ Jan 6 2007, 23:34) В...   Jan 7 2007, 16:03
|- - SasaVitebsk   Цитата(Dog Pawlowa @ Jan 7 2007, 17:03) Д...   Jan 7 2007, 19:12
|- - Dog Pawlowa   Цитата(SasaVitebsk @ Jan 7 2007, 20:12) ....   Jan 7 2007, 21:42
|- - prottoss   Цитата(Dog Pawlowa @ Jan 8 2007, 01:42) ....   Jan 7 2007, 22:02
||- - singlskv   Цитата(prottoss @ Jan 7 2007, 22:02) Я ко...   Jan 8 2007, 01:34
|||- - prottoss   Цитата(singlskv @ Jan 8 2007, 05:34) Прош...   Jan 8 2007, 04:52
|||- - singlskv   Цитата(prottoss @ Jan 8 2007, 04:52) Цита...   Jan 8 2007, 13:35
|||- - prottoss   Цитата(singlskv @ Jan 8 2007, 17:35) Есть...   Jan 8 2007, 13:52
||||- - singlskv   Цитата(prottoss @ Jan 8 2007, 13:52) Цита...   Jan 8 2007, 14:40
|||- - prottoss   [quote name='singlskv' date='Jan 8 200...   Jan 8 2007, 14:51
||- - Dog Pawlowa   Цитата(prottoss @ Jan 7 2007, 23:02) Цита...   Jan 8 2007, 10:31
||- - prottoss   Цитата(Dog Pawlowa @ Jan 8 2007, 14:31) З...   Jan 8 2007, 10:48
||- - Dog Pawlowa   Цитата(prottoss @ Jan 8 2007, 11:48) ребя...   Jan 8 2007, 13:00
||- - prottoss   Цитата(Dog Pawlowa @ Jan 8 2007, 17:00) Ц...   Jan 8 2007, 13:13
||- - SasaVitebsk   Цитата(Dog Pawlowa @ Jan 8 2007, 14:00) Ц...   Jan 8 2007, 20:30
||- - prottoss   Цитата(SasaVitebsk @ Jan 9 2007, 00:30) М...   Jan 8 2007, 20:54
||- - singlskv   Цитата(prottoss @ Jan 8 2007, 20:54) ЗЫ: ...   Jan 9 2007, 01:43
||- - prottoss   Цитата(singlskv @ Jan 9 2007, 05:43) Цита...   Jan 9 2007, 03:55
|- - SasaVitebsk   Цитата(Dog Pawlowa @ Jan 7 2007, 22:42) Ц...   Jan 8 2007, 04:05
- - Serj78   Подтверждаю, можно отдельно включать и приемник и...   Jan 5 2007, 23:46
- - li4   Спасибо всем ответившим.ЦитатаЛинии TX от мег соед...   Jan 6 2007, 09:15
- - beer_warrior   ЦитатаА почему нельзя RS232 так объединить? А пото...   Jan 6 2007, 13:25
- - li4   ЦитатаПочему нельзя применить RS485? Я спросил пот...   Jan 6 2007, 23:16
|- - defunct   Цитата(li4 @ Jan 6 2007, 23:16) Цитата По...   Jan 7 2007, 00:35
- - li4   Значит выбираю RS485 . Достаточно каждый контролле...   Jan 7 2007, 01:17
|- - SasaVitebsk   Цитата(li4 @ Jan 7 2007, 02:17) Значит вы...   Jan 7 2007, 02:37
- - li4   С USB это интересно и перспективно, но сначала хоч...   Jan 7 2007, 12:20
|- - defunct   Цитата(li4 @ Jan 7 2007, 12:20) С USB это...   Jan 7 2007, 12:55
|- - Сергей Борщ   Цитата(li4 @ Jan 7 2007, 11:20) Выводы TX...   Jan 7 2007, 13:48
- - prottoss   Цитата(li4 @ Jan 6 2007, 00:45) Подскажит...   Jan 7 2007, 14:31
- - li4   ЦитатаПочитайте даташит, сравните уровни напряжени...   Jan 7 2007, 17:14
|- - prottoss   Цитата(li4 @ Jan 7 2007, 21:14) Значит на...   Jan 7 2007, 17:26
|- - Сергей Борщ   Цитата(li4 @ Jan 7 2007, 16:14) Из описан...   Jan 8 2007, 01:51
- - Stanislav   Граждане, а можно и мне свой пятачок вставить? Ч...   Jan 8 2007, 02:08
|- - Сергей Борщ   Цитата(Stanislav @ Jan 8 2007, 01:08) Име...   Jan 8 2007, 03:02
- - li4   Подумал и решил что избавиться от программного кон...   Jan 8 2007, 15:27
|- - Сергей Борщ   Цитата(li4 @ Jan 8 2007, 14:27) прошу пос...   Jan 8 2007, 15:56
- - li4   Все исправил, схемы приняли вид: RS232 to RS485: ...   Jan 8 2007, 18:56
|- - Сергей Борщ   Цитата(li4 @ Jan 8 2007, 17:56) Все испра...   Jan 8 2007, 21:20
|- - prottoss   Цитата(Сергей Борщ @ Jan 9 2007, 01:20) В...   Jan 8 2007, 21:29
|- - WHALE   Цитата(prottoss @ Jan 8 2007, 21:29) Цита...   Jan 8 2007, 21:59
|- - SasaVitebsk   Цитата(WHALE @ Jan 8 2007, 22:59) Цитата(...   Jan 9 2007, 01:13
- - otrog   Дабы не заморачиваться с микросекундными задержкам...   Jan 9 2007, 13:46
|- - prottoss   Цитата(otrog @ Jan 9 2007, 17:46) Дабы не...   Jan 9 2007, 13:57
- - GDI   в WAKE используется байт-стаффинг, так что удвоени...   Jan 9 2007, 14:13
|- - prottoss   Цитата(GDI @ Jan 9 2007, 18:13) в WAKE ис...   Jan 9 2007, 14:31
- - GDI   не все так плохо.. признаком стаффинга является ...   Jan 9 2007, 15:01
|- - SasaVitebsk   Цитата(singlskv @ Jan 11 2007, 03:22) Кст...   Jan 11 2007, 03:44
|- - SasaVitebsk   Цитата(otrog @ Jan 15 2007, 16:36) Цитата...   Jan 15 2007, 18:40
|- - Dog Pawlowa   Я потерял исходное сообщение, кто это высказал: ...   Jan 16 2007, 21:01
|- - SasaVitebsk   Цитата(Dog Pawlowa @ Jan 16 2007, 22:01) ...   Jan 16 2007, 23:28
|- - otrog   Цитата(Dog Pawlowa @ Jan 16 2007, 21:01) ...   Jan 17 2007, 08:55
- - li4   Цитатаotrog: Выложил сохраненную страницу со всеми...   Jan 9 2007, 19:01
|- - otrog   Цитата(li4 @ Jan 9 2007, 19:01) Цитатаotr...   Jan 10 2007, 10:54
- - prottoss   2 singlskv Зачем так щипетильно относится к станд...   Jan 11 2007, 09:09
- - Leonty   1. В асинхронном режиме можно ввести метрику проце...   Jan 12 2007, 16:37
- - singlskv   Цитата(defunct @ Jan 14 2007, 02:56) Цита...   Jan 15 2007, 00:01
|- - SasaVitebsk   Цитата(singlskv @ Jan 15 2007, 01:01) ......   Jan 15 2007, 14:29
- - Svin62   Скажите пожалуйста, вот если соединять слейвы с ма...   Feb 8 2009, 09:38
- - demiurg_spb   ИМХО никак. Но может быть есть драйверы RS-232 кот...   Feb 8 2009, 11:09
- - zltigo   Цитата(Svin62 @ Feb 8 2009, 12:38) Короче...   Feb 8 2009, 11:15
- - Svin62   Цитата(zltigo @ Feb 8 2009, 14:15) Управл...   Feb 8 2009, 11:54
- - zltigo   Цитата(Svin62 @ Feb 8 2009, 14:54) Значит...   Feb 8 2009, 12:25


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

 


RSS Текстовая версия Сейчас: 17th June 2025 - 03:27
Рейтинг@Mail.ru


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