This is topic Создание шаблона программы с перепривязкой аргументов in forum Языки программирования в TRACE MODE 6 / Algorithm Programming Languages at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/33/t/000140.html

Posted by Сергей Кравчук (Участник № / Member № 5384) on :
 
День добрый!
Прошу помощи в создании шаблона программы для вычисления серийных номеров датчиков.

Чтение данных с контроллера осуществляется с помощью групповых запросов по 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 в которых хранятся данные) ???
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
См."Атрибуты каналов, отображаемые профайлером/ArgSize" и функции getAttributeI(UDINT ch_id, UINT attr_id) языка ST.
Вы можете из ST-программы обращаться к любым аргументам каналов через атрибуты, нумерация которых начинается с 1000.
 
Posted by Сергей Кравчук (Участник № / Member № 5384) on :
 
У нас в одном канале класса 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) не нужна, т.к. можно напрямую обращаться к аргументу программы.
Правильно ли я Вас понял?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
При групповом запросе по Modbus количество запрашиваемых аргументов запрашивающего канала ChGroupReq будет определять количество запрашиваемых переменных. Поэтому нельзя "еще в этот канал завести аргументы K001_1_SER, K001_1_TYP ... K001_8_SER, K001_8_TYP".

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


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2