Форум TRACE MODE: техническая поддержка Послать новую тему / Post New Topic  Послать ответ / Post A Reply
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 6 » TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version » Косвенная адресация аргументов в канале CALL.string

   
Автор / Author Тема / Topic: Косвенная адресация аргументов в канале CALL.string
merny
Active Forum Member / Активный участник форума
Участник № / Member № 2290


Icon 1 отправлено / posted      Профиль для / Profile for merny           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Канал CALL.string позволяет осуществлять из программы косвенную адресацию массива аргументов. При записи в реальное значение канала номера аргумента в аппаратное значение канала записывается значение самого аргумента. Проблема возникает в случае, если аргументы представляют собой строки длиной более 4 символов, поскольку аппаратное значение имеет формат действительного числа (очевидно короткого, 4-х байтового).
Был создан текстовый файл (12 строк: число загружаемых аргументов, сами 10 аргументов и пустая строка). Строки односимвольные.
В программе организован циклический вывод 10 аргументов в ГЭ "Текст". Все работает нормально.
Длина строк увеличена до 4 символов. Все работает нормально.
Длина строк увеличена до 6 символов. Выводятся только первые 4 символа строки, остальные символы теряются.
Вопрос: возможно ли обеспечить аналогичный доступ к аргументам строкового типа длиной хотя бы до 20 символов?

Сообщения / Posts 70 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Программа должна только изменять значение канала CALL.string.
На экран в ГЭ "текст" при этом надо выводить именно АППАРАТНОЕ значение канала CALL.string, как указано в его описании.
Надо понимать, что это лишь эксперимент.
Реальное сочетание форматов данных следует рассматривать в составе конкретной практической задачи.

Сообщения / Posts 17106 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
merny
Active Forum Member / Активный участник форума
Участник № / Member № 2290


Icon 1 отправлено / posted      Профиль для / Profile for merny           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
quote:
Отправитель / Originally posted by AdAstra Technical Support:
Программа должна только изменять значение канала CALL.string.
На экран в ГЭ "текст" при этом надо выводить именно АППАРАТНОЕ значение канала CALL.string, как указано в его описании.
Надо понимать, что это лишь эксперимент.
Реальное сочетание форматов данных следует рассматривать в составе конкретной практической задачи.

собственно я и вывожу аппаратное значение канала. просто в аппаратном значении не помещается вся строка, только первые 4 символа. а нужно 15-20 символов
вывод на экран в общем не нужен. нужна последовательная обработка строк в цикле. на экран вывод осуществляется ради контроля процессов:
- загрузка текста в аргументы канала: идет нормально
- косвенная адресация через реальное значение: идет нормально
- загрузка аргумента в аппаратное значение канала: идет с обрезкой строки
...
- загрузка аргумента канала CALL.string через его аппаратное значение в канал CALL.move: не проверял (не выводил промежуточный результат на экран), но думаю, что работает, правда все с той же обрезкой строки
- передача строки из канала CALL.move в аргументы типа usint канала CALL.string (но уже другого): вроде бы не работает, но до конца не разобрался в чем дело


попытка написать и подключить внешнюю библиотеку не получилась. компилятор ST программы не видит библиотечную функцию

Сообщения / Posts 70 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Передача в программу или в аргумента канала MOVE STRING из АППАРАТНОГО значения канала CALL.String осуществляется правильно (перепроверено). А вот выдача из программы или из аргумента MOVE_STRING больше 4 символов может осуществляться либо в аргументы CALL.String, либо в какой-либо атрибут текстового формата (например, КОММЕНТАРИЙ) - ЭТО ДОКУМЕНТИРОВАНО.

При оформлении вызова внешней библиотеки в соответствии с нашей документацией функция вызывается правильно. Это проверено многократно в реальных проектах.
В частности, надо проверить правильность имен функций, экспортируемых внешней DLL. Это можно проверить с помощью утилиты dumpbin.exe.
Возможно, в протоколе профайлера есть какие-либо сообщения оп этому поводу (см. документацию).

Сообщения / Posts 17106 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
merny
Active Forum Member / Активный участник форума
Участник № / Member № 2290


Icon 1 отправлено / posted      Профиль для / Profile for merny           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
да кто же спорит, что в системе все должно работать
у меня не все работает, а в чем причина не ясно. освоение идет методом тыка, причем в значительной степени слепого, т.к. справка описывает недостаточно полно
спасибо за подсказку, что полноценная выдача из программы строки возможна только в канал CALL.string. в принципе я уже обнаружил опытным путем, что прогон строки именно через программу обрезает ее. по вашей подсказке вывел строку через дополнительный аргумент канала CALL.string и вроде бы все прошло в целости

про внешнюю библиотеку пока говорить не буду, там наверняка мои ошибки, т.к. я не программист. просто скомпилировал такой текст не в приложение, а в dll:
unsigned int func()
{
return 5;
} //это всё
для простоты внешнее имя и истинное имя сделал одинаковыми, аргументы вообще не использовал. скорее всего ошибка на этапе создания библиотеки, а не ее подключения


в канал CALL.move с параметром 8 строка загружается нормально (в аргумент типа IN). передача в аргумент типа OUT также идет нормально. а вот следующее пока не работает:
"Если к аргументу OUT привязан атрибут (140, ARG00) канала CALL.STRING, итоговая строка записывается в аргументы CALL.STRING следующим образом:
в аргумент SINT/USINT – 1 символ;
в аргумент INT/UINT – 2 символа;
в аргумент другого типа данных – 4 символа;"
- создал еще один канал CALL.STRING
- набил аргументов usint, чтобы влезла любая строка
- к аргументу OUT канала CALL.move привязал атрибут 140 нового канала CALL.STRING
- привязал первый аргумент (чтобы увидеть число равное коду первого символа строки) к аргументу экрана и вывел значение аргумента в гэ "текст" - не работает
неработоспособность проявляется в двух вариантах:
- если привязку аргументов осуществлять со стороны аргумента экрана, то просто выводится ноль.
- если привязку аргументов осуществлять со стороны аргументов канала CALL.STRING (где должны храниться коды символов строки), то не работает вообще ничего. ни в один из гэ "текст" не выводится ни одна строка, ни одно значение (остается надпись <текст>), графики на трендах показывают нулевые значения. аналогичная ситуация была при попытке привязки аргумента к переменной программы - все зависало
тип аргументов в канале CALL.STRING использовал IN, OUT и IN/OUT - это ни на что не повлияло

Сообщения / Posts 70 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
" к аргументу OUT канала CALL.move привязал атрибут 140 нового канала CALL.STRING"

По документации
"Если к аргументу OUT привязан атрибут (140, ARG00) канала CALL, отличного (!) от CALL.STRING,"

Вместо канала CALL.STRING к аргументу OUT привяжите канал CALL.ChGroupReq.

Тип данных IN-аргумента канала MOVE, на который передается распаковываемая строка, должен быть целочисленным (чтобы строка воспринималась в виде бинарного кода).

Сообщения / Posts 17106 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
merny
Active Forum Member / Активный участник форума
Участник № / Member № 2290


Icon 1 отправлено / posted      Профиль для / Profile for merny           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
спасибо, попробую
но то, что мной указано в кавычках
"Если к аргументу OUT привязан атрибут (140, ARG00) канала CALL.STRING, итоговая строка записывается в аргументы CALL.STRING следующим образом:
в аргумент SINT/USINT – 1 символ;
в аргумент INT/UINT – 2 символа;
в аргумент другого типа данных – 4 символа;"
было скопипастено из справки Trace Mode, а не сочинено мной самостоятельно. документацию я получу на руки после покупки профверсии инструментальной системы и мрв, что произойдет лишь после создания работоспособного прототипа проекта. так что пока приходится пользоваться справкой, а в справке написано то, что я процитировал

Сообщения / Posts 70 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
merny
Active Forum Member / Активный участник форума
Участник № / Member № 2290


Icon 1 отправлено / posted      Профиль для / Profile for merny           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
спасибо, все заработало.
только пришлось для вывода численных значений на экран создавать десятки аргументов экрана, привязанных к десяткам аргументов канала CALL.ChGroupReq.
впрочем, при анализе строки по-видимому можно воспользоваться косвенной адресацией как в канале CALL.STRING, загружая индекс в реальное значение канала и считывая аппаратное значение последовательно в элементы массива. и много привязок не понадобится

обнаружилось одно странное неудобство: при осуществлении привязок аргументов система автоматически меняет имена, ранее данные аргументам. при этом, например, в тексте программы ST остаются старые имена переменных, что ведет к ошибкам компиляции. когда аргументов мало это еще воспринимается нормально. но когда каналов и аргументов становится сравнительно много, как и всевозможных перекрестных привязок, то возникает путаница. причем зафиксировать положение невозможно, т.к. при перепривязке имена меняются снова. приходится после перепривязки восстанавливать старые имена вручную, что затрудняет использование длинных имен - просто велика вероятность опечатки при повторных вводах

Сообщения / Posts 70 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Вы цитируете справочную систему релиза 6.08. В релизе 6.09 документация откорректирована.

Указанная косвенная адресация реализуется только в каналах CALL.STRING.

В IDE в меню "Файл/Настройки ИС/Редактор аргументов" уберите флажок в поле "Функции/Переименовывать аргументы при привязке".

Сообщения / Posts 17106 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
merny
Active Forum Member / Активный участник форума
Участник № / Member № 2290


Icon 1 отправлено / posted      Профиль для / Profile for merny           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
quote:
Отправитель / Originally posted by AdAstra Technical Support:
Вы цитируете справочную систему релиза 6.08. В релизе 6.09 документация откорректирована.

Указанная косвенная адресация реализуется только в каналах CALL.STRING.

В IDE в меню "Файл/Настройки ИС/Редактор аргументов" уберите флажок в поле "Функции/Переименовывать аргументы при привязке".

спасибо
Сообщения / Posts 70 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

Quick Reply
Сообщение / Message:

HTML код не разрешен. / HTML is not enabled.
UBB код разрешен. / UBB Code is enabled.

Значки Graemlins / Instant Graemlins
   


Послать новую тему / Post New Topic  Послать ответ / Post A Reply Закрыть тему / Close Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2