Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
 Аватар для Rastforator
0 / 0 / 0
Регистрация: 21.11.2020
Сообщений: 16

Прием пакетов байтов с Matlab. Simulink

04.11.2021, 22:01. Показов 1748. Ответов 8

Студворк — интернет-сервис помощи студентам
Представим себе трехфазную цепь сделанную в симулинке, в которой есть упаковщик, пакующий 3 пакета по 8 байт. Пакеты приходят через локалку в питон дальше вопрос. Работая с одной фазой приходил и проблем с работой не было. После того как стало приходить сразу три пакета, возникла нужда их каким-то образом разделить на 3 части перед распаковкой.
Возникающая ошибка
File "C:\Users\Александр\pythonProject\ma in (2).py", line 18, in main
data1 = struct.unpack('d', data)[0]
struct.error: unpack requires a buffer of 8 bytes

Вот кусок кода по приему и отправке.
Python
1
2
3
4
5
6
7
8
9
        # -----------------------Прием пакетов-----------------------------------------------------------
        data, addr = sock.recvfrom(2048)
        data = struct.unpack('d', data)[0]
        list_data.append(data)
        count += 1
        # -----------------------Отправка пакетов---------------------------------------------------------
        send_msg = bytearray(struct.pack('d', data))
        sock.sendto(send_msg, UDP_IP_PORT)
    sock.close()
Исходник будет бесполезен т.к. у вас нет модели схемы для отправки трех пакетов.
Уважаемые, если вам требуется больше информации для лучшего взгляда на данную проблему с радостью предоставлю необходимую информацию. Спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.11.2021, 22:01
Ответы с готовыми решениями:

Прием байтов из порта
Добрый день! Вот функция приема байтов из порта, но почему то цикл while(!Terminated) проходит два раза. Первый раз он читает 27 байт...

Правильный прием байтов с компорта
Есть класс для работы с ком портом. Как настроить класс так, что бы считывались байты с компорта до байта 0x00, тоесть записывало в мой...

Приём пакетов по UDP
С 192.168.0.10:8080 постоянно идут пакеты по UDP. Пытаюсь принять их и вывести куда нибудь, но результата ноль. static void...

8
 Аватар для Rastforator
0 / 0 / 0
Регистрация: 21.11.2020
Сообщений: 16
04.11.2021, 22:28  [ТС]
Вот упрощенная модель трех сигналов, пакуются спец. блоком отправляются три пакета по очереди. Далее уже описанная проблема, как их по очереди принять и распаковать. Спасибо
Миниатюры
Прием пакетов байтов с Matlab. Simulink  
0
 Аватар для Rastforator
0 / 0 / 0
Регистрация: 21.11.2020
Сообщений: 16
04.11.2021, 23:08  [ТС]
Вопрос исчерпан, оказывается, приходящие байты нужно разделить между собой (их сразу по 3 в строку приходит)
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
04.11.2021, 23:29
Цитата Сообщение от Rastforator Посмотреть сообщение
приходящие байты нужно разделить между собой
Так как в итоге разделили?
Предположу, что можно проверять сколько пакетов по 8 байт пришло и потом динамически делать 'd' * число_пакетов_по_8_байт в unpack. Или так не сработает?

Python
1
2
3
4
>>>>>> data = bytes([0x13, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0, 0x10]* 3)
>>> struct.unpack("d" *int(len(data)/8) , data)
(1.2882395823324716e-231, 1.2882395823324716e-231, 1.2882395823324716e-231)
>>>
1
 Аватар для Rastforator
0 / 0 / 0
Регистрация: 21.11.2020
Сообщений: 16
04.11.2021, 23:37  [ТС]
Приходит с симулинка примерно такое
b'\xd1g\x8a\xa8\xb2Rj@\xd1g\x8a\xa8\xb2R j@\xd1g\x8a\xa8\xb2Rj@'
(тут сразу 3 числа и распаковщик не понимает и выдает ошибку). Спасибо за ваш ответ. Хотелось бы у Вас спросить, Ваш метод сможет разделить это на три числа ? ВОзможно мой ответ не совсем корректен и непонятен. Если это все же так, постараюсь дать более точный ответ. Спасибо.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
04.11.2021, 23:40
Лучший ответ Сообщение было отмечено Rastforator как решение

Решение

Цитата Сообщение от Rastforator Посмотреть сообщение
Ваш метод сможет разделить это на три числа ?
Ну если взять ваши данные, то вот:
Python
1
2
3
4
>>> data =b'\xd1g\x8a\xa8\xb2Rj@\xd1g\x8a\xa8\xb2Rj@\xd1g\x8a\xa8\xb2Rj@'
>>> struct.unpack("d" *int(len(data)/8) , data)
(210.58430888206797, 210.58430888206797, 210.58430888206797)
>>>
1
 Аватар для Rastforator
0 / 0 / 0
Регистрация: 21.11.2020
Сообщений: 16
04.11.2021, 23:48  [ТС]
Сейчас проверю конкретно на своей 3-х фазной силовой цепи. Спасибо Вам за ответ!

Добавлено через 6 минут
Спасибо, это действительно работает! А можно пожалуйста разъяснить *int(len(data)/8)? Это длина байта для распаковки?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
04.11.2021, 23:59
Цитата Сообщение от Rastforator Посмотреть сообщение
*int(len(data)/8)? Это длина байта для распаковки?
Это кол-во пакетов по 8 байт. У вас же приходит три склееных пакета по 8 байт общей длиной 24 байта.
Вот мы берем размер пришедших данных и пытаемся динамически вычислить сколько там пакетов (предполагаемого размера) пришло, чтобы подогнать формат под данные.


Покопался в модуле struct - оказывается еще итеративно можно распаковывать (так даже проще - можно ничего не вычислять):
Python
1
2
3
4
5
6
7
>>> it =struct.iter_unpack("d", data)
>>> for i in it:print(i)
 
(210.58430888206797,)
(210.58430888206797,)
(210.58430888206797,)
>>>
3
 Аватар для Rastforator
0 / 0 / 0
Регистрация: 21.11.2020
Сообщений: 16
05.11.2021, 00:03  [ТС]
Я искренне благодарю Вас за помощь! Этот проект очень важен для меня, как будущая ВКР)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.11.2021, 00:03
Помогаю со студенческими работами здесь

Прием пакетов по UDP
Приветствую. С сетевыми протоколами раньше дела не имел. Начал сразу к практике приступать. Хотел посмотреть, как вообще реализовать...

Прием UDP пакетов
Здравствуйте. Сразу скажу, никогда не имел дело с сокетами, тем более с UDP. Сервер у меня на python и с ним проблем никаких нет, клиент...

Receive прием пакетов
День добрый! Подскажите как получить весь ответ от запроса к сайту, с помощью Receive. Пробовал делать цикл пока Receive не вернет 0, но...

Прием и отправка пакетов
Всем привет! Нужно отправить определенной структуры пакет серверу на порт 28000. Так выглядит структура пакета: ...

wcf и прием пакетов
Всем добрый день! Есть устройство, которое шлет пакеты (массив байтов) по адресу IP+port. Как при помощи wcf принимать эти пакеты. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru