PDA

Просмотр полной версии : Modbus Slave, 4х байтовая переменная, выравнивание, codesys 2.3



Scream
15.12.2016, 14:02
Добрый день.
Хотел использовать переменную 4 byte в modbus slave (через конфигуратор), но столкнулся с тем, что конфигуратор помимо 2х регистров создал еще один перед этой переменной, доступа к которой я не имею, увидел эту пустоту в логах мастера.

Чтобы использовать 4 byte надо всё выравнивать самому по 4 байта? (где написано об этом?)
Еще будут подводные камни?

petera
15.12.2016, 14:25
Добрый день.
Хотел использовать переменную 4 byte в modbus slave (через конфигуратор), но столкнулся с тем, что конфигуратор помимо 2х регистров создал еще один перед этой переменной, доступа к которой я не имею, увидел эту пустоту в логах мастера.

Чтобы использовать 4 byte надо всё выравнивать самому по 4 байта? (где написано об этом?)
Еще будут подводные камни?
4 byte(DWORD) и REAL в содесис должны иметь четные адреса 0, 2, 4, 6, .....
В конфигурации выравнивание выполняется АВТОМАТИЧЕСКИ, самому ничего выравнивать не надо, только нужно учитывать это при определении номеров регистров в слейве.
Также выравнивание будет если после одиночного 8bit будет, например, регистр.
http://www.owen.ru/forum/attachment.php?attachmentid=12345&d=1395648726

Scream
15.12.2016, 15:42
Спасибо, давно эту картинку не видел.
Про 8bit знаю.
Ну, если они должны иметь 0,2,4,6 то мне и приходится их ставить сюда для нормальной работы без дыр, это я и имею в виду "самому".

Всё равно

4 byte(DWORD) и REAL в содесис должны иметь четные адреса 0, 2, 4, 6, .....
нигде не встречал, только опытным путём.

nensist
31.01.2018, 07:51
Тоже интересует данный вопрос. у меня сна чала идут переменные 2 byte потом создаю по очередно переменные REAL. система сама не делает смещение, приходится самому поправлять адрес. Неужели данный процесс никак не автоматизирован?

capzap
31.01.2018, 08:19
Тоже интересует данный вопрос. у меня сна чала идут переменные 2 byte потом создаю по очередно переменные REAL. система сама не делает смещение, приходится самому поправлять адрес. Неужели данный процесс никак не автоматизирован?
Вы вопрос задали по мастеру или по слейву?

nensist
01.02.2018, 18:09
Вы вопрос задали по мастеру или по слейву?
По slave
Когда real вставляю приходится руками править.
И еще вопрос до кучи? Имеется ли ограничение на количество переменных в slave?

Vladislav_OWEN
01.02.2018, 18:45
По slave
Когда real вставляю приходится руками править.
И еще вопрос до кучи? Имеется ли ограничение на количество переменных в slave?
Имеется ограничение для области конфигурации, что накладывает ограничение и на количество переменных в slave .
В зависимости от того какой у Вас ПЛК это ограничение будет разным.

nensist
01.02.2018, 18:58
Имеется ограничение для области конфигурации, что накладывает ограничение и на количество переменных в slave .
В зависимости от того какой у Вас ПЛК это ограничение будет разным.
Какое ограничение будет для ПЛК110-30М (обновленный М02)?

nensist
01.02.2018, 19:00
пост#2, предложение 2. Медленно, по буквам читаем

Ну прочитал? И? Объясните бестолковому))) Что значит учитывать?

Спорягин Кирилл
02.02.2018, 00:08
И еще вопрос до кучи? Имеется ли ограничение на количество переменных в slave?

Формально ограничений нет, но больше 1000 dword вряд ли у Вас получиться запихнуть, так как есть ограничние на размер конфигурации. Подробнее: http://www.owen.ru/forum/showthread.php?t=25302

nensist
02.02.2018, 10:10
Формально ограничений нет, но больше 1000 dword вряд ли у Вас получиться запихнуть, так как есть ограничние на размер конфигурации. Подробнее: http://www.owen.ru/forum/showthread.php?t=25302

Почитал я эту тему. У меня получается надо переменных по 2byte - 2850 шт, переменных DWORD(REAL) - 505 шт
Хватит области конфигуратора или даже не пытаться набивать?
Объясню от куда столько, это уставки для 100 программ выпечки. Данные будут приходить из СП300. Почему рецептами в панели не делаю? Потому что будет еще скада, где будут иногда изменять данные уставки.
В плк на выполнении одновременно будет только одна программа

nensist
02.02.2018, 10:24
Главное слово там - заглавными буквами.

В конфигурации выравнивание выполняется АВТОМАТИЧЕСКИ, самому ничего выравнивать не надо, только нужно учитывать это при определении номеров регистров в слейве.
Дак что учитывать надо? если у меня идут сначала 2byte? последний 2byte будет с адресом 60. Я создаю Float и система дает ему адрес 61, далее я ручками меняю это на 62. Далее создавая Float система адрес дает 63 я исправляю на 64. Сответственно в панели СП300 для записи и чтения данных Float я ставлю адреса 60 и 62. Может я тут че не так делаю? Но все ведь работает хорошо по факту. Я немогу создать сначала допустим 10 шт Float. Приходится вставлять по одному, менять адрес, далее вставлять следующий.

petera
02.02.2018, 10:26
Почитал я эту тему. У меня получается надо переменных по 2byte - 2850 шт, переменных DWORD(REAL) - 505 шт
Хватит области конфигуратора или даже не пытаться набивать?
Объясню от куда столько, это уставки для 100 программ выпечки. Данные будут приходить из СП300. Почему рецептами в панели не делаю? Потому что будет еще скада, где будут иногда изменять данные уставки.
В плк на выполнении одновременно будет только одна программа

А зачем все 100 программ хранить в слейве?
Все 100 программ можно хранить в файле на ПЛК.
Для редактирования с панели или из скада достаточно в слейве иметь регистры только ОДНОГО рецепта и номер редактируемого рецепта.

ЗЫ
И на экране панели можно будет "пролистывать" все рецепты, редактировать нужный и давать команду ПЛК сохранить изменения в файле.

Vladislav_OWEN
02.02.2018, 10:27
Какое ограничение будет для ПЛК110-30М (обновленный М02)?
100 килобайт .

capzap
02.02.2018, 10:29
последний 2byte будет с адресом 60. Я создаю Float и система дает ему адрес 61

в слейве не указаны адреса. Идентификатор узла, который скорее всего Вы имеете ввиду, это не АДРЕС РЕГИСТРА СЛЕЙВА

petera
02.02.2018, 10:33
В конфигурации выравнивание выполняется АВТОМАТИЧЕСКИ, самому ничего выравнивать не надо, только нужно учитывать это при определении номеров регистров в слейве.
Дак что учитывать надо? если у меня идут сначала 2byte? последний 2byte будет с адресом 60. Я создаю Float и система дает ему адрес 61, далее я ручками меняю это на 62. Далее создавая Float система адрес дает 63 я исправляю на 64. Сответственно в панели СП300 для записи и чтения данных Float я ставлю адреса 60 и 62. Может я тут че не так делаю? Но все ведь работает хорошо по факту. Я немогу создать сначала допустим 10 шт Float. Приходится вставлять по одному, менять адрес, далее вставлять следующий.
И где Вы такое делаете: - "далее я ручками меняю это на 62"
Ручками в слейве нельзя изменить номер регистра. Все номера назначаются АВТОМАТИЧЕСКИ в порядке их размещения.
если идут сначала 2byte? последний 2byte будет с адресом 60, а затем добавить Float, то система назначит ему адрес не 63, а АВТОМАТИЧЕСКИ - 64!
Это и есть механизм выравнивания.
Вот именно это и нужно учитывать - в панели использовать для записи и чтения данных Float адрес 64, а не 63

nensist
02.02.2018, 10:45
И где Вы такое делаете: - "далее я ручками меняю это на 62"
Ручками в слейве нельзя изменить номер регистра. Все номера назначаются АВТОМАТИЧЕСКИ в порядке их размещения.
если идут сначала 2byte? последний 2byte будет с адресом 60, а затем добавить Float, то система назначит ему адрес не 63, а АВТОМАТИЧЕСКИ - 64!
Это и есть механизм выравнивания.
Вот именно это и нужно учитывать - в панели использовать для записи и чтения данных Float адрес 64, а не 63
Вот адрес узла я как раз и менял)))
Тоесть по 2Byte которое с адресом(идентификатор узла) 60 (в панели его читаю и записываю как адрес 59), создаю FLOAT, система дает ему идентификатор 61. По какому адресу тогда обращяться к данному FLOAT из панели?

nensist
02.02.2018, 10:49
А зачем все 100 программ хранить в слейве?
Все 100 программ можно хранить в файле на ПЛК.
Для редактирования с панели или из скада достаточно в слейве иметь регистры только ОДНОГО рецепта и номер редактируемого рецепта.

ЗЫ
И на экране панели можно будет "пролистывать" все рецепты, редактировать нужный и давать команду ПЛК сохранить изменения в файле.

Тоже хороший вариант. Спасибо за подсказку. Только проблема в том что совсем нет опыта работы с файлами плк. Есть ли хорошая информация по данному вопросу? Примеры?

petera
02.02.2018, 11:05
Вот адрес узла я как раз и менял)))
Тоесть по 2Byte которое с адресом(идентификатор узла) 60 (в панели его читаю и записываю как адрес 59), создаю FLOAT, система дает ему идентификатор 61. По какому адресу тогда обращяться к данному FLOAT из панели?

В конфигурации ПЛК адреса регистров начинаются с НУЛЯ.
По этому если создать 60 регистров 2Byte, то адрес последнего регистра - 59, а не 60
И если добавить элемент FLOAT, то адрес у него будет 60, а не 61! Адрес 60 - четный, по этому выравнивания нет
Пример
35379

35378

nensist
02.02.2018, 11:17
В конфигурации ПЛК адреса регистров начинаются с НУЛЯ.
По этому если создать 60 регистров 2Byte, то адрес последнего регистра - 59, а не 60
И если добавить элемент FLOAT, то адрес у него будет 60, а не 61! Адрес 60 - четный, по этому выравнивания нет
Пример
35379

35378

Все правильно к последнему 2 byte с панели я и обращаюсь как к 59. 60 я имел ввиду идентификатор узла. Буду разбираться. По ходу меня не так научили в свое время. второй год так фигачу)))) Что скажете про мой большой объем переменных в конфигураторе, влезет туда все это или только через библиотеки обмен делать? И что можете посоветовать почитать по работе с файлами плк?

petera
02.02.2018, 11:24
Все правильно к последнему 2 byte с панели я и обращаюсь как к 59. 60 я имел ввиду идентификатор узла. Буду разбираться. По ходу меня не так научили в свое время. второй год так фигачу)))) Что скажете про мой большой объем переменных в конфигураторе, влезет туда все это или только через библиотеки обмен делать? И что можете посоветовать почитать по работе с файлами плк?

Не нужно смотреть на идентификатор узла.
Тупо считаем в порядке расположения элементов в слейве.
35380

Пример с рецептами в ПЛК с использованием файла http://www.owen.ru/forum/showthread.php?t=22665&p=186999&viewfull=1#post186999

Там правда редактирование рецептов сделано в визуализации кодесиса, по этому требует некоторой доработки сам механизм редактирования.
А вот ФБ для работы с файлом рецептом можно взять уже готовым из примера и не думать о работе с файлами.

Спорягин Кирилл
02.02.2018, 11:36
Не обязательно хранить рецепты в файле на ПЛК.
Я, например, их храню в retain переменных в ПЛК.

capzap
02.02.2018, 11:38
Не обязательно хранить рецепты в файле на ПЛК.
Я, например, их храню в retain переменных в ПЛК.

а ретайн в плк это что, если не файл

petera
02.02.2018, 11:41
Не обязательно хранить рецепты в файле на ПЛК.
Я, например, их храню в retain переменных в ПЛК.

В старых ПЛК есть проблемы с сохранение retain из-за аккумулятора
В новых (М2) вроде тоже было - обнуление retain при неверных манипуляциях с тумблером пуск/стоп.

ЗЫ

переменных по 2byte - 2850 шт, переменных DWORD(REAL) - 505 шт
Обидно будет заново набивать.

Спорягин Кирилл
02.02.2018, 11:44
Говорят, что в прошивке 0.3.72 или 0.3.73 все проблемы с retain решены.

nensist
02.02.2018, 11:56
В старых ПЛК есть проблемы с сохранение retain из-за аккумулятора
В новых (М2) вроде тоже было - обнуление retain при неверных манипуляциях с тумблером пуск/стоп.

ЗЫ

Обидно будет заново набивать.

Пока еще не набито)) Вот и пытаюсь выяснить стоит или нет набивать. Тоесть в конфигурации мне нереализовать такой объем переменных? Правильно понял?

petera
02.02.2018, 12:06
Пока еще не набито)) Вот и пытаюсь выяснить стоит или нет набивать. Тоесть в конфигурации мне нереализовать такой объем переменных? Правильно понял?

Есть подозрения, что "переменных по 2byte - 2850 шт, переменных DWORD(REAL) - 505 шт" просто физически не влезут в конфигурацию слейва.
Да и зачем, когда
"Для редактирования с панели или из скада достаточно в слейве иметь регистры только ОДНОГО рецепта и номер редактируемого рецепта."

А как хранить 100 рецептов в ПЛК не имеет принципиального значения - хотите в файле, хотите в retain переменных. И там и там в программе будет массив из 100 структур. Структура - совокупность параметров одного рецепта.

Спорягин Кирилл
02.02.2018, 12:39
Если рецептов так много, то нужно еще учесть максимальный размер retain. Может быть файл единственное решение.

nensist
02.02.2018, 13:03
Если рецептов так много, то нужно еще учесть максимальный размер retain. Может быть файл единственное решение.

Я задавал этот вопрос изначально в тех поддержку и писал в группу ВК по поводу RETAIN
В группе ВК упорно посоветовали фигачить все в SLAVE, к SLAVE привязать порт на котором будет панель и порт TCP на котором будет скада. Все что в SLAVE автоматом в энергонезависимой памяти.

Тех поддержка тоже ответила что ресурсов хватит.

Спорягин Кирилл
02.02.2018, 13:20
Посмотрел. Согласно руководства по эксплуатации ПЛК110 М02 объем ретейн 16 Кб (таблица 2.1). Конечно, хватит.
Но вот в слейв Вы вряд ли это запихнете. Так что, действуйте как написал petera.

nensist
02.02.2018, 13:26
Посмотрел. Согласно руководства по эксплуатации ПЛК110 М02 объем ретейн 16 Кб (таблица 2.1). Конечно, хватит.
Но вот в слейв Вы вряд ли это запихнете. Так что, действуйте как написал petera.

Вот тут я задался еще одним вопросом. Мы запустим одну печь, далее технологи забьют через панель все параметры 100 рецептов и все бы хорошо. Но надо еще сделать 2 печи, как потом мне из одной печи перенести параметры рецептов другую? Чтоб занаово вручную не набивать. Файл ПЛК можно выгрузить из контроллера и загрузить в новый? А как быть если я пойду путем через RETAIN переменные?

Спорягин Кирилл
02.02.2018, 13:33
Забивайте параметры рецептов как начальные значения. Никаких проблем не будет.

nensist
02.02.2018, 13:49
Забивайте параметры рецептов как начальные значения. Никаких проблем не будет.
Не вариант)) Мне придется брать карты технологов и все забивать, а это нагрузка)) Технологи еще на первой печи при обкатке программ в любом случае внесут изменения, соответственно тиражирование надо будет делать с изменениями

petera
02.02.2018, 15:11
Вот тут я задался еще одним вопросом. Мы запустим одну печь, далее технологи забьют через панель все параметры 100 рецептов и все бы хорошо. Но надо еще сделать 2 печи, как потом мне из одной печи перенести параметры рецептов другую? Чтоб занаово вручную не набивать. Файл ПЛК можно выгрузить из контроллера и загрузить в новый? А как быть если я пойду путем через RETAIN переменные?

Можно, прямо в среде кодесис.
Подключится к ПЛК, у которого уже "забиты" все рецепты. Выгрузить из ПЛК файл с рецептами.
Затем этот файл можно будет загружать в N контроллеров при их первоначальном программировании.

petera
02.02.2018, 15:48
Про RETAIN в соседней теме http://www.owen.ru/forum/showthread.php?t=28130&p=268834&viewfull=1#post268834
Так, что я только за файл с рецептами.

nensist
02.02.2018, 20:11
Можно, прямо в среде кодесис.
Подключится к ПЛК, у которого уже "забиты" все рецепты. Выгрузить из ПЛК файл с рецептами.
Затем этот файл можно будет загружать в N контроллеров при их первоначальном программировании.
Значит путь через файл однозначно. Retain переменные получается нет возможности простыми методами тиражировать?
С адресацией разобрался, спасибо большое))) Теперь я понял что идентификатор узла править не надо, меньше работы))))

petera
02.02.2018, 21:09
Значит путь через файл однозначно. Retain переменные получается нет возможности простыми методами тиражировать?
С адресацией разобрался, спасибо большое))) Теперь я понял что идентификатор узла править не надо, меньше работы))))

Так начинайте уже!
Если, что - помогу советами :rolleyes:

nensist
02.02.2018, 21:16
Так начинайте уже!
Если, что - помогу советами :rolleyes:
С хранением в файле начну разбираться с понедельника. Пока до воскресенья забью в конфигуратор в slave переменных на 20 рецептов. И залью в плк печи. Пусть работают, а то пока с одним рецептом мучаются)) Вопросы однозначно будут, обязательро напишу