Как прочитать все регистры хранения из ведомого Modbus? - PullRequest
1 голос
/ 17 апреля 2019

Я использую Delta PLC, который поддерживает связь modbus232.

Регистры хранения, которые содержат данные, не являются последовательными.

i.e., 4246,6622,6626,6676,6624,6496,6658,4096,4346.

Таким образом, чтобы прочитать каждый регистр мне нужно запросить отдельно.

actual_floor = client.read_holding_registers(4246,1,unit=0x01)
fault = client.read_holding_registers(6622,1,unit=0x01)

Это довольно сложная задача, если я хочу прочитать более 200 регистров.

Есть ли способ прочитать все регистры хранения одновременно, которые дают все регистры и ихданные в формате json или в любом другом формате?

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Сначала вы должны получить регистры min и max, затем прочитать запросом с аргументом count, а затем вы должны присвоить значение рассмотрения каждому регистру.

Примечание : максимальное количество 125.

Примерно так:

def chunking(registers):
    # do stuff.

def assignment_regs_to_values(values, registesr):
   # do stuff.

registers = [4246,6622,6626,6676,6624,6496,6658,4096,4346]
min_reg = min(registers)
max_reg = max(registers)
count_ = max_reg - min_reg + 1

if count_ > 125:
    sub_regs = chunking(registers)
    # get min & max of each sub_reg list ...
else:
    sorted_regs = sorted(registers)
    res = client.read_holding_registers(min_reg, count=count_ , unit=1)  # Note
    assignment_regs_to_values(res.registes, sorted_regs)

Лучшее количество запросов в вашем случае будет 4 запроса (вместо 9 запросов):

sub_regs1 = [6676, 6658, 6626, 6624, 6622]
sub_regs2 = [6496]
sub_regs3 = [4336, 4246]
sub_regs3 = [4096]

count1 = max(sub_regs1) - min(sub_regs1) + 1
res1 = client.read_holding_registers(min(sub_regs1), count=count1, unit=1)
res2 = client.read_holding_registers(6496, count=1, unit=1)
count3 = max(sub_regs3) - min(sub_regs3) + 1
res3 = client.read_holding_registers(min(sub_regs3), count=count3, unit=1)
res4 = client.read_holding_registers(4096, count=1, unit=1)
0 голосов
/ 17 апреля 2019

Просто прочитайте все необходимые вам регистры, от первого до последнего, и они попадут к вам в массив, и из него, естественно, вы можете извлечь значение, соответствующее нужному индексу.

...