Виж темите без отговор | Виж активните теми
Дата и час: Пет Апр 19, 2024 11:46 am
пик микро сериен порт RS233 дайте формула за протокола
Автор |
Съобщение |
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 11:02 am Мнения: 8891 Местоположение: Разград
|
Re: пик микро сериен порт RS233 дайте формула за протокола
1 на милиони. Твърде малък шанс за да се притесняваш чак толкова много. Ако протокола имаше проблем, нямаше да е стандарт просъществувал десетилетия. А и дори е пренесен в същия вид на TCP. Без crc-то само. Там долните слоеве така или иначе я вършат тая работа.
|
Съб Авг 15, 2020 2:26 pm |
|
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 10:22 pm Мнения: 3074
|
Re: пик микро сериен порт RS233 дайте формула за протокола
не е 1 на милиони..
|
Съб Авг 15, 2020 2:54 pm |
|
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 8:21 pm Мнения: 27996 Местоположение: София
|
Re: пик микро сериен порт RS233 дайте формула за протокола
изобщо не е 1 на милион, зависи както от дължината на пакета така и от броя грешки, в зашумена среда и по-калпав хардуерен слой може ида не е достатъчно и за сравнително къси пакети : http://users.ece.cmu.edu/~koopman/roses ... bedded.pdf
|
Съб Авг 15, 2020 4:01 pm |
|
|
gicho
Ранг: Форумен бог
Регистриран на: Пон Мар 13, 2006 12:59 pm Мнения: 3855 Местоположение: Габрово
|
Re: пик микро сериен порт RS233 дайте формула за протокола
Защо да се мъчи човек с модбъс, след като има CAN? Там имаш наготово 15-битово CRC от хардуера... Относно чексумата - никога не е достатъчно силна... Т.е. правенето на safety не се ограничава до това да има надеждна чексума. Там е до вероятност за отказ - става сейфти когат минеш под определено число тая вероятност. В конкретния случай, дори да имаш SHA512, трябва да отчетеш фактори като: - софтуера е калпав и в определена ситуация, примерно след като е вървял 33 дена без рестарт, не реагира правилно и въпреки че чексумата на излиза, оня вика всичко е ок - т.е. бъг който чупи защитата - ако си изчистил софтуера, остава да предвидиш шанса точно когато има шум да дойде енергия свише (нЕкоя бърза частица) и твоя процесор да обърка сметката и да си помисли че е вярна - и евентуално, че тоя процесор си бие отбой, щото някой забравил да сложи чексума на флаша и он сменим инструкциите и сложил един NOP точно дето трябвало да скочи към рекацията за грешка... Та като цяло трябва да имаш идея какво гониш, какъв бюджет имаш, т.е. доколко има пазар, и т.н. Разбира се, добрите инженерни практики изискват да мислиш по тия теми дори когато правиш лампички за елха, колкото и да не е критично да мигнат грешно веднъж в годината. Към темата има отношение и бит еррор рейта на физиката отдолу - ако е много зле работата и трябва да компенсираш с големи CRC-та, че и да възстановяваш данни с разните ECC-та, значи по-добре да не ползваш тая физика - поне когато имаш избор, т.е. по-добре смени физиката, която явно е неподходяща за даденото приложение/обкръжениет - щото ти хубаво ще детектнеш грешката, ще поискаш повторение, а твоето искане наобратно може пак да се счупи, и после пак грешка ама в друг бит, и после пак повторение - и какво стана с машината - ще работи ли или ще си оправя грешките? Особено ако се гони някакъв real time и има времеви ограничения, хич не е добре. Затова разните индустриални бъсове имат механизми за подобни ситуации - примерно затварят си очите за единична грешка, ако на следващия цикъл дойда верни данни. В CAN има броячи за тия неща на хардуерно ниво дори и те пазят от такива грешки, по-точно те информират че нещата не са каквито трябва да бъдат. Ако се вълнуваш от тази тематика, най-добре стъпи на раменете на някого, т.е. базирай се на одобрен (сертифициран) сейфти стандарт и ако си наистина амбициозен може да си помислиш да направиш някакъв продукт. Имам предвид че инвестицията в разработването на "концепцията", т.е. стандарта, е сума за която дори хидроинжЕнера ще излезе от сараите...
|
Съб Авг 15, 2020 9:32 pm |
|
|
panchev68
Ранг: Минаващ
Регистриран на: Сря Сеп 28, 2011 9:04 am Мнения: 38
|
Re: пик микро сериен порт RS233 дайте формула за протокола
Благодаря на gicho за хубавият пост. Съгласен съм на 100% с него. Ако наистина средата е много зашумена и modbus или друг протокол генерира доста на често грешни . Явно изборът на комуникация не е правелен. Това обаче е доста рядък случай. За CRC-16 не съм много съгласен , че може да се излъже толкова лесно. Не е невъзможно , но на практика е много трудно. Все как трябва да съвпаднат няколко критерия за да се валидира пакета правилно (данни , позиция и стойността от предходното изчисление ) | | | | Код: auto CModbus::XCRC::calc(const uint8_t * msg_ptr, size_t msg_len) noexcept->uint16_t { static const uint16_t crc_table[256]= { 0x0000,0xC0C1,0xC181,0x0140,0xC301,0x03C0,0x0280,0xC241,0xC601,0x06C0,0x0780,0xC741,0x0500,0xC5C1,0xC481,0x0440, 0xCC01,0x0CC0,0x0D80,0xCD41,0x0F00,0xCFC1,0xCE81,0x0E40,0x0A00,0xCAC1,0xCB81,0x0B40,0xC901,0x09C0,0x0880,0xC841, 0xD801,0x18C0,0x1980,0xD941,0x1B00,0xDBC1,0xDA81,0x1A40,0x1E00,0xDEC1,0xDF81,0x1F40,0xDD01,0x1DC0,0x1C80,0xDC41, 0x1400,0xD4C1,0xD581,0x1540,0xD701,0x17C0,0x1680,0xD641,0xD201,0x12C0,0x1380,0xD341,0x1100,0xD1C1,0xD081,0x1040, 0xF001,0x30C0,0x3180,0xF141,0x3300,0xF3C1,0xF281,0x3240,0x3600,0xF6C1,0xF781,0x3740,0xF501,0x35C0,0x3480,0xF441, 0x3C00,0xFCC1,0xFD81,0x3D40,0xFF01,0x3FC0,0x3E80,0xFE41,0xFA01,0x3AC0,0x3B80,0xFB41,0x3900,0xF9C1,0xF881,0x3840, 0x2800,0xE8C1,0xE981,0x2940,0xEB01,0x2BC0,0x2A80,0xEA41,0xEE01,0x2EC0,0x2F80,0xEF41,0x2D00,0xEDC1,0xEC81,0x2C40, 0xE401,0x24C0,0x2580,0xE541,0x2700,0xE7C1,0xE681,0x2640,0x2200,0xE2C1,0xE381,0x2340,0xE101,0x21C0,0x2080,0xE041, 0xA001,0x60C0,0x6180,0xA141,0x6300,0xA3C1,0xA281,0x6240,0x6600,0xA6C1,0xA781,0x6740,0xA501,0x65C0,0x6480,0xA441, 0x6C00,0xACC1,0xAD81,0x6D40,0xAF01,0x6FC0,0x6E80,0xAE41,0xAA01,0x6AC0,0x6B80,0xAB41,0x6900,0xA9C1,0xA881,0x6840, 0x7800,0xB8C1,0xB981,0x7940,0xBB01,0x7BC0,0x7A80,0xBA41,0xBE01,0x7EC0,0x7F80,0xBF41,0x7D00,0xBDC1,0xBC81,0x7C40, 0xB401,0x74C0,0x7580,0xB541,0x7700,0xB7C1,0xB681,0x7640,0x7200,0xB2C1,0xB381,0x7340,0xB101,0x71C0,0x7080,0xB041, 0x5000,0x90C1,0x9181,0x5140,0x9301,0x53C0,0x5280,0x9241,0x9601,0x56C0,0x5780,0x9741,0x5500,0x95C1,0x9481,0x5440, 0x9C01,0x5CC0,0x5D80,0x9D41,0x5F00,0x9FC1,0x9E81,0x5E40,0x5A00,0x9AC1,0x9B81,0x5B40,0x9901,0x59C0,0x5880,0x9841, 0x8801,0x48C0,0x4980,0x8941,0x4B00,0x8BC1,0x8A81,0x4A40,0x4E00,0x8EC1,0x8F81,0x4F40,0x8D01,0x4DC0,0x4C80,0x8C41, 0x4400,0x84C1,0x8581,0x4540,0x8701,0x47C0,0x4680,0x8641,0x8201,0x42C0,0x4380,0x8341,0x4100,0x81C1,0x8081,0x4040 };
assert (msg_ptr and msg_len); uint16_t crc = 0xffff; while (msg_len--) { uint8_t i = *(msg_ptr++) ^ crc; crc = (crc>>8)^crc_table[i]; } return crc; } | | | | |
Ползвам подобно валидиране от много години , но с друг полином и на практика не съм изпадал в ситуация на невалидни данни с валидна чексума
_________________ Оставете човек в самолет и той ще летне за един ден. Хвърлете човек от самолета и той лети до края на живота си.
|
Нед Авг 16, 2020 4:11 am |
|
|
stefan63
Ранг: Форумен бог
Регистриран на: Вто Фев 07, 2012 10:22 pm Мнения: 3074
|
Re: пик микро сериен порт RS233 дайте формула за протокола
Добър пост , Гичо. Зададох въпроса, защото мой приятел заподозря -че му се е слуъчило такова нещо на реален обект. Не е Модбус, но ползва същия полином. Стана ми интересно , та затова... На Модбус има няколко реквизита - адрес,адрес на регистъра, брой байтове (в командите за трансфер на няколко регистътъра), които допълнително пазят от грешно поведение. Но четворна грешка в данните - примерно мощен шум по средата на байта ,между валиден старт и стоп битове- може би не се "хваща". Не знам как е в единичните команди , които са много къси. На Модбус работят датчиците, с които отчитат акцизните стоки(масла,бои) - системи ИКУНК (ако не бъркам съкращението) . Преди десетина години , когато митниците дефинираха изискванията - така беше записано. Концентраторът си говори с митницата през интернет, но с датчиците - през Модбус. В някои случаи може да има доста дълги пакети, и какви мерки са взети срещу шум - си е избор на разработчиците. Хубавото е, че става въпрос само за пари, не за промишлени опасности.
|
Нед Авг 16, 2020 7:18 am |
|
|
ДедоБоре
Ранг: Форумен бог
Регистриран на: Нед Ное 21, 2004 10:31 pm Мнения: 9645
|
Re: пик микро сериен порт RS233 дайте формула за протокола
теорията на вероятностите е хубаво нещо, понякога е забавна, но трябва да се помни, че си е 'само теория'. примерно - вероятността да срещнеш динозавър на улицата е точно 50% - може да го срещнеш, може и да не го срещнеш. практически, дори очевидни неща като ези-тура, рядко са точно 50% - по-скоро се получава нещо като 49:51, зависи от броя хвърляния.
|
Нед Авг 16, 2020 7:45 am |
|
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 8:21 pm Мнения: 27996 Местоположение: София
|
Re: пик микро сериен порт RS233 дайте формула за протокола
Ееее ти тука подвежда, ези-тура физически няма как да е 50:50... и въпреки че шанса да спукаш гума пред гумаджийница и на 200 км от най-близката такава да е еднакъв, и макар че много по често минаваш покрай гумаджийница гарантирано ще спукаш гума точно някъде в полето и естествено няма да имаш резервна. Да не забравяме, че освен теория на вероятностите има и теория за всемирната гадост....
|
Нед Авг 16, 2020 7:50 am |
|
|
itso.t
Ранг: Форумен бог
Регистриран на: Чет Фев 03, 2005 1:21 am Мнения: 10611 Местоположение: София
|
Re: пик микро сериен порт RS233 дайте формула за протокола
А параграф 22 гласи, че ще спукаш гума пред гумарницата когато тя не работи...
|
Нед Авг 16, 2020 7:55 am |
|
|
panchev68
Ранг: Минаващ
Регистриран на: Сря Сеп 28, 2011 9:04 am Мнения: 38
|
Re: пик микро сериен порт RS233 дайте формула за протокола
| | | | stefan63 написа: Добър пост , Гичо. Зададох въпроса, защото мой приятел заподозря -че му се е слуъчило такова нещо на реален обект. Не е Модбус, но ползва същия полином. Стана ми интересно , та затова... На Модбус има няколко реквизита - адрес,адрес на регистъра, брой байтове (в командите за трансфер на няколко регистътъра), които допълнително пазят от грешно поведение. Но четворна грешка в данните - примерно мощен шум по средата на байта ,между валиден старт и стоп битове- може би не се "хваща". Не знам как е в единичните команди , които са много къси. На Модбус работят датчиците, с които отчитат акцизните стоки(масла,бои) - системи ИКУНК (ако не бъркам съкращението) . Преди десетина години , когато митниците дефинираха изискванията - така беше записано. Концентраторът си говори с митницата през интернет, но с датчиците - през Модбус. В някои случаи може да има доста дълги пакети, и какви мерки са взети срещу шум - си е избор на разработчиците. Хубавото е, че става въпрос само за пари, не за промишлени опасности. | | | | |
Извинявай, изказвам само мнение : Горните грешки ще ги хване още HAL-а на UART-a те нямат никаква "връзка" със слоя на Modbus RTU Представи си следното. Приет байт по UART с валидно parity, валиден брой стоп битови и тнт който обаче е с грешни данни, приет някой следващ(и) байт(ове) с валино parity и грешни данни, и данните са се "нагодили" така, че да отговарят на чексумата на modbus телеграмата, а всички останяли байтове са с валидно parity и формат. Теоретично вероятноста това да се случи е нищожна. А ако това нещо се повтаря - грешката със сигурност е в логиката на програмата. Другото е , че в modbus няма дълги пакети , мисля че максимално е 16 байта при RTU / при ASCII е малко повече.
_________________ Оставете човек в самолет и той ще летне за един ден. Хвърлете човек от самолета и той лети до края на живота си.
|
Нед Авг 16, 2020 8:30 am |
|
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 11:02 am Мнения: 8891 Местоположение: Разград
|
Re: пик микро сериен порт RS233 дайте формула за протокола
Към 240 байта е максимума. Май 256 байта за целия пакет. Данни плюс контролните байтове. Ограничава те само това че имаш 1 байт за дължина на пакета.
|
Нед Авг 16, 2020 9:31 am |
|
|
panchev68
Ранг: Минаващ
Регистриран на: Сря Сеп 28, 2011 9:04 am Мнения: 38
|
Re: пик микро сериен порт RS233 дайте формула за протокола
Да наистина е така !!! Гледам какъв буфер съм заделил но явно на мен ми е трябвал толкова навремето . Аз бях master, а ми трябваше RAM
_________________ Оставете човек в самолет и той ще летне за един ден. Хвърлете човек от самолета и той лети до края на живота си.
Последна промяна panchev68 на Нед Авг 16, 2020 9:48 am, променена общо 3 пъти
|
Нед Авг 16, 2020 9:35 am |
|
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 11:02 am Мнения: 8891 Местоположение: Разград
|
Re: пик микро сериен порт RS233 дайте формула за протокола
Е все пак протокола не е мислен да преточва HD видео буфера се и добре да е 256 байта. Все пак мастера може да говори и с други устройства. А колко регистъра ще имаш физически реализирани е друг въпрос.
|
Нед Авг 16, 2020 9:42 am |
|
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 8:21 pm Мнения: 27996 Местоположение: София
|
Re: пик микро сериен порт RS233 дайте формула за протокола
Panchev, и е така и не е така, на партито на серийния порт няма много смисъл да разчиташ, а дали може да се счупят данни така че crc16 да излезе и това може, колкото не ти се вярва има и друг вариант да се счупят данните и Crc-то и то пак да отговаря на данните. Ако ще се точат много данни не знам дали модбъс е начина.
|
Нед Авг 16, 2020 11:13 am |
|
|
panchev68
Ранг: Минаващ
Регистриран на: Сря Сеп 28, 2011 9:04 am Мнения: 38
|
Re: пик микро сериен порт RS233 дайте формула за протокола
Toni - Сигурно е така. Все пак и този протокол ми е почти набор. 10-ина години не съм пипвал сериина комуникация по RS-xxx, но ако ми се наложи бих направил това дето съм описал в началото на темата. Ползам CAN за по-прости неща като отгоре е пак някакво бутиково изпълнение на протокол. Все пак е безмислено използването на някой от стандартите за да си говорят 5-6 нода . Имам в предвид : Fieldbus , Profibus , ... . Имплементиране на подобен протокол е безмислено, ако не ти се налага връзка с външният свят. За по сериозни неща има EtherCAT на Beckoff който е real-time (1us) и за който има всякви устройства, а и създването на slave не е кой знае какво (LAN9252 на uChip), но темата отдавна отиде в съсвсем друга посока.
_________________ Оставете човек в самолет и той ще летне за един ден. Хвърлете човек от самолета и той лети до края на живота си.
|
Нед Авг 16, 2020 2:36 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 4 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|