В настоящее время я работаю над шлюзом со встроенным Linux и веб-сервером. Цель шлюза - получать данные с электрических устройств через линию RS485 / Modbus и отображать их на сервере.
Я использую Nginx и Django, а веб-интерфейс поставляется с "статическими" файлами. Неоднократно файл сценария Javascript выполняет вызовы AJAX, которые отправляют запросы CGI в Nginx. На эти CGI-запросы отвечает JSON, благодаря Django. Ответы в основном представляют собой данные, которые были прочитаны на соответствующем устройстве Modbus.
Точный путь следующий:
Случайно синхронизированный вызов CGI -> urls.py -> ModbusCGI.py (импортируйте другой скрипт ModbusComm.py) -> ModbusComm.py создайте клиент Modbus и сразу попытайтесь прочитать его.
Кроме того, я хотел реализовать регистратор данных, чтобы регулярно хранить данные в БД. Я создал скрипт, который также импортирует скрипт ModbusComm.py, но он не работает: иногда несколько фреймов Modbus отправляются одновременно (скрипты datalogger и cgi вызывают одну и ту же функцию в "файлах" ModbusComm.py одновременно ), что приводит к ошибке.
Я уверен, что эта проблема также возникнет, если на сервере будет много пользователей (запросы CGI отправляются одновременно). Или нет ? (система очередей уже управляет запросами CGI? Я немного растерялся)
Так что моей целью было бы создать систему очередей, которая могла бы обрабатывать вызовы из нескольких скриптов python => заставить их ждать, пока не их очередь => вызвать функцию с правильными аргументами, когда наступит их очередь (фактически используя строку modbus) ) и отправьте ответ обратно скрипту python, чтобы он мог сгенерировать ответ JSON.
Я действительно не знаю, как этого добиться, и я уверен, что есть лучший способ сделать это.
Если я не достаточно ясен, не стесняйтесь, чтобы я знал об этом:)