Скачал скрипты по этой ссылке, пытаюсь скопировать команды с одного устройства на другое. После манипуляций записанные команды отличаются по размеру и не работают.
Добрый день.
А что за манипуляции?
Проверьте пожалуйста, выполнив вручную чтение какого-то банка, например так.
Ну манипуляции из инструкции (правда пришлось ещё редактировать файлы, так как у меня используется /dev/ttyRS485-2):
- Скачал и распаковал скрипты
- Поправил под нужный порт
- ./read_roms.pl <папка> <modbus-адрес>
- ./write_roms.pl <папка> <modbus-адрес>
Точно ли в момент чтения порт не занят сервисом wb-mqtt-serial?
так он ведь останавливается скриптом
Я про то что - нет ли ошибок.
Ну и сравите все ж то что прочитано скриптом (какой-нибудь банк) и то что читается просто modbus_client.
Ошибок не было.
Из-за нехватки времени с этим разбираться плюнул и решил вручную записать, но почему-то перестало записываться. Что с этим можно сделать?
Опишите пожалуйста - что делаете, что именно не получается?
Делал вот это
Ну манипуляции из инструкции (правда пришлось ещё редактировать файлы, так как у меня используется /dev/ttyRS485-2):
- Скачал и распаковал скрипты
- Поправил под нужный порт
- ./read_roms.pl <папка> <modbus-адрес>
- ./write_roms.pl <папка> <modbus-адрес>
Вот вернулся к проблеме и решил записать вручную, стёр все команды и начал заново, включаю Запись команды, жму на пульте команду, отключаю Запись команды. Размер остаётся неизменным
Размер до и после записи - какой?
Пытаюсь воспроизвести.
Размер 0
Включаю запись, нажимаю кнопку пульта.
выключаю запись
0 до и 0 после.
вернулся к методу чтения и записи (на объекте уже никого нет, делаю удалённо), с одного устройства 96 пытаюсь записать на устройство 20,
считал с 96, потом из папки roms_96 записал на устройство 20… считал устройство 20 и сохранил в roms_20
сравниваю файлы, разница только в конце
… 42 48 42 42 42
и
… 42 48 42 0 0
А какой размер команды?
Выложите файл этого банка.
Ну и уточните - какая версия проишивки устройства? Формат менялся: Инструкция по работе с ИК-приёмопередатчиком в устройствах WB-MSW, WB-MIR — Wiren Board
оригинал
копированное
Версия последняя… так, я так понимаю, что-то надо поменять в скрипте… Можете подсказать что?
96_rom_1.ir (1,6 КБ)
20_rom_1.ir (1,6 КБ)
Для testing или stable?
Судя по размеру - команды длиннее того на что скрипт рассчитан.
foreach $i (2000, 2125, 2250, 2375) {
$command = qq (echo `modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a$ARGV[0] -t0x03 -r$i -c 125 | grep Data | sed -e 's/Data://' -e 's/s//g'`);
$a.=`$command`;
}
$command2 = qq (echo `modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a$ARGV[0] -t0x03 -r2500 -c 9 | grep Data | sed -e 's/Data://' -e 's/s//g'`);
$a.=`$command2`;
Я бы переделал так:
#!/usr/bin/perl
use strict;
use warnings;
my $slave_address = shift @ARGV || die "Usage: $0 SLAVE_ADDRESS\n";
my $start_register = 2000;
my $total_registers = 2000;
my $registers_per_request = 125;
my $a = '';
for(my $offset = 0; $offset <= ($total_registers - $registers_per_request); $offset += $registers_per_request){
my $command = sprintf(
'modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a%s -t0x03 -r%d -c %d | grep Data | sed -e \'s/Data://\' -e \'s/s//g\'',
$slave_address,
$start_register + $offset,
$registers_per_request
);
$a .= `$command`;
}
print "$a\n";
В итоге получилось скопировать. Попросил ИИ разобраться со скриптами. Предложенные ИИ скрипты Прочитали команды без проблем. А вот запись прошла с ошибками (что-то вроде Error Illegal data address). Но посмотрел, что размер команд совпадает, проверил, что работает и дальше не стал разбираться.
Ну отлично, рад.