|
как определить конец пакета ? |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 29)
|
Aug 16 2013, 05:03
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
Цитата(Alex11 @ Aug 15 2013, 22:28)  Использовать 9 бит, если контроллер позволяет. проблема в том, что с одной стороны pc, где девятым битом управлять получается весьма криво да и везде он плохо пролазит вообще, для себя я бы конвертор rs232-can поставил - снимает кучу головняка, в т.ч. сабж Цитата(Warlockwolf @ Aug 15 2013, 23:03)  к сожалению, у 4 в 8 очень большой оверхед
|
|
|
|
|
Aug 16 2013, 10:18
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(Огурцов @ Aug 15 2013, 23:46)  один мастер - много слейвов формат пакета простейший: первый байт длина/направление, второй - команда/адрес, затем данные, затем crc16 и стоп-байт 0xff Задача не определена... Кто сидит в сети? Если РС, то это одно, а если микроконтроллеры, то несколько другое... Скорости и расстояния не определены... Потребность в квитировании - не определена... Прерывания от слэйвов??? Какой физический стык? Провод или оптика? Какая топология? И что плохого в байтстаффинге, если речь идет о РС? И какие проблемы с тем, чтобы в РС воткнуть модуль связи? Или чем плох Ethernet? И как Вы задумали вот это: "длина/направление". Это как будет идти прием данных: по одной паре или по разным??? А так, поставьте LIN... и будет Вам протокол....
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Aug 16 2013, 10:38
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
с пк на мк 115200, 10 метров квитирование не определено, но я склоняюсь к необходимости думаю, слейвы должны иметь возможность сигналить при необходимости rs232/rs422 дуплекс, медь, очевидно байтстаффинг неопределен по длине, замена 7*8 в 8*7 кажется намного более удобной usb ненадежен, слотов нет, остальное все коряво эзернет всем хорош, я сам был бы только рад CODE // Packet format ========================================================
// byte # 0 // 0.7 service bit, 0 // 0.6 destination address presece // 0.5 source address presece // 0.4 packet length.4 // 0.3 packet length.3 // 0.2 packet length.2 // 0.1 packet length.1 // 0.0 packet length.0
// [byte # 1] // 1.7 service bit, 0 // 1.6 destination address.6 // 1.5 destination address.5 // 1.4 destination address.4 // 1.3 destination address.3 // 1.2 destination address.2 // 1.1 destination address.1 // 1.0 destination address.0
// [byte # 2] // 2.7 service bit, 0 // 2.6 source address.6 // 2.5 source address.5 // 2.4 source address.4 // 2.3 source address.3 // 2.2 source address.2 // 2.1 source address.1 // 2.0 source address.0
// byte # 3 // 3.7 service bit, 0 // 3.6 command.6 // 3.5 command.5 // 3.4 command.4 // 3.3 command.3 // 3.2 command.2 // 3.1 command.1 // 3.0 command.0
// byte # 4..byte # length - 2 // 4.7 service bit, 0 // 4.6 data.6 // 4.5 data.5 // 4.4 data.4 // 4.3 data.3 // 4.2 data.2 // 4.1 data.1 // 4.0 data.0
// byte # 4 + 7 // 11.7 service bit, 0 // 11.6 data6.7 // 11.5 data5.7 // 11.4 data4.7 // 11.3 data3.7 // 11.2 data2.7 // 11.1 data1.7 // 11.0 data0.7
// byte # length - 1 // n-1.7 service bit, 0 // n-1.6 crc7.6 // n-1.5 crc7.5 // n-1.4 crc7.4 // n-1.3 crc7.3 // n-1.2 crc7.2 // n-1.1 crc7.1 // n-1.0 crc7.0
// byte # length // n.7 service bit, 1 // n.6 service bit, 1 // n.5 service bit, 1 // n.4 service bit, 1 // n.3 service bit, 1 // n.2 service bit, 1 // n.1 service bit, 1 // n.0 service bit, 1
|
|
|
|
|
Aug 16 2013, 10:52
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(Огурцов @ Aug 16 2013, 14:38)  байтстаффинг неопределен по длине, замена 7*8 в 8*7 кажется намного более удобной usb ненадежен, слотов нет, остальное все коряво эзернет всем хорош, я сам был бы только рад Вот про байтстаффинг так не надо. Сначала готовится пакет данных. Там и есть все, вместе с байтстаффингами... А потом к нему добавляете заголовки, а их длина и местоположение известно... Да и считается быстрее и легче, чем кодирование на уровне бит. Т.к. при перекодировании бит, придется сдвигать байты в разные посылки в контроллер... Замена "7*8 в 8*7" говорит о том, что Вы будете передавать не 8-ми битовые hex, а 7-ми битовые символьные коды? Ну и какие проблемы с Ethernet? Гоняйте UDP пакеты. Со своим протоколом перезапроса по несовпадению данных в UDP... Например, если контроллер слабый, то к нему можно прицепить на SPI Ethernet-контроллер и все дела... И уж где при этом будет стоять РС значения иметь не будет...
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Aug 16 2013, 11:26
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(Огурцов @ Aug 16 2013, 15:05)  ...хочется чуда, какого-нибудь неизвестного метода......формат пакета простейший: первый байт длина/направление, второй - команда/адрес, затем данные, затем crc16 и стоп-байт 0xff... я явно что то не догоняю: 1) у вас в первом байте есть длина пакета. 2) у вас есть признак конца пакета. и Вас интересует как определить конец пакета? эээээээ как бы это дано. я так понимаешь, что рассматриваются три варианта? 1) по тайм ауту 2) по разборке данных 3) вообще уйти от этого нафик, на более верхний уровень (изернет и иже. правда там уже логический уровень - целостность данных всё равно останется)
|
|
|
|
|
Aug 16 2013, 11:42
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(Огурцов @ Aug 16 2013, 15:05)  у байтстаффинга длина пакета может недетерминированно выстрелить в два раза в случае если пойдет серия данных со значением байта подлежащего замене, вот это мне и не нравится замена 7*8 не требует сдвига всех данных одновременно - может быть проще сдвигать каждый байт на один бит и задвигать это в восьмой байт вообще-то, хочется чуда, какого-нибудь неизвестного метода, который не страдает обоими недостатками вот с эзернет точно проблемы - его нет на мк, контроллеры уже куплены, так бывает Например, если микроконтроллер, который у Вас куплен...., то к нему можно прицепить на SPI Ethernet-контроллер и все дела... Посмотрите у Микрела например, KSZ8851SNL... Про байт-стаффинг. Сначала формируется пакет. Т.е. данные обрабатываются и делается стаффинг. А потом к нему добавляются заголовки... Ну и кто мешает в стаффинг ввести байт, показывающий повторы? Или при увеличении числа вставленных байт можно разбить пакет на части и передавать частями... Но в любом случае это будет быстрее, чем по-битовая обработка в РС. Я когда делал свой софт по jtag-тестированию быстор в этом убедился. Все быстро делает РС, но вот битовый поток быстро обработать не может... Или, говоря по-другому, у Вас что, есть проблемы с временем доставки сообщений? Так при Вашей системе с одним мастером об этом и говорить не приходится... Это даже не смешно... Так строят только медленные сети...
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Aug 16 2013, 11:57
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
Цитата(kolobok0 @ Aug 16 2013, 11:26)  эээээээ как бы это дано да ничего не дано, это было дано, когда отправляли а когда пришло, там может быть чёрте-что, битая длина, лишний конец пакета в середине пакета или наоборот пара склеенных пакетов Цитата(iosifk @ Aug 16 2013, 11:42)  Ну и кто мешает в стаффинг ввести байт, показывающий повторы? это неплохая мысль, в худшем случае, при чередовании байт, увеличение длины пакета может произойти всего в полтора раза Цитата(iosifk @ Aug 16 2013, 11:42)  Все быстро делает РС, но вот битовый поток быстро обработать не может... да не занимать ей скорости, уж на пересылку одного бита (скорее проверку знака) время найдется Цитата(iosifk @ Aug 16 2013, 11:42)  проблемы с временем доставки сообщений? проблемы с медленным каналом, каждый лишний байт уменьшает скорость чуть ли не в два раза на частоте 500гц нужно обмениваться статистикой с устройством
|
|
|
|
|
Aug 16 2013, 12:32
|
Местный
  
Группа: Свой
Сообщений: 316
Регистрация: 22-10-05
Пользователь №: 9 976

|
Советую использовать байтстаффинг по алгоритму Consistent Overhead Byte Stuffing. Для Ваших длин пакетов всегда будет только 1 лишний байт после кодирования, при чем не зависимо от содержимого пакета. Сам им уже давно пользуюсь как для связи между МК, так и между МК и ПК.
|
|
|
|
|
Aug 16 2013, 12:38
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(Огурцов @ Aug 16 2013, 15:57)  да ничего не дано, это было дано, когда отправляли а когда пришло, там может быть чёрте-что, битая длина, лишний конец пакета в середине пакета или наоборот пара склеенных пакетов 115200, 10 метров - и будут "склеенные пакеты"? Это где же такие 10 метров? Внутри электрогидрогенератора на миллион киловатт? В облаке плазмы? У сварочного агрегата? Ну не совпадет байт, так произойдет запрос повторно... Или сделайте гальваническую развязку... Или экраны... "Склеенных пакетов " быть не может, если вводится тайм-аут между пакетами... На самом деле, все это обсуждение - полная ерунда. Есть стандартные протоколы, есть промышленные компьютеры, у которых есть выходы на такие линии связи. Так вот, не надо изобретать "самопал"... Все это мне напоминает большую "Гайку М3", о которой написано у меня на сайте... Есть задача. Есть алгоритмы. Вот под них и надо подбирать оборудование. Не проходит 115200, так и бог с ним. Добавляете к каждому Вашему микроконтроллеру по 10 долл., переходите на Ethernet. А у пром-компьютеров он уже есть. И все. Более никаких проблем не будет. Либо покупаете готовый переходник RS-Ethernet... Или хоть для начала самый простой стартовый набор, в котором есть Ethernet... Кажется у микрочипа был микроконтроллер со встроенным 10 Мбит Ethernet... И все проблемы уходят. Какая у Вас серийность? Десятки тыс. в месяц? Наверняка разовая поделка. Что Вы экономите! Ну купили микроконтроллеры, и что? Их тысячи лежат на складе? Стоимость контроллеров? А стоимость отладки и проводов? А программную совместимость с десятком программ, которые потом будут обрабатывать данные от Ваших контроллеров? А возможность дистанционно мониторить и перепрошивать из другого города? Считайте деньги... Считайте!
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Aug 16 2013, 13:02
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
Цитата(Dr.NoA @ Aug 16 2013, 12:32)  прочитал по-английски - не понял прочитал по-русски - не понял еще сильнее вывихнул моск об код ушел курить зы: если это работает, то это реально оно Цитата(iosifk @ Aug 16 2013, 12:38)  В облаке плазмы? да, с плазмой народ еще как борется Цитата(iosifk @ Aug 16 2013, 12:38)  если вводится тайм-аут между пакетами... не представляю, как на пк управлять таймаутами Цитата(iosifk @ Aug 16 2013, 12:38)  Наверняка разовая поделка наверняка
|
|
|
|
|
Aug 17 2013, 06:35
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
Цитата(Dr.NoA @ Aug 16 2013, 13:32)  Советую использовать байтстаффинг по алгоритму Consistent Overhead Byte Stuffingогромное респектище даже если я не понял суть этого, то устранение "вредных" кодов в принципе возможно причем не только одного, типа 0x00, но и нескольких, например, 0x00, 0xff, плюсом по байту на каждый код еще что-то на тему cobs www.inescporto.pt/~jsc/publications/conferences/2007JaimeICC.pdf
Сообщение отредактировал Огурцов - Aug 17 2013, 06:49
|
|
|
|
|
Aug 18 2013, 12:17
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
новый формат пакета c учетом предложений CODE // byte # 0 // 0.7 destination address presence // 0.6 source address presence // 0.5 stuff bit (babs) / stuff byte presence (cobs-r) // 0.4 crc size.1 // 0.3 crc size.0 // 0.2 paket id.2 // 0.1 paket id.1 // 0.0 paket id.0
// [byte # 1] // 1.7 destination address.7 // 1.6 destination address.6 // 1.5 destination address.5 // 1.4 destination address.4 // 1.3 destination address.3 // 1.2 destination address.2 // 1.1 destination address.1 // 1.0 destination address.0
// [byte # 2] // 2.7 source address.7 // 2.6 source address.6 // 2.5 source address.5 // 2.4 source address.4 // 2.3 source address.3 // 2.2 source address.2 // 2.1 source address.1 // 2.0 source address.0
// byte # 3 // 3.7 command.7 // 3.6 command.6 // 3.5 command.5 // 3.4 command.4 // 3.3 command.3 // 3.2 command.2 // 3.1 command.1 // 3.0 command.0
// [byte # 4]
// 4.7 stuff byte.7 // 4.6 stuff byte.6 // 4.5 stuff byte.5 // 4.4 stuff byte.4 // 4.3 stuff byte.3 // 4.2 stuff byte.2 // 4.1 stuff byte.1 // 4.0 stuff byte.0
// byte # [5..n - 5] // 5.7 data.7 // 5.6 data.6 // 5.5 data.5 // 5.4 data.4 // 5.3 data.3 // 5.2 data.2 // 5.1 data.1 // 5.0 data.0
// [byte # n - 4] // n-4.7 crc31 stuff bit // n-4.6 crc31.30 // n-4.5 crc31.29 // n-4.4 crc31.28 // n-4.3 crc31.27 // n-4.2 crc31.26 // n-4.1 crc31.25 // n-4.0 crc31.24
// [byte # n - 3] // n-3.7 crc31.23 // n-3.6 crc31.22 // n-3.5 crc31.21 // n-3.4 crc31.20 // n-3.3 crc31.19 // n-3.2 crc31.18 // n-3.1 crc31.17 // n-3.0 crc31.16
// [byte # n - 2] // n-2.7 crc31.15/crc15 stuff bit // n-2.6 crc31.14/crc15.14 // n-2.5 crc31.13/crc15.13 // n-2.4 crc31.12/crc15.12 // n-2.3 crc31.11/crc15.11 // n-2.2 crc31.10/crc15.10 // n-2.1 crc31.9/crc15.9 // n-2.0 crc31.8/crc15.8
// [byte # n - 1] // n-1.7 crc31.7/crc15.7/crc7 stuff bit // n-1.6 crc31.6/crc15.6/crc7.6 // n-1.5 crc31.5/crc15.5/crc7.5 // n-1.4 crc31.4/crc15.4/crc7.4 // n-1.3 crc31.3/crc15.3/crc7.3 // n-1.2 crc31.2/crc15.2/crc7.2 // n-1.1 crc31.1/crc15.1/crc7.1 // n-1.0 crc31.0/crc15.0/crc7.0
// byte # n // n.7 stop bit, 1 // n.6 stop bit, 1 // n.5 stop bit, 1 // n.4 stop bit, 1 // n.3 stop bit, 1 // n.2 stop bit, 1 // n.1 stop bit, 1 // n.0 stop bit, 1
минимальная длина пакета - 2 байта (заголовок и команда) + разделитель пакетов 1 или 2 байта, в зависимости от дуплекс/симплекс адаптируется под: безадресный режим мастер-слейв слейвы с прерываниями каждый с каждым произвольную длину данных размер crc: crc0/crc7/15/31 бит содержит номер пакета как-то так
|
|
|
|
|
Aug 19 2013, 19:34
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
Цитата(Огурцов @ Aug 18 2013, 13:17)  размер crc: crc0/crc7/15/31 бит меня терзают смутные сомнения - не хорошо совсем без crc, какая бы команда не была по сему оставлю crc7 и crc31 или скорее crc8 и crc32 со стаффингом crc в освободившийся бит либо со стаффингом вместе с данными первый способ несколько предпочтительнее, ибо дает возможность проверить пакет до распаковываия данных
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|