Просмотр полной версии : Передача данных в CODESYS 3.5 массивом
Здравствуйте. Не так давно я уже спрашивал по этому вопросу, но к сожалению темы не нашел, возможно удалили.
Вопрос в следующем при соотнесении входов и выходов с переменной в два регистра, достаточно ли указать эту переменную 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
Добрый вечер. Поправьте если не так:
1. Переменную перевел с типа REAL В WORD.
2. Создал вторую с таким же именем с префиксом №2
3. Склеил их в REAl с помощью функционального блока.
Верно ли ?
kondor3000
05.03.2024, 07:51
Добрый вечер. Поправьте если не так:
1. Переменную перевел с типа REAL В WORD.
2. Создал вторую с таким же именем с префиксом №2
3. Склеил их в REAl с помощью функционального блока.
Верно ли ?
А проверить сразу не можете? Скорее всего переменные 1 и 2 надо будет поменять местами на входе в блок, для правильного отображения.
И ещё, сравнивать надо однотипные переменные, возможно нужна конвертация типов.
А проверить сразу не можете? Скорее всего переменные 1 и 2 надо будет поменять местами на входе в блок, для правильного отображения.
И ещё, сравнивать надо однотипные переменные, возможно нужна конвертация типов.
Добрый вечер. я проверял. значение получил 11,2 на выходе. Ввел значения в две переменные как в инструкции.
Вы имеете на блоке GT? та вторая переменная REAL
А проверить сразу не можете? Скорее всего переменные 1 и 2 надо будет поменять местами на входе в блок, для правильного отображения.
И ещё, сравнивать надо однотипные переменные, возможно нужна конвертация типов.
Добрый вечер. Подскажите пожалуйста, все сделал как написано в инструкции и так как рекомендовали здесь на форуме, а именно отправлять в панели данные массивом. столкнулся с тем, что при разложении Real два регистра типа WORD и отправки в панель, они не правильно отображаются, пробовал перестановку но не помогло, значение не корректное. можете подсказать что не так, в панели тип регистра стоит Dword.
kondor3000
20.03.2024, 20:04
Добрый вечер. Подскажите пожалуйста, все сделал как написано в инструкции и так как рекомендовали здесь на форуме, а именно отправлять в панели данные массивом. столкнулся с тем, что при разложении Real два регистра типа WORD и отправки в панель, они не правильно отображаются, пробовал перестановку но не помогло, значение не корректное. можете подсказать что не так, в панели тип регистра стоит Dword.
В панели стоит тип Dword, а формат FLOAT стоит?
Галку в панели пробовали поставить?
Хотя и перестановка местами регистров , в правильном месте в программе ПЛК, даст тот же эффект. Ещё адрес в панели может быть не правильный.
kondor3000
20.03.2024, 20:16
А зачем это мутилово с рассклеиванием/склеиванием?
Уже проходили и передачу REAL и Объединение и ФБ перестановки, раза 3. И опять снова здорова.
А зачем это мутилово с рассклеиванием/склеиванием? этот кусок для проверки был сделан. Для понимания образуется ли корректное значение
Godlike_S
20.03.2024, 20:34
А панель то какая? Овен?
В панели стоит тип Dword, а формат FLOAT стоит?
Галку в панели пробовали поставить?
Хотя и перестановка местами регистров , в правильном месте в программе ПЛК, даст тот же эффект. Ещё адрес в панели может быть не правильный.
Да в панели стоит Dword формат float
А панель то какая? Овен?
СП310 расширенная
В панели стоит тип Dword, а формат FLOAT стоит?
Галку в панели пробовали поставить?
Хотя и перестановка местами регистров , в правильном месте в программе ПЛК, даст тот же эффект. Ещё адрес в панели может быть не правильный.
В панели регистр с номером 770. Причем все что переделал и разбил на два WORD при отправки, в панели не "склеиваются"
Godlike_S
20.03.2024, 20:37
И галочка “float” тоже стоит?
Godlike_S
20.03.2024, 20:39
Посмотрел картинку, у вас опрос регистров PSW это внутренние регистры панели), а в них данные как попадают?
И галочка “float” тоже стоит?
конечно. даже пробовал поставить Unsigned
Посмотрел картинку, у вас опрос регистров PSW это внутренние регистры панели), а в них данные как попадают?
Это имели в виду
kondor3000
20.03.2024, 20:42
В панели регистр с номером 770. Причем все что переделал и разбил на два WORD при отправки, в панели не "склеиваются"
Проверить всё очень просто, сделайте в панели на время дисплеи Float, с адресами подряд , например 769, 770, 771, 772, если ни в одном не правильно, поставьте галку переставить регистры.
Посмотрел картинку, у вас опрос регистров PSW это внутренние регистры панели), а в них данные как попадают?
Не понял, в эти регистры мы можем записывать информацию же:)
Проверить всё очень просто, сделайте в панели на время дисплеи Float, с адресами подряд , например 769, 770, 771, 772, если ни в одном не правильно, поставьте галку переставить регистры.
Не понял. если я передаю в регистр dword две word, адрес будет у регистра начинаться с 770 и захватывать 771, а вы написали по порядку.
Godlike_S
20.03.2024, 20:49
Да, верно :) тяжёлая командировка… вы читаете из панели а не из контроллера
Есть исходный real. Ну и отправьте его в панель без всяких апликаций.
На сколько я знаю отправить массивом REAl не получится
Не понял. если я передаю в регистр dword две word, адрес будет у регистра начинаться с 770 и захватывать 771, а вы написали по порядку.
на время даже сделал отдельный регистр 800 отправил туда те-же переменные. результат такой же.
ivan.v, в панели нормальный порядок - 1234
выясни 1 (один) раз какой порядок в ПЛК и забудь про эти гнилые разложения/склеивания real-в в ворды.
Прямая адресация - еcть, структуры - есть, указтели/union - есть.
можете подсказать как это?
массив из 2х вордов отправить можно?
адрес at% в плк у этого массива какой?
x at%этот адрес : real;
----
x := 6.69;
и забудь про тот массив. Заклей стикером если вдруг на экране окажется.
Если вы про это.
так покажи сначала на панели просто 800 и просто 801 ворды для начала
сейчас без доступа к панели к сожалению, по отдельности не делал 800 и 801
сейчас без доступа к панели к сожалению, по отдельности не делал 800 и 801
Плохо что не придумали для панели отладки как в ПЛК, чтобы можно было зайти посмотреть значения.
Так начинай всегда с простого - сам факт передачи установи без разницы чего
проверю завтра с утра. отправлю по раздельности WORDы в панель 800 и 801. тип значения поставлю WORD
Таблица отображения данных. Просто кинь на экран на время. Привяжи к нужной PSW, дюжину строк вида WORD и смотри.
Не не поняли. я к тому, что можно было бы придумать во первых загрузку проекта через ethernet, а также для мониторинга работы заходить на панель удаленно и видеть значения. Как с ПЛК, я его не вижу, но могу зайти на него в режиме отладки.
да не надо по раздельности. Что есть то и есть. Смотри только адреса регистров. И панелью займись
ладно попробую
Я все понял. Нету. Хочешь смотреть сразу много - Таблица отображения данных. "и видеть значения". Вот и увидишь. Экран сделай отдельный где хоть сотню регисторов покажешь таблицей.
Правильно понимаю в одну таблицу можно только один регистр завести, в данном случае я завел 800 с типом Dword
Так все равно придется Real делить на два worda? если хотим отправить массивом.
Удоли.
Таблица - всего записей, строк на странице.
А то - столбцы.
Таблица имеет 1 старт. И 100500 строк/столбцов начиная этого с старта-адреса.
То есть если массив начинается с 700 регистра и имеет длинну 80, при указании в таблице регистра в начале 700, увижу все значения?
Удивляет?
...
Но можешь 80 раз копипастить одиночные.
понял:) спасибо
массив из 2х вордов отправить можно?
адрес at% в плк у этого массива какой?
x at%этот адрес : real;
----
x := 6.69;
и забудь про тот массив. Заклей стикером если вдруг на экране окажется.
также не понятно, на панели стоит значение сейчас 1,10 тип REAl, а на выходе не правильное значение, это уже идет передача с панели в плк значения.
Запомни.
Есть железо где выравнивание - важно.
Есть железо где выравнивание - похрен.
Если ты будешь всё и всегда выравнивать - работать будет на любом железе.
Если ты выравнивать не будешь - иногда будешь иметь проблемы. Ты вытянул выгрышный билет))
СП300, 32-х битное, @277
что значит "выравнивание" :)
kondor3000
20.03.2024, 22:34
также не понятно, на панели стоит значение сейчас 1,10 тип REAl, а на выходе не правильное значение, это уже идет передача с панели в плк значения.
Если собрать цифры из скрина, то передаётся число 1.1 74554
А на скрине, как передать массив WORD и REAL 74553
Если собрать последовательно т.е. 52429 lo word, 16268 hi word то будет 1.1
Если 52429 и 15820 => 0.1
Если в любом варианте ставить любое число в lo word, то значение real будет менятся в долях процента
чем пользуетесь при сборки двух Word?
Если собрать цифры из скрина, то передаётся число 1.1 74554
А на скрине, как передать массив WORD и REAL 74553
С тем как получить из 2 word real понял. Уже писал, что этот кусок как раз был для проверки.
Проверить всё очень просто, сделайте в панели на время дисплеи Float, с адресами подряд , например 769, 770, 771, 772, если ни в одном не правильно, поставьте галку переставить регистры.
достаточно 4 дисплея с адресами 770, 771, 772, 773? с типом Float?
достаточно 4 дисплея с адресами 770, 771, 772, 773? с типом Float?
Одного не понимаю. Если делать несколько дисплеев с значением Float, туда нужно записывать два Word, так как это число с запятой. в моем случае в рег. 772 и 773 пишется уже другое значение. конечно я понимаю, для Вас это все просто и очевидно, но я запутался окончательно.
Панель - мастер?
нет панель slave
забавная штука. Если на блоке 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 регистра), поэтому и предложил проверить, нет ли у вас смещения.
Но похоже выравнивания нет, а вы опять запутались в переставленных регистрах и байтах ( байты тоже бывают переставлены)
С типом 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 массивом. Скрин вам уже давал.
А то что регистры и байты могут поменяться местами, просто надо знать и знать что надо делать в таком случае.
Тогда, попробуйте передавать REAL массивом. Скрин вам уже давал.
А то что регистры и байты могут поменяться местами, просто надо знать и знать что надо делать в таком случае.
Да во всем этом массиве было пару значений Real. Вроде все работает:)
kondor3000
21.03.2024, 15:39
Да во всем этом массиве было пару значений Real. Вроде все работает:)
Ну так вы можете сделать массив и на 50-60 REAL или меньше, сколько вам надо.
Ну так вы можете сделать массив и на 50-60 REAL или меньше, сколько вам надо.
Все регистры для записи в панель запихнул в массив. Надеюсь это повлияет на быстродействие команд, а то бывает срабатывает та или иная кнопка с запозданием.
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot