Вход

Просмотр полной версии : ПЛК150-220.А-М (master) СП307Б (slave): работает write, но не работает read



программист_с_паяльником
21.01.2022, 19:32
Здравствуйте.

ПЛК150-220.А-М (master); СП307Б (slave); Cвязь между ними RS-232 Debug.

ПЛК посылает данные на СП, СП успешно их принимает, но не работает чтение контроллером данных с панели.

К посту прикладываю оба файла (pro и txp).

В программе ПЛК (язык ST) заведены переменные xOutput, wOutput, dwOutput, которые, по идее, должны приобретать свои значения от входящих xInput, wInput, dwInput соответственно. На панели изменения значений xOutput, wOutput, dwOutput не выполняется.

Также есть переменные xOutput1, wOutput1, dwOutput1, значения которых в программе просто равны true, 128 и 512.16 соотвественно. Эти переменные при первом проходе цикла программы посылаются на СП и панель показывает полученные значения/состояния.

Вывод: нет чтения данных контроллером с панели.

Много раз проверял оба файла, все вроде по уму, а не работает.

kondor3000
21.01.2022, 20:43
Вывод: нет чтения данных контроллером с панели.

Много раз проверял оба файла, все вроде по уму, а не работает.

Не пойму, вы до сих пор не подключились к контроллеру по изернету? Зачем вы зацикливаете чтение с панели и сразу отправляете обратно в панель?
Подключитесь и смотрите чтение контроллером в программе. Принимаются ли переменные.
Когда убедитесь, что принимаются, пойдёте дальше. 58852
Если уж так надо, в контроллере есть выходы с реле, вот и управляйте кнопкой на панели выходом ПЛК. DO1 := xInput;

А вот это пока удалите.
xOutput := xInput;
wOutput := wInput;
dwOutput := dwInput;

Прочитанные переменные, должны управлять программой, а уже из программы другие переменные отправляться в панель. Принятые значения с панели, это как правило уставки.
Зато уже влезли в конфигуратор задач и сделали там Циклическую задачу с интервалом 100 мс, зачем? Удалите её нафик.

программист_с_паяльником
21.01.2022, 21:35
Не пойму, вы до сих пор не подключились к контроллеру по изернету?

Подключитесь и смотрите чтение контроллером в программе.
Я уже на Ethernet-е. Конечно, это гораздо удобней. В Codesys вижу онлайн изменения переменных, входов и т.п. Теперь КС1 практически не требуется.


Зачем вы зацикливаете чтение с панели и сразу отправляете обратно в панель?

Вот так не делают:
xOutput := xInput;
wOutput := wInput;
dwOutput := dwInput;
Я это сделал чтобы получить данные с одним регистров/битов СП, а передать другим регистрам/битам СП.
Конечно, прикладная ценность этого равна нулю, но мне, все же, нужно обкатать и чтение, и передачу. А это самый простой способ.


Зато уже влезли в конфигуратор задач и сделали там Циклическую задачу с интервалом 100 мс, зачем? Удалите её нафик.
Вычитал это в примере "Настройка обмена СП3хх с ПЛК на CODESYS 2.3" раздел "02_СП3xx. Пример обмена с ПЛК110 [M02] по Modbus RTU, панель - Slave". Там правда, до кучи, еще и обе программы есть (для ПЛК и СП), но, пока в них не залазил, тем более, что pro файл от ПЛК110.
Мне показалось, что получится "масло масленное", но потом забыл удалить созданное задание.
Сейчас я его удалил, перезалил проект в ПЛК, но ничего не изменилось.

Переменные xInput, wInput, dwInput, по логике вещей, можно изменить либо на СП, либо, наверное, в Codesys:
1) Их изменение через СП никак не влияет на возвращающиеся обратно, но в другие регистры/биты, переменные xOutput, wOutput, dwOutput.
2) Изменить их в Codesys не получается. Судя по всему, программа этого не позволяет, пока программа крутится.

Вот такие дела.

Думаю, нет чтения. Где-то косячу.

kondor3000
21.01.2022, 21:40
Я уже на Etherne

Думаю, нет чтения. Где-то косячу.

Я вам даже скрин выложил, добейтесь чтобы данные принимались как у меня. Остальное удалите, что сказал. Исправил первый пост.
В UMD для записи "Nativ" не нужен.

программист_с_паяльником
21.01.2022, 21:43
Я вам даже скрин выложил, добейтесь чтобы данные принимались как у меня. Остальное удалите, что сказал.
)))))))))))))))) пойду с собакенами погуляю и буду добиваться.
Спасибо ))

программист_с_паяльником
21.01.2022, 22:51
58853
Я пока пробую все это сделать через RS-232, у вас на скрине RS-485, хотя думаю дело в чем-то другом.
В общем, Codesys не дает менять переменные блока input.
Меняя состояние xInput(PSB256), вводя значения wInput (PSW260), dwInput(PSW270) на панели, я все равно не вижу их изменения в Codesys Конфигурация-ПЛК.


Остальное удалите, что сказал
Удалил (закомментировал).
Хотя мне кажется:
xOutput := xInput; (PBS256 в PSB257 транзитом через ПЛК)
wOutput := wInput; (PSW260 в PSW262 транзитом через ПЛК)
dwOutput := dwInput; (PSW270 в PSW274 транзитом через ПЛК)
должно же работать.


В UMD для записи "Nativ" не нужен.
Что такое UMD?
Ну я так понимаю, что проблема не в Native.

Николай Суриков
22.01.2022, 08:14
Может проще сделать ПЛК - slave, а панель - master? Масса плюсов будет от этого.
Области чтения/записи наложены друг на друга.
При обрыве связи с ПЛК панель сразу скажет об этом.
ПЛК-конфигурация не умеет в пакетный обмен, и каждый параметр читается и пишется последовательно, при масштабном проекте на цикл обмена данными будут уходить секунды.

kondor3000
22.01.2022, 10:16
Что такое UMD?

В прошлой теме уже отвечал UMD - Универсал Модбас Девайс.
Переменные инпут Кодесис и не даст изменять, вы их в ПЛК только смотреть можете, изменяются они из панели.

Обмен так не делается, вы пытаетесь присвоить вход сразу на выход. А надо использовать промежуточные переменные, вот вам пример с диска, посмотрите как присваиваются переменные в программе для чтения и записи, ПЛК мастер.

kondor3000
22.01.2022, 10:48
Может проще сделать ПЛК - slave, а панель - master? Масса плюсов будет от этого.
Области чтения/записи наложены друг на друга.
При обрыве связи с ПЛК панель сразу скажет об этом.
ПЛК-конфигурация не умеет в пакетный обмен, и каждый параметр читается и пишется последовательно, при масштабном проекте на цикл обмена данными будут уходить секунды.

ПЛК слейв, это пройденный этап https://owen.ru/forum/showthread.php?t=35808

При связи ПЛК мастер, панель слейв, только один недостаток, нет группового обмена, который обходится очень легко. Тут petera выкладывал примеры обмена через Стринг. Лично делал обмен где панель слейв работает не хуже панели мастер с несколькими сотнями переменных.
А плюсов больше. Панель слейв не зависает при малейшем сбое в обмене. При передаче через Стринг переменных флоат, не надо переставлять регистры, они правильно читаются без переворота. Для передачи до 200 переменных (это почти 4 листа в конфиге), надо добавить всего 5 Стрингов. Без проблем можно решить и контроль связи, любым свободным битом в обмене..
https://owen.ru/forum/showthread.php?t=22915&page=40&p=244022&viewfull=1#post244022

программист_с_паяльником
22.01.2022, 10:56
Может проще сделать ПЛК - slave, а панель - master?
Это был 1-ый вариант; он рабочий. Но сейчас намеренно пробую поменять статус девайсов.


Масса плюсов будет от этого.
Области чтения/записи наложены друг на друга.
При обрыве связи с ПЛК панель сразу скажет об этом.

И там, и тут есть свои плюсы/минусы.
Контроль связи СП (slave) с ПЛК (master) на стороне СП, думаю, можно программно решить.


ПЛК-конфигурация не умеет в пакетный обмен, и каждый параметр читается и пишется последовательно, при масштабном проекте на цикл обмена данными будут уходить секунды.
Думается, в конфигурации ПЛК можно настроить обмен, например, через string input/output-модули. Вот и пакетная передача.

Я еще до этого не дошел, но если допустимо, чтобы с одной стороны - связь между ПЛК и СП через RS-232 с СП в роли мастера, а с другой - связь между ПЛК и прочими устройствами на базе RS-485 уже с самим ПЛК в роли мастера, т.е., если ПЛК это позволяет, то почему бы и нет.
С другой стороны, если всех, включая СП, соединить исключительно через RS-485, тогда, наверное, предпочтительней, если мастером будет выступать ПЛК.

Николай Суриков
22.01.2022, 12:56
Еще забыл добавить что ПЛК slave сразу по умолчанию Retain.

программист_с_паяльником
22.01.2022, 15:09
Обмен так не делается, вы пытаетесь присвоить вход сразу на выход. А надо использовать промежуточные переменные, вот вам пример с диска, посмотрите как присваиваются переменные в программе для чтения и записи, ПЛК мастер.
Если честно, думал о промежуточных переменных, но, по началу, казалось странным. С другой стороны есть циклы ПЛК и получение значений переменными.
Внимательно изучил файлы с диска, которые вы выслали с предыдущим постом. Вроде все понятно.
Взгляните, пожалуйста, на приложенные файлы, упростил до безобразия, но, все равно, хожу по кругу - от слейва ничего не вижу. В обратную сторону все работает. Что не так с чтением, не пойму.

kondor3000
22.01.2022, 18:46
Если честно, думал о промежуточных переменных, но, по началу, казалось странным. С другой стороны есть циклы ПЛК и получение значений переменными.
Внимательно изучил файлы с диска, которые вы выслали с предыдущим постом. Вроде все понятно.
Взгляните, пожалуйста, на приложенные файлы, упростил до безобразия, но, все равно, хожу по кругу - от слейва ничего не вижу. В обратную сторону все работает. Что не так с чтением, не пойму.

Опять снова здорова, зачем я вам пример то выложил? Загрузите его и проверьте, правда вам надо будет переписать конфигурацию под ваш таргет.

Не знаю почему у вас не работает, вроде всё правильно в вашей программе. Может вы СТАРТ забываете нажать в программе? на ПЛК работа горит светодиод?

программист_с_паяльником
22.01.2022, 20:23
Опять снова здорова, зачем я вам пример то выложил? Загрузите его и проверьте, правда вам надо будет переписать конфигурацию под ваш таргет.
Переделал под ПЛК150 (файлы приложены), правда взял только бит. В Codesys ничего (переменные, входы) не происходит.


Не знаю почему у вас не работает, вроде всё правильно в вашей программе. Может вы СТАРТ забываете нажать в программе? на ПЛК работа горит светодиод?
Нет )) стартовать не забываю.


Буду пробовать на RS-485, может там получится.

Ну и помучаю техподдержку.

kondor3000
22.01.2022, 22:25
Переделал под ПЛК150 (файлы приложены), правда взял только бит. В Codesys ничего (переменные, входы) не происходит.
Буду пробовать на RS-485, может там получится.
Ну и помучаю техподдержку.

Всё правильно у вас, должно работать. С этого проекта сам начинал, только по 485, у меня сразу всё заработало.

программист_с_паяльником
22.01.2022, 22:58
Всё правильно у вас, должно работать. С этого проекта сам начинал, только по 485, у меня сразу всё заработало.
Обратил внимание на постоянно висящую в проекте ошибку LAST ERROR = 81.
58868
Если полностью убрать модули input, т.е. оставить только output, ошибка уходит. Поэтому посылка на слейв фунциклирует нормально.
Если же убрать output и оставить только input раздел обмена, при соединении ПК с ПЛК, даже еще без старта программы на ПЛК, стабильно повисает 81-ая ошибка, и никуда не хочет уходить. Поэтому получение данных со слейва не идет.

Сейчас штудирую форум на предмет этой ошибки.

Руководство говорит, что 81 означает превышение таймаута ожидания (No Device).

kondor3000
22.01.2022, 23:40
Обратил внимание на постоянно висящую в проекте ошибку LAST ERROR = 81.
Если полностью убрать модули input, т.е. оставить только output, ошибка уходит. Поэтому посылка на слейв фунциклирует нормально.
Если же убрать output и оставить только input раздел обмена, при соединении ПК с ПЛК, даже еще без старта программы на ПЛК, стабильно повисает 81-ая ошибка, и никуда не хочет уходить. Поэтому получение данных со слейва не идет.

Сейчас штудирую форум на предмет этой ошибки.

Руководство говорит, что 81 означает превышение таймаута ожидания (No Device).

Вообще то ошибка 81 всегда если нет связи, поставьте неправильный адрес слейва или стоп бит 2 вместо 1, чётность, скорость не ту, сразу будет ошибка 81.
Значит у вас либо порт RS 232 неправильно работает, либо кабель с утечкой. Прозвоните кабель. Может у вас проводок от разрыва перемычки коротит куда то. Сам когда то перемычку разрывал на КС-1, проводки заизолировал изолентой.
Если есть переходник USB - RS 232, то его настройки смотрите, драйвер переходника.
Соедините наконец по 485 порту.

программист_с_паяльником
23.01.2022, 14:22
Вообще то ошибка 81 всегда если нет связи, поставьте неправильный адрес слейва или стоп бит 2 вместо 1, чётность, скорость не ту, сразу будет ошибка 81.
Значит у вас либо порт RS 232 неправильно работает, либо кабель с утечкой. Прозвоните кабель. Может у вас проводок от разрыва перемычки коротит куда то. Сам когда то перемычку разрывал на КС-1, проводки заизолировал изолентой.
Если есть переходник USB - RS 232, то его настройки смотрите, драйвер переходника.
Соедините наконец по 485 порту.
КС2 вызванивал еще, так сказать, в свой прошлый пост, когда ПЛК был слейвом, а СП мастером. Он рабочий. Во всяком случае, неиспользуемые жилы просто коротко обрезаны (на контакные колодки не заведены). Думаю, это не кабель.

Скорее всего, "косячит" именно СП. Пробовал читать с нее только биты, потом отдельно холдинг регистры, отдельно стринги - везде 81-ая ошибка. Думал, может это несоответствие будет имееть отношение исключительно к отдельным функциям чтения.
Хотя, повторюсь, в сторону панели все доходит и ею прекрасно отображается.

Думаю, пока подвешу этот вопрос без решения, потому что предыдущая связка "СП Мастер - ПЛК слейв" через RS-232Debug показала себя хорошо. Пусть эта часть так и остается.

Что касается RS-485, здесь просто сделаю ПЛК мастером; у меня завалялся счетчик электрической мощности с отчетностью по модбасу - вот его и попробую почитать.

Большое спасибо за содействие ))
Реально помогаете.

petera
23.01.2022, 21:37
КС2 вызванивал еще, так сказать, в свой прошлый пост, когда ПЛК был слейвом, а СП мастером. Он рабочий. Во всяком случае, неиспользуемые жилы просто коротко обрезаны (на контакные колодки не заведены). Думаю, это не кабель.

Скорее всего, "косячит" именно СП. Пробовал читать с нее только биты, потом отдельно холдинг регистры, отдельно стринги - везде 81-ая ошибка. Думал, может это несоответствие будет имееть отношение исключительно к отдельным функциям чтения.
Хотя, повторюсь, в сторону панели все доходит и ею прекрасно отображается.

Думаю, пока подвешу этот вопрос без решения, потому что предыдущая связка "СП Мастер - ПЛК слейв" через RS-232Debug показала себя хорошо. Пусть эта часть так и остается.

Что касается RS-485, здесь просто сделаю ПЛК мастером; у меня завалялся счетчик электрической мощности с отчетностью по модбасу - вот его и попробую почитать.

Большое спасибо за содействие ))
Реально помогаете.

Короче, не мучайтесь. Порт Debug не предназначен для работы модбас мастером. Только слейвом или для связи с кодесис
Панель тут не причём

kondor3000
24.01.2022, 09:38
Что касается RS-485, здесь просто сделаю ПЛК мастером; у меня завалялся счетчик электрической мощности с отчетностью по модбасу - вот его и попробую почитать.
Реально помогаете.

Ну вот с Debag-232 всё решилось, не может он мастером работать, читай выше.
Советую всё же доделать обмен с панелью по 485 порту. А потом уже к опросу счётчиков приступать. Можно прямо там же, добавив новый UMD с адресом счётчика. И регистры с адресами из Руководства на счётчик.