PDA

Просмотр полной версии : Передача данных в CODESYS 3.5 массивом



ivan.v
03.03.2024, 23:13
Здравствуйте. Не так давно я уже спрашивал по этому вопросу, но к сожалению темы не нашел, возможно удалили.
Вопрос в следующем при соотнесении входов и выходов с переменной в два регистра, достаточно ли указать эту переменную 1 раз?
Допустим есть переменная которая занимает 2 регистра Read_min_press_SP310, нужно ли ее также прописывать второй раз? Помогите разобраться пожалуйста.

Емельянов Кирилл
04.03.2024, 00:59
В самом простом варианте должно быть Read_min_press_SP310_register1 и Read_min_press_SP310_register2, а потом объединение с помощью word2_to_... или любым другим способом.

Александр Пинэко-Скворцов
04.03.2024, 09:43
Здравствуйте. Не так давно я уже спрашивал по этому вопросу, но к сожалению темы не нашел, возможно удалили.
Вопрос в следующем при соотнесении входов и выходов с переменной в два регистра, достаточно ли указать эту переменную 1 раз?
Допустим есть переменная которая занимает 2 регистра Read_min_press_SP310, нужно ли ее также прописывать второй раз? Помогите разобраться пожалуйста.

Добрый день.

Следует разбить переменную на два отдельных WORD'а.
Какой тип переменной у Вас?
Если REAL или DWORD, см. функциональные блоки REAL_TO_WORD2 и DWORD_TO_WORD2 в библиотеке OwenCommunication, стр. 139:
https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Modbus_v3.2.pdf

kondor3000
04.03.2024, 14:44
Здравствуйте. Не так давно я уже спрашивал по этому вопросу, но к сожалению темы не нашел, возможно удалили.
Вопрос в следующем при соотнесении входов и выходов с переменной в два регистра, достаточно ли указать эту переменную 1 раз?
Допустим есть переменная которая занимает 2 регистра Read_min_press_SP310, нужно ли ее также прописывать второй раз? Помогите разобраться пожалуйста.

Вот ваша тема и мои скрины, как использовать объединение UNION https://owen.ru/forum/showthread.php?t=37645&page=3#27
Также можно сделать из блока Swap_W (по ссылке перестановка регистров) объединение или разложение на 2 WORD

В данном случае, можно дать имя второй переменной и использовать блок WORD2_TO_REAL из библиотеки OwenCommunication

ivan.v
04.03.2024, 23:29
Добрый вечер. Поправьте если не так:
1. Переменную перевел с типа REAL В WORD.
2. Создал вторую с таким же именем с префиксом №2
3. Склеил их в REAl с помощью функционального блока.
Верно ли ?

kondor3000
05.03.2024, 07:51
Добрый вечер. Поправьте если не так:
1. Переменную перевел с типа REAL В WORD.
2. Создал вторую с таким же именем с префиксом №2
3. Склеил их в REAl с помощью функционального блока.
Верно ли ?

А проверить сразу не можете? Скорее всего переменные 1 и 2 надо будет поменять местами на входе в блок, для правильного отображения.
И ещё, сравнивать надо однотипные переменные, возможно нужна конвертация типов.

ivan.v
06.03.2024, 22:33
А проверить сразу не можете? Скорее всего переменные 1 и 2 надо будет поменять местами на входе в блок, для правильного отображения.
И ещё, сравнивать надо однотипные переменные, возможно нужна конвертация типов.
Добрый вечер. я проверял. значение получил 11,2 на выходе. Ввел значения в две переменные как в инструкции.
Вы имеете на блоке GT? та вторая переменная REAL

ivan.v
20.03.2024, 18:55
А проверить сразу не можете? Скорее всего переменные 1 и 2 надо будет поменять местами на входе в блок, для правильного отображения.
И ещё, сравнивать надо однотипные переменные, возможно нужна конвертация типов.
Добрый вечер. Подскажите пожалуйста, все сделал как написано в инструкции и так как рекомендовали здесь на форуме, а именно отправлять в панели данные массивом. столкнулся с тем, что при разложении Real два регистра типа WORD и отправки в панель, они не правильно отображаются, пробовал перестановку но не помогло, значение не корректное. можете подсказать что не так, в панели тип регистра стоит Dword.

kondor3000
20.03.2024, 20:04
Добрый вечер. Подскажите пожалуйста, все сделал как написано в инструкции и так как рекомендовали здесь на форуме, а именно отправлять в панели данные массивом. столкнулся с тем, что при разложении Real два регистра типа WORD и отправки в панель, они не правильно отображаются, пробовал перестановку но не помогло, значение не корректное. можете подсказать что не так, в панели тип регистра стоит Dword.
В панели стоит тип Dword, а формат FLOAT стоит?
Галку в панели пробовали поставить?
Хотя и перестановка местами регистров , в правильном месте в программе ПЛК, даст тот же эффект. Ещё адрес в панели может быть не правильный.

kondor3000
20.03.2024, 20:16
А зачем это мутилово с рассклеиванием/склеиванием?

Уже проходили и передачу REAL и Объединение и ФБ перестановки, раза 3. И опять снова здорова.

ivan.v
20.03.2024, 20:27
А зачем это мутилово с рассклеиванием/склеиванием? этот кусок для проверки был сделан. Для понимания образуется ли корректное значение

Godlike_S
20.03.2024, 20:34
А панель то какая? Овен?

ivan.v
20.03.2024, 20:34
В панели стоит тип Dword, а формат FLOAT стоит?
Галку в панели пробовали поставить?
Хотя и перестановка местами регистров , в правильном месте в программе ПЛК, даст тот же эффект. Ещё адрес в панели может быть не правильный.
Да в панели стоит Dword формат float

ivan.v
20.03.2024, 20:34
А панель то какая? Овен?

СП310 расширенная

ivan.v
20.03.2024, 20:36
В панели стоит тип Dword, а формат FLOAT стоит?
Галку в панели пробовали поставить?
Хотя и перестановка местами регистров , в правильном месте в программе ПЛК, даст тот же эффект. Ещё адрес в панели может быть не правильный.
В панели регистр с номером 770. Причем все что переделал и разбил на два WORD при отправки, в панели не "склеиваются"

Godlike_S
20.03.2024, 20:37
И галочка “float” тоже стоит?

Godlike_S
20.03.2024, 20:39
Посмотрел картинку, у вас опрос регистров PSW это внутренние регистры панели), а в них данные как попадают?

ivan.v
20.03.2024, 20:39
И галочка “float” тоже стоит?

конечно. даже пробовал поставить Unsigned

ivan.v
20.03.2024, 20:41
Посмотрел картинку, у вас опрос регистров PSW это внутренние регистры панели), а в них данные как попадают?
Это имели в виду

kondor3000
20.03.2024, 20:42
В панели регистр с номером 770. Причем все что переделал и разбил на два WORD при отправки, в панели не "склеиваются"

Проверить всё очень просто, сделайте в панели на время дисплеи Float, с адресами подряд , например 769, 770, 771, 772, если ни в одном не правильно, поставьте галку переставить регистры.

ivan.v
20.03.2024, 20:42
Посмотрел картинку, у вас опрос регистров PSW это внутренние регистры панели), а в них данные как попадают?

Не понял, в эти регистры мы можем записывать информацию же:)

ivan.v
20.03.2024, 20:47
Проверить всё очень просто, сделайте в панели на время дисплеи Float, с адресами подряд , например 769, 770, 771, 772, если ни в одном не правильно, поставьте галку переставить регистры.
Не понял. если я передаю в регистр dword две word, адрес будет у регистра начинаться с 770 и захватывать 771, а вы написали по порядку.

Godlike_S
20.03.2024, 20:49
Да, верно :) тяжёлая командировка… вы читаете из панели а не из контроллера

ivan.v
20.03.2024, 20:50
Есть исходный real. Ну и отправьте его в панель без всяких апликаций.
На сколько я знаю отправить массивом REAl не получится

ivan.v
20.03.2024, 20:53
Не понял. если я передаю в регистр dword две word, адрес будет у регистра начинаться с 770 и захватывать 771, а вы написали по порядку.
на время даже сделал отдельный регистр 800 отправил туда те-же переменные. результат такой же.

ivan.v
20.03.2024, 20:55
ivan.v, в панели нормальный порядок - 1234
выясни 1 (один) раз какой порядок в ПЛК и забудь про эти гнилые разложения/склеивания real-в в ворды.
Прямая адресация - еcть, структуры - есть, указтели/union - есть.

можете подсказать как это?

ivan.v
20.03.2024, 20:58
массив из 2х вордов отправить можно?
адрес at% в плк у этого массива какой?

x at%этот адрес : real;
----
x := 6.69;

и забудь про тот массив. Заклей стикером если вдруг на экране окажется.
Если вы про это.

ivan.v
20.03.2024, 21:01
так покажи сначала на панели просто 800 и просто 801 ворды для начала

сейчас без доступа к панели к сожалению, по отдельности не делал 800 и 801

ivan.v
20.03.2024, 21:03
сейчас без доступа к панели к сожалению, по отдельности не делал 800 и 801

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

ivan.v
20.03.2024, 21:07
Так начинай всегда с простого - сам факт передачи установи без разницы чего
проверю завтра с утра. отправлю по раздельности WORDы в панель 800 и 801. тип значения поставлю WORD

ivan.v
20.03.2024, 21:14
Таблица отображения данных. Просто кинь на экран на время. Привяжи к нужной PSW, дюжину строк вида WORD и смотри.

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

ivan.v
20.03.2024, 21:18
да не надо по раздельности. Что есть то и есть. Смотри только адреса регистров. И панелью займись

ладно попробую

ivan.v
20.03.2024, 21:24
Я все понял. Нету. Хочешь смотреть сразу много - Таблица отображения данных. "и видеть значения". Вот и увидишь. Экран сделай отдельный где хоть сотню регисторов покажешь таблицей.
Правильно понимаю в одну таблицу можно только один регистр завести, в данном случае я завел 800 с типом Dword

ivan.v
20.03.2024, 21:30
Так все равно придется Real делить на два worda? если хотим отправить массивом.

ivan.v
20.03.2024, 21:54
Удоли.
Таблица - всего записей, строк на странице.
А то - столбцы.


Таблица имеет 1 старт. И 100500 строк/столбцов начиная этого с старта-адреса.

То есть если массив начинается с 700 регистра и имеет длинну 80, при указании в таблице регистра в начале 700, увижу все значения?

ivan.v
20.03.2024, 22:11
Удивляет?
...

Но можешь 80 раз копипастить одиночные.

понял:) спасибо

ivan.v
20.03.2024, 22:19
массив из 2х вордов отправить можно?
адрес at% в плк у этого массива какой?

x at%этот адрес : real;
----
x := 6.69;

и забудь про тот массив. Заклей стикером если вдруг на экране окажется.
также не понятно, на панели стоит значение сейчас 1,10 тип REAl, а на выходе не правильное значение, это уже идет передача с панели в плк значения.

ivan.v
20.03.2024, 22:34
Запомни.
Есть железо где выравнивание - важно.
Есть железо где выравнивание - похрен.
Если ты будешь всё и всегда выравнивать - работать будет на любом железе.
Если ты выравнивать не будешь - иногда будешь иметь проблемы. Ты вытянул выгрышный билет))
СП300, 32-х битное, @277
что значит "выравнивание" :)

kondor3000
20.03.2024, 22:34
также не понятно, на панели стоит значение сейчас 1,10 тип REAl, а на выходе не правильное значение, это уже идет передача с панели в плк значения.

Если собрать цифры из скрина, то передаётся число 1.1 74554

А на скрине, как передать массив WORD и REAL 74553

ivan.v
20.03.2024, 22:47
Если собрать последовательно т.е. 52429 lo word, 16268 hi word то будет 1.1
Если 52429 и 15820 => 0.1

Если в любом варианте ставить любое число в lo word, то значение real будет менятся в долях процента
чем пользуетесь при сборки двух Word?

ivan.v
20.03.2024, 23:06
Если собрать цифры из скрина, то передаётся число 1.1 74554

А на скрине, как передать массив WORD и REAL 74553
С тем как получить из 2 word real понял. Уже писал, что этот кусок как раз был для проверки.

ivan.v
20.03.2024, 23:12
Проверить всё очень просто, сделайте в панели на время дисплеи Float, с адресами подряд , например 769, 770, 771, 772, если ни в одном не правильно, поставьте галку переставить регистры.

достаточно 4 дисплея с адресами 770, 771, 772, 773? с типом Float?

ivan.v
20.03.2024, 23:25
достаточно 4 дисплея с адресами 770, 771, 772, 773? с типом Float?

Одного не понимаю. Если делать несколько дисплеев с значением Float, туда нужно записывать два Word, так как это число с запятой. в моем случае в рег. 772 и 773 пишется уже другое значение. конечно я понимаю, для Вас это все просто и очевидно, но я запутался окончательно.

ivan.v
20.03.2024, 23:28
Панель - мастер?

нет панель slave

ivan.v
21.03.2024, 00:29
забавная штука. Если на блоке Word2_to_real поменять местами переменные 2 к 1, а 1 к 2. то значение установленное на панели показывает верно, но если вернуть как положено 1 к 1 и 2 к 2 и вставить значение TRUE, оно должно же измениться, я же делаю этим перестановку ?

Евгений Кислов
21.03.2024, 06:13
Если на блоке Word2_to_real поменять местами переменные 2 к 1, а 1 к 2

...то вы поменяете порядок регистров в значении.


и вставить значение TRUE

...то вы поменяете порядок байт в значении (xSwapBytes).

kondor3000
21.03.2024, 07:56
достаточно 4 дисплея с адресами 770, 771, 772, 773? с типом Float?
С типом Float. Вы же несколько раз писали, что переставляя регистры, всё равно не правильно отображается.
В начале, подозревал, что у вас есть выравнивание (то есть смещение регистров относительно адресов, может быть и 1 и 2-3-4 регистра), поэтому и предложил проверить, нет ли у вас смещения.

Но похоже выравнивания нет, а вы опять запутались в переставленных регистрах и байтах ( байты тоже бывают переставлены)

ivan.v
21.03.2024, 11:29
С типом Float. Вы же несколько раз писали, что переставляя регистры, всё равно не правильно отображается.
В начале, подозревал, что у вас есть выравнивание (то есть смещение регистров относительно адресов, может быть и 1 и 2-3-4 регистра), поэтому и предложил проверить, нет ли у вас смещения.

Но похоже выравнивания нет, а вы опять запутались в переставленных регистрах и байтах ( байты тоже бывают переставлены)

Спасибо большое за помощь, я везде переставил местами регистры, и все слало работать как должно быть. Единственное хотел бы разобраться почему так произошло, что отправлять нудно сначала регистр 2, а потом 1 в панель, после чего они там складываются корректно. Я не обратил внимание что блок переставляет байты, а я думал регистры

Godlike_S
21.03.2024, 11:47
Спасибо большое за помощь, я везде переставил местами регистры, и все слало работать как должно быть. Единственное хотел бы разобраться почему так произошло, что отправлять нудно сначала регистр 2, а потом 1 в панель, после чего они там складываются корректно. Я не обратил внимание что блок переставляет байты, а я думал регистры

Переставляет байты при наличии флага, а регистры Вы и сами можете переставить поменяв местами переменные (разработчики ФБ наверное так же думают :))

kondor3000
21.03.2024, 14:10
Спасибо большое за помощь, я везде переставил местами регистры, и все слало работать как должно быть. Единственное хотел бы разобраться почему так произошло, что отправлять нудно сначала регистр 2, а потом 1 в панель, после чего они там складываются корректно. Я не обратил внимание что блок переставляет байты, а я думал регистры

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

ivan.v
21.03.2024, 15:03
Тогда, попробуйте передавать REAL массивом. Скрин вам уже давал.
А то что регистры и байты могут поменяться местами, просто надо знать и знать что надо делать в таком случае.

Да во всем этом массиве было пару значений Real. Вроде все работает:)

kondor3000
21.03.2024, 15:39
Да во всем этом массиве было пару значений Real. Вроде все работает:)

Ну так вы можете сделать массив и на 50-60 REAL или меньше, сколько вам надо.

ivan.v
21.03.2024, 19:02
Ну так вы можете сделать массив и на 50-60 REAL или меньше, сколько вам надо.

Все регистры для записи в панель запихнул в массив. Надеюсь это повлияет на быстродействие команд, а то бывает срабатывает та или иная кнопка с запозданием.