Форум 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 / Algorithm Programming Languages » Создание шаблона программы с перепривязкой аргументов

   
Автор / Author Тема / Topic: Создание шаблона программы с перепривязкой аргументов
Сергей Кравчук
Forum Member / Участник форума
Участник № / Member № 5384


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

Чтение данных с контроллера осуществляется с помощью групповых запросов по modbus. Интересующие нас данные передаются в переменную класса CALL (тип вызова ChGroupReq). Адресное пространство: 30001-30008 – значения каналов, 30014-30029 – адреса интересующих нас переменных для вычисления серийного номера и типа датчика.
Т.е.
Для канала 1
30014 – младшая часть заводского номера, (беззнаковое 16 разрядное значение), K001_1_L;
30015 – старшая часть заводского номера и тип датчика, (беззнаковое 16 разрядное значение) , K001_1_H ;
….
Для канала 8
30028 – младшая часть заводского номера, (беззнаковое 16 разрядное значение), K001_8_L;
30029 – старшая часть заводского номера и тип датчика, (беззнаковое 16 разрядное значение), K001_8_H;
В аргументах канала класса CALL передаем значения в переменные, которые потом обрабатываем в программе.
Выражение вычисления серийного номера на процедурном языке Techno ST имеет следующий вид для канала № 1:
K001_1_SER_N_In = ((K001_1_H_R shl 16))|K001_1_L_R;
K001_1_SER_N_In = K001_1_SER_N_In & 0x1FFFFF .
Выражение вычисления типа датчика на процедурном языке Techno ST имеет следующий вид для канала № 1:
K001_1_TYP_S_In = (K001_1_H_R shr 5);
K001_1_TYP_S_In = K001_1_TYP_S_In & 0x001F.
В настоящий момент создана программа для 1 контроллера. Она работает отлично. Но! Необходимо создать программу, чтобы при ее вызове указывать № контроллера и в программе происходила перепривязка аргументов для этого контроллера.
Подобные программы мы писали, но в них можно использовать 1 канал.
Возможно ли сделать такую программу, в которой будет происходить перепривязка по 4 каналам. Т.к. для вычисления серийника и типа датчика, задействованы 4 канала класса Float (2 для вычислений и 2 в которых хранятся данные) ???

Сообщения / Posts 39 | Из / 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 
См."Атрибуты каналов, отображаемые профайлером/ArgSize" и функции getAttributeI(UDINT ch_id, UINT attr_id) языка ST.
Вы можете из ST-программы обращаться к любым аргументам каналов через атрибуты, нумерация которых начинается с 1000.

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


Icon 1 отправлено / posted      Профиль для / Profile for Сергей Кравчук           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
У нас в одном канале класса CALL сидят аргументы К001_1_L,K001_1_H ... К001_8_L,K001_8_H необходимые для обработки.
Т.е. мне надо еще в этот канал завести аргументы K001_1_SER, K001_1_TYP ... K001_8_SER, K001_8_TYP и можно написать программу с виртуальной привязкой к аргументам канала класса CALL (атрибуты 140-203).
А потом привязать эту программу уже к каждому интересующему меня каналу класса CALL. И тогда в принципе функция getAttributeI(UDINT ch_id, UINT attr_id) не нужна, т.к. можно напрямую обращаться к аргументу программы.
Правильно ли я Вас понял?

Сообщения / Posts 39 | Из / 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 
При групповом запросе по Modbus количество запрашиваемых аргументов запрашивающего канала ChGroupReq будет определять количество запрашиваемых переменных. Поэтому нельзя "еще в этот канал завести аргументы K001_1_SER, K001_1_TYP ... K001_8_SER, K001_8_TYP".

Пришлите, пожалуйста, нам Ваш проект и структуру предполагаемой системы
- количество контроллеров с 8 датчиками каждый,
- где и как Вы хотите хранить и как использовать серийные номера и типы датчиков,
- как это согласуется с "для вычисления серийника и типа датчика, задействованы 4 канала класса Float (2 для вычислений и 2 в которых хранятся данные)"?

Сообщения / Posts 17317 | Из / 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