PDA

Просмотр полной версии : СПК1хх ModBus RTU slave не работает часть регистров.



eigor_vl
12.03.2020, 11:24
Добрый день.
Проблема есть при работе СПК1хх М01 с ModBus RTU (slave).
Панели подключаем к нашим контролерам по в ModBus режиме slave.
Пишем и читаем с СПК функции 0х06 и 0х03. От 30 до 80 регистров.
Из 30 регистров обычно один совсем не записывается не читается.

Пара регистров периобически сбоят. То ли пакеты ломаные то ли

нет ответа (сказать не могу). После перепрошивки неисправность

переходит на другой регистр. Неисправный регистр просто не

использовал. Но на последнем объекте неответы стали перемещатся

с одного регистра на другой. Изменение таймаута в обмене ничего

не меняет.
Как с этим боротся?
Какой TASK отвечает за работу ModBus?
Стоит библиотека ModBus-slave 3.5.4.2.

Вот код программы из примера.


stComSettings.sPort := 1;
stComSettings.byStopBits := 1;
stComSettings.byParity := 0;
stComSettings.ulBaudrate := 38400;

stComSettingsEx.byByteSize := 8;

bySlaveID:= 80;
bSlaveEnable:= TRUE;

fbComService
(
Enable:= TRUE ,
Settings:= stComSettings,
sets_ex:= stComSetting****
Task:= ComSerice.COM_TSK.OPEN_TSK,
Ready=> ,
handle=>
);

IF bSlaveEnable AND fbComService.Ready THEN

fbModbus_Slave
(
ComHandle:= fbComService.handle,
DevAddr:= bySlaveID,
pBuffer:= ADR(awSlaveBuffer),
BufSize:= SIZEOF(awSlaveBuffer),
NewData=> ,
Error=>
);:confused:

Евгений Кислов
12.03.2020, 11:41
Добрый день.


Какой TASK отвечает за работу ModBus?

Тот, в котором вызывается приведенный вами код.

Чтобы разобраться с проблемой - подключите контроллер к ПК, опросите его с OPC и посмотрите логи обмена - в них будет информация о возникших ошибках (если они действительно возникнут).

capzap
12.03.2020, 11:57
приведенный код отличается от того что описано в документации (https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Modbus_v2.0.pdf) в разделе 5.9.2, может поробовать начать с него, там даже на 149 странице пример доступен для скачивания, чтоб было что за основу взять

80 слов за раз скачивать это достаточно много, может период опроса увеличить стоит

Mikewolf
12.03.2020, 18:14
У меня было нечто похожее в связке СПК107 и ОВЕН OPC-сервер: по логам чтение/запись происходили успешно, а по факту все регистры с номерами выше 40-го читались нулями. С тех пор для надёжности не считываю больше 30 регистров в одном запросе и всё ОК.

eigor_vl
13.03.2020, 01:36
Спасибо. Попробую.

RomAl
13.03.2020, 13:54
Чтоб не плодить темы попробую тут пожаловаться на не работу СПК107 М01 ModBus Master с конфигуратором.
Не считывает значения регистров из ТРМ201 (2 прибора попробывал одинаково), но показывает в конфигураторе что связь с ТРМом есть, т.е у Slave зелёный кружок. Всё перепробывал, перепрошил и т.д. ничего не помогает... а раньше в Кодесис 3.5.5 всё это же получалось. Пробовал и с Rs485-1 и RS485-2 ... подскажите что не так- перепробывал всё.
Итак CS v3.5.sp11.p5.hf4 установил target 3.5.11.5014 (а показывает в кодесис 3.5.11.57) прошивка 1.1.0611.1056 ну вроде всё по рекомендациям
ModBus_COM 3.5.11.20 ModBus_Master 3.5.11.20 ModBus_Slave 3.5.10,30 (пробовал и на старые переходить- не помогает)

Сам нашёл причину: В "Установки ПЛК" включил "Всегда обновлять переменные", почему это пришлось мне делать руками, а не было включено по-умолчанию?

Евгений Кислов
13.03.2020, 17:22
почему это пришлось мне делать руками, а не было включено по-умолчанию?

Это вопрос к разработчикам к CODESYS.
В каждом нашем примере упоминается необходимость изменения этой настройки.