Tag Archives: Python

Визуализатор. Подновление 3

Добавил HEX-отображение содержимого памяти по указателю мышинного курсора. Внешне подновление выглядит так:

Сейчас попробую дописать код чтобы подкрашивать клеточки. Если сделаю, то скриншот прилеплю сюда же.

Читать далее

Визуализатор. Подновление 2

Добавлено несколько способов отображения

1. Цветное изображение байтов (собственно, оно и было):

Читать далее

Визуализатор

Эта программка предназначена для (моей текущей) конкретной цели — графического отображения содержимого памяти микроконтроллера.

Проблема

Микроконтроллер, с которым я сейчас кувыркаюсь, STM32F429 — достаточно «жирный». На него у меня накатана FreeRTOS. На ней трудится LwIP. Ещё выше — UPC UA. И на самом верху — бизнес-логика — то, ради чего этот программный Франкенштей затевался.

Программный стек (FreeRTOS + LwIP + OPC UA) пока не работает. Какие-то непонятные срывы, падения в  HardFault и прочие радости разработчика. Понятно, что хотелось бы видеть динамическую картину распределения памяти как-то всю сразу.

Отсюда и появилась идея визуализации.

Читать далее

OPC UA. Подписка на события

Получать данные от сервера по запросу клиента, конечно, хорошо, но…

Но бывают ситуации, когда данные меняются очень редко, а реагировать на их изменение нужно достаточно быстро. Ну, например, у нас есть какое-то устройство (сервер), который следит за напряжением «в розетке». Пока напряжение находится в норме (допустим, это 220 В ±10%, что составляет от 198 до 242 В), то на стороне клиента всё должно работать как обычно. Если напряжение выходит за допустимые пределы, то клиент должен предпринять определённые действия. Например, запустить дизель или включить аварийное освещение.

Понятно, что если клиент будет периодически опрашивать сервер, то это решение — плохое решение. Ведь помимо того, что клиент будет сам отвлекаться и отвлекать от полезной работы сервер, окажутся ещё загружены и линии связи. В правильно спроектированных системах такого быть не должно. Было бы куда правильнее чтобы при наступлении определённых событий сервер сам проявлял инициативу и посылал клиенту соответствующее сообщение.

В сфере передачи данных, вообще, существует такой механизм как широковещательные сообщения. Конечно, можно построить систему, воспользовавшись этим механизмом. Но если в системе много поставщиков и много потребителей информации, то это тоже будет не совсем правильное решение.

Существует ещё один способ — подписка на события. Клиенты, кому это действительно надо, подписываются у серверов на интересующие их (клиентов) события. Таким образом, у серверов появляются таблицы рассылок. И при наступлении того или иного события сервер оповещает о нём всех тех (клиентов), кто подписался на это событие. Поскольку предполагается, что события случаются не часто, то линии связи будут загружены минимально, а клиенты и серверы будут отвлекаться от своих основных работ только по мере возникновения событий.

Читать далее

OPC UA: туда и обратно

Благодаря предыдущей статье мы научились получать от сервера данные. Хорошо. Теперь давайте попробуем передавать данные на сервер.

Поскольку сервер у нас (условно) является вольтметром, то пусть он теперь будет заниматься сразу двумя напряжениями. Одно напряжение V1 сервер будет «измерять» внутри себя, а другое V2 — получать от клиента.

Читать далее

А не пощупать ли нам OPC UA на практике?

— Хм? Отчего ж достопочтенным джентльменам нельзя пощупать. Давайте, господа гуссары, полапаем как следует!

Для этого дела воспользуемся Питоном, ибо он прост в применении. Будем юзать Python-3.

Для начала нужно установить на комп кое-какие пакеты.

Читать далее

Проверь свой пароль

В наши дни наверно не найти такого человека, который бы вёл активный образ жизни и ничего не знал о том, что зачем нужен пароль. Наиболее продвинутые пользователи хорошо понимают откуда возникают требования иметь чрезвычайно сложный по конструкции пароль.

Примеры самых простых паролей: 12345, 777, qwerty, password, admin и так далее. Несколько паролей посложнее, но они тоже «нестойкие»: Vasja1988, Russia, PaRoL, ну и так далее. Они тоже не стойкие против взлома.

Читать далее

Делаем с удовольствием

Несколько лет назад в одной толстой книжке по Питону я прочитал весьма забавное утверждение — по какой причине следует использовать Python. Одной из причин было названо получение удовольствия. Ото ж!

Вот за что я всячески люблю и уважаю Линукс, так за то, что он доставляет массу удовольствия от работы с ним.

Вот смотрите, сейчас передо мной стоит задача — создать программно-аппаратную хрень, которая позволит дистанционно слушать эфир.

Ну, что значит «слушать эфир»? Ну, то есть слушать, что есть в эфире на частотах в диапазоне 2.4 ГГц. Для прослушивания этих частот был создан сниффер (такая коробочка с электроникой), который подключается к компу по USB. Сниффер работает на заданном канале и передает в комп «сырые» пакеты того, что он принял. Дальнейшей обработкой пакетов занимается комп.

А что значит «дистанционно»? Ну, это означает, что оператор может находиться не за тем компом, к которому подключен сниффер (где-нибудь в Воронеже), а где-нибудь далеко. Ну, скажем, в Лондоне. А ещё лучше наоборот! — Сидеть в Саратове и слушать что летает в эфире поблизости от штаб-квартиры М6. Не, ну это же прелестно, правда?

Ну, не важно! Шутки в сторону!

Читать далее

Коды резисторов по EIA-96. Прога на Питоне

Типичная ситуация: вы что-то делаете и внезапно вам встречается «закодированный» резистор. Нужно определить его номинал. Хотелось бы это сделать быстро, без лишних сложностей.

Вообще существует несколько способов решения этой задачи.

  1. Выучить эти таблицы Брадиса кодов и множителей
  2. Распечатать таблицы на листочке и приклеить его на стенку.
  3. Запустить на компе FireFox, наЯндексить сайт, которой позволит расшифровать код, зайти на сайт, ввести код.
  4. Дать компу команду на расшифровку, указав код резистора.

Здесь нет самого лучшего варианта. Лучший вариант определяется индивидуально каждым человеком на множестве его личных требований и предпочтений. Поэтому спорить о том, как это лучше делать, — не имеет смысла.

Читать далее

Python3. Байтовые последовательности

Питон в своём подходе к обработке данных ни разу не походит на классические языки программирования типа Си/C++, и этим объясняется одна из трудностей, почему Си-шники его не очень жалуют.

Тем, кто хочет сразу узнать суть, я рекомендую не читать всё, а сразу прокрутить в конец статьи.

Читать далее