Я пытаюсь преобразовать строковые данные RS252 Ascii с датчика в регистры ввода / хранения Modbus TCP с помощью pymodbus Callback Sever, сервер является основными данными отчета, когда запрашивается клиентским регистратором, и я не уверен, что мне нужно сделать, чтобы это работало. В настоящее время я могу читать данные и записывать их в файл csv, используя этот
#!/usr/bin/env python
# Log data from serial port
import argparse
import serial
import datetime
import time
import os
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("-d", "--device", help="device to read from", default="/dev/ttyUSB0")
parser.add_argument("-s", "--speed", help="speed in bps", default=9600, type=int)
args = parser.parse_args()
outputFilePath = os.path.join(os.path.dirname(__file__),
datetime.datetime.now().strftime("%Y-%m-%d") + ".csv")
with serial.Serial(args.device, args.speed) as ser, open(outputFilePath,'w') as outputFile:
print("Logging started. Ctrl-C to stop.")
try:
while True:
time.sleep(0.2)
x = (ser.read(ser.inWaiting()))
data = x.decode('UTF-8')
if data !="":
outputFile.write(time.strftime("%Y/%m/%d %H:%M ") + " " + data )
outputFile.flush()
except KeyboardInterrupt:
print("Logging stopped")
Строка от датчика выходит из устройства в виде:
0.00 0.0 0.0 346.70 25.14
Мне нужно, чтобы каждая часть была отдельным регистром Modbus, и я пытаюсь использовать pymodbus на Raspberry Pi Zero. Датчик обновляется 4 раза в секунду, и я могу разбить данные на части, я просто еще не дошел до этого, потому что я не уверен, что мне нужно делать в сценарии обратного вызова, я еще не разбираюсь в Python Я все еще учусь. У меня есть понимание Modbus TCP и я использовал его раньше в системах Arduino. Любая помощь будет оценена.