Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 14, 2024 10:47:20

stereo
Зарегистрирован: 2024-02-14
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

чтение данных из сом-порта

Тема не новая, и материалов в интернете полно - все равно не работает
Исходники брал тут и тут
Задача - выгрузить данные, приходящие от устройства по протоколу Modbus, из сом-порта в БД MySQL, развернутую на хостинге в Интернете.
На win7 32bit установлен Python3.7, pywin32, Pyro4, pyserial, pymodbus, OpenOPC

Скрипт начинается с:

 from pymodbus.client import ModbusSerialClient as ModbusClient
в ответ пишет modbus.client не найден

Anydesk 1520364729, пароль Doremi123

Отредактировано stereo (Фев. 14, 2024 10:54:40)

Прикреплённый файлы:
attachment main.py (1,2 KБ)

Офлайн

#2 Фев. 14, 2024 12:05:30

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

чтение данных из сом-порта

Ну основные проблемы тебе убрал!
Дальше смотри - COM порт это не USB что бы к нему цепляться нужно что бы он был свободен
То есть проверь что бы у тебя ничего к нему не висело в коннекте

Кроме того могут быть проблемы с правами доступа пользователя - тогда запусти скрипт на питоне с правами админа

В целом код не ругается на библиотеки на твоем компе и запускается но ругается на то что порт занят
а что у тебя там на нем висит и что уже читать
подбирай сам;



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Фев. 15, 2024 08:05:40

stereo
Зарегистрирован: 2024-02-14
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

чтение данных из сом-порта

1. Исправил в main.py порт на СОМ8, сетевой адрес устроства = 35, сохранил SAVE, закрыл arOPC сервер, который его занимал
2. В Python 3.7.6 Shell нажал рестарт

Если бы все заработало, мы бы увидели в окне этого Shell двухзначный тег с устройства?

Карты регистров устройства modbus нет, в оригинале она была

       for i in range(1,20):
        try:
          request = client.read_holding_registers(31 + i, 1, 1)
          result = request.registers
          if result and len(result) > 0:
            data.append({"com": com, "ch_index": i, "ch": f"CH{i}", "val": result[0] / 10})
            print(f"{com} CH{i}: {result[0]/10}")


Прикреплённый файлы:
attachment Screenshot.jpg (484,0 KБ)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version