modbusTCP обработка данных побитно

Вопросы, не попадающие в другие разделы.

modbusTCP обработка данных побитно

Сообщение Черемис » Ср мар 28, 2012 1:22 pm

от контролера с 5DI и 2DO по modbus идут данные на moxy преобразующая в modbus TCP, далее на OPC kepware через FSGateway передаю в InTouch. Все сигналы пишуться в один адрес, 40001 где DI пишуться побитно.
Реализовать систему алармов, событий по битно не реально и не удобно.
1) Чтение: присвоение тега для каждого бита (DI)
Записать можно в application
V1_open = V1.00;
V1_close = V1.01;
........
Но т.к. тегов выходит под 500, а у application есть ограничение в количесве записываемого туда, возникает необходимость реализовать функцию.
Исходные данные:
I/O tegineger - V1, V2, V3....V25
memory Discret - V1_open, V1_close .....V25_ ...
Косвенный тег - nomerValve, int_open, int_close
аргумент QuickFunction - tagIO - message
тело функции:
nomerValve.Name = tagIO;
int_open.Name = tagIO + "_int_open";
int_close.Name = tagIO + "_int_close";

int_open.Value = nomerValve.00;
int_close.Value = nomerValve.01;

Но результатов мне это не принесло, где допустил ошибки или возможно есть другой более простой способ. Скажем побитно обращаться в SMC к тегам OPC сервера. Сейчас в ItemReference прописана строка Channel1.Device2.A3_V3 , что туда прибавить что бы обратиться к биту или может кто знает как реализовать это в kepware.

2) Запись (DO)
Как она может быть организованно я не имею никакого понятия. Т.к. знания протоколов modbus у меня нулевые
По адресу 40001 идут данные 11100000 3-я единичка меняеться постоянно 0 и 1 (наверно какой нить стоп бит), 5-ь нулей это входа. Так что я теряюсь в догадках что значат остальные цифры и как слать данные на контроллер с Intoucha.

За ответы заранее благодарен, вы очень поможете в реализации моего первого проэкта.
Черемис
 
Сообщения: 15
Зарегистрирован: Ср мар 28, 2012 12:11 pm

Re: modbusTCP обработка данных побитно

Сообщение Генератор зла » Ср мар 28, 2012 7:26 pm

Черемис писал(а):Реализовать систему алармов, событий по битно не реально и не удобно.

Да? Не уверен, что механизм "придуманный" Вами удобнее :) А алармы на дискретные теги в InTouch реализуется установкой одной "галочки".
Черемис писал(а):Но результатов мне это не принесло

И в чём это выражается?
Черемис писал(а):Как она может быть организованно я не имею никакого понятия.

Да так же. 40001 - адрес Holding Register внутри контроллера. Значит, программа в этот адрес упаковала какие то Inputs. Можно сделать адрес 40002 и в контроллере из него писать в Output's.
Vita est dolor.
Генератор зла
 
Сообщения: 2860
Зарегистрирован: Вс янв 23, 2011 5:08 pm

Re: modbusTCP обработка данных побитно

Сообщение Черемис » Чт мар 29, 2012 9:08 am

Генератор зла писал(а):Да? Не уверен, что механизм "придуманный" Вами удобнее :) А алармы на дискретные теги в InTouch реализуется установкой одной "галочки".

Вот что бы одной галочкой мне поставить этот самый аларм мне и нужно вытащить побитно из тега I\O Integer эти самые дискретные сигналы, тоесть разбить это значение на биты и записать эти данные в дискретные тэги, где уже я буду ставить галочки и всячески над ними извращаться.
Генератор зла писал(а):Но результатов мне это не принеслоИ в чём это выражается?

В том что так и не удалось реализовать скрипт-функцию которая бы занималась разбивкой
Черемис
 
Сообщения: 15
Зарегистрирован: Ср мар 28, 2012 12:11 pm

Re: modbusTCP обработка данных побитно

Сообщение Генератор зла » Чт мар 29, 2012 10:56 am

Черемис писал(а):Вот что бы одной галочкой мне поставить этот самый аларм мне и нужно вытащить побитно из тега I\O Integer эти самые дискретные сигналы, тоесть разбить это значение на биты и записать эти данные в дискретные тэги, где уже я буду ставить галочки и всячески над ними извращаться.

Черемис писал(а):V1_open = V1.00;
V1_close = V1.01;

А это на что похоже??? V1_Close - не тег?
V1.01 - тег наверняка, это я понимаю.
Vita est dolor.
Генератор зла
 
Сообщения: 2860
Зарегистрирован: Вс янв 23, 2011 5:08 pm

Re: modbusTCP обработка данных побитно

Сообщение Черемис » Чт мар 29, 2012 11:00 am

Понял свою ошибку, что бы присвоить значение тегу, косвенно ему значение не присвоить. Выходит тока один выход прописать все дискретные теги ручками в application и присвоить им битовые значения.
Неужели нету иного пути?
Черемис
 
Сообщения: 15
Зарегистрирован: Ср мар 28, 2012 12:11 pm

Re: modbusTCP обработка данных побитно

Сообщение Генератор зла » Чт мар 29, 2012 11:30 am

Черемис писал(а):Неужели нету иного пути?

Черемис писал(а):Реализовать систему алармов, событий по битно не реально и не удобно.

Система алармов и событий - TagName Dictionary. А там теги. Какой ещё путь нужен?
Vita est dolor.
Генератор зла
 
Сообщения: 2860
Зарегистрирован: Вс янв 23, 2011 5:08 pm

Re: modbusTCP обработка данных побитно

Сообщение Черемис » Чт мар 29, 2012 1:25 pm

Сейчас в application прописал
V1_int_open = V1.00; V1_out_open =V1.01; V1_remote = V1.02; V1_out_open = V1.03; V1_out_close = V1.04;
V2_int_open = V2.00; V2_out_open =V2.01; V2_remote = V2.02; V2_out_open = V2.03; V2_out_close = V2.04;
V3_int_open = V3.00; V3_out_open =V3.01; V3_remote = V3.02; V3_out_open = V3.03; V3_out_close = V3.04;
V4_int_open = V4.00; V4_out_open =V4.01; V4_remote = V4.02; V4_out_open = V4.03; V4_out_close = V4.04;
V5_int_open = V5.00; V5_out_open =V5.01; V5_remote = V5.02; V5_out_open = V5.03; V5_out_close = V5.04;
V6_int_open = V6.00; V6_out_open =V6.01; V6_remote = V6.02; V6_out_open = V6.03; V6_out_close = V6.04;
V10_int_open = V10.00; V10_out_open =V10.01; V10_remote = V10.02; V10_out_open = V10.03; V10_out_close = V10.04;
V11_int_open = V11.00; V11_out_open =V11.01; V11_remote = V11.02; V11_out_open = V11.03; V11_out_close = V11.04;
V12_int_open = V12.00; V12_out_open =V12.01; V12_remote = V12.02; V12_out_open = V12.03; V12_out_close = V12.04;
V17_int_open = V17.00; V17_out_open =V17.01; V17_remote = V17.02; V17_out_open = V17.03; V17_out_close = V17.04;
V18_int_open = V18.00; V18_out_open =V18.01; V18_remote = V18.02; V18_out_open = V18.03; V18_out_close = V18.04;
V19_int_open = V19.00; V19_out_open =V19.01; V19_remote = V19.02; V19_out_open = V19.03; V19_out_close = V19.04;
V20_int_open = V20.00; V20_out_open =V20.01; V20_remote = V20.02; V20_out_open = V20.03; V20_out_close = V20.04;
V21_int_open = V21.00; V21_out_open =V21.01; V21_remote = V21.02; V21_out_open = V21.03; V21_out_close = V21.04;
V22_int_open = V22.00; V22_out_open =V22.01; V22_remote = V22.02; V22_out_open = V22.03; V22_out_close = V22.04;
Вот мне это нужно оптимизировать

Где V1 и.т.п это теги ввода\вывода
А V1_int_open и т.п. это теги на которые прописаны алармы.
Черемис
 
Сообщения: 15
Зарегистрирован: Ср мар 28, 2012 12:11 pm

Re: modbusTCP обработка данных побитно

Сообщение Черемис » Чт мар 29, 2012 3:52 pm

"с управление ситуация такая - в первом регистре на чтение лежат входа с 0ого по 5й бит. а на запись -1 регистр это выхода, соответственно 0ой и 1й бит" - вот что мне написали про контроллер с которым вожусь.
На какой бит нужно отправить 1, что бы он записался при такой расскладки?
Черемис
 
Сообщения: 15
Зарегистрирован: Ср мар 28, 2012 12:11 pm

Re: modbusTCP обработка данных побитно

Сообщение Генератор зла » Чт мар 29, 2012 5:01 pm

Черемис писал(а):V1_int_open = V1.00; V1_out_open =V1.01; V1_remote = V1.02; V1_out_open = V1.03; V1_out_close = V1.04;

Посудите сами. Вы описываете 6 тегов: V1 и 5 V1_
А могли бы описать 5 тегов Io Discrete и работать с ними, сэкономив теги InTouch-а и облегчив себе жизнь.
Черемис писал(а):На какой бит нужно отправить 1, что бы он записался при такой расскладки?

Надо описать в FSGateway ещё один адрес (его должен выдать программист контроллера), например 40002, в InTouch создать тег V1_1 и обращаться к V1_1.00, V1_1.01
Vita est dolor.
Генератор зла
 
Сообщения: 2860
Зарегистрирован: Вс янв 23, 2011 5:08 pm

Re: modbusTCP обработка данных побитно

Сообщение Черемис » Чт мар 29, 2012 5:49 pm

Генератор зла писал(а):Посудите сами. Вы описываете 6 тегов: V1 и 5 V1_
А могли бы описать 5 тегов Io Discrete и работать с ними, сэкономив теги InTouch-а и облегчив себе жизнь.
Согласен, так было бы проще, но как это сделать если они сидят на 1-ом адресе.
Генератор зла писал(а): Надо описать в FSGateway ещё один адрес (его должен выдать программист контроллера), например 40002, в InTouch создать тег V1_1 и обращаться к V1_1.00, V1_1.01

так и реализовано, но все равно спс. Хоть с какого спросить было понятно))
Черемис
 
Сообщения: 15
Зарегистрирован: Ср мар 28, 2012 12:11 pm

Re: modbusTCP обработка данных побитно

Сообщение Генератор зла » Чт мар 29, 2012 6:00 pm

Черемис писал(а):Согласен, так было бы проще, но как это сделать если они сидят на 1-ом адресе.

Попросить/заставить программиста контроллера выдать 5 адресов вместо 1.
Vita est dolor.
Генератор зла
 
Сообщения: 2860
Зарегистрирован: Вс янв 23, 2011 5:08 pm

Re: modbusTCP обработка данных побитно

Сообщение Черемис » Пт мар 30, 2012 9:08 am

К сожалению на этом этапе уже невозможно перезалить все прошивки на контроллеры. А лишние теги готов оплатить заказчик. Так как насчет алгоритма который бы выполнял однотипные операции разбивки тега на подтеги, а не так как сейчас реализовано.
Черемис
 
Сообщения: 15
Зарегистрирован: Ср мар 28, 2012 12:11 pm

Re: modbusTCP обработка данных побитно

Сообщение Генератор зла » Пт мар 30, 2012 11:38 am

Думать надо...
А некогда :(
Vita est dolor.
Генератор зла
 
Сообщения: 2860
Зарегистрирован: Вс янв 23, 2011 5:08 pm

Re: modbusTCP обработка данных побитно

Сообщение Генератор зла » Пт мар 30, 2012 9:49 pm

Ну, типа:
Application (While running, 1000 ms)
DIM i as Integer;
DIM Str as Message;

for i=1 to 100
Str = "V"+StringFromIntg(i,10);
V_Ind.Name = Str;
V_Int_Open_Ind.Name = Str+"_int_open";
V_Out_Open_Ind.Name = Str+"_out_open";
V_Remote_Ind.Name = Str+"_remote";
V_Out_Open_Ind.Name = Str+"_out_open";
V_Out_Close_Ind.Name = Str+"_out_close";
V_Int_Open_Ind = V_Ind.00;
V_Out_Open_Ind = V_Ind.01;
V_Remote_Ind = V_Ind.02;
V_Out_Open_Ind = V_Ind.03;
V_Out_Close_Ind = V_Ind.04;
next;

Это так, первичный полёт фантазии. А фантазия у меня - та ещё...
Vita est dolor.
Генератор зла
 
Сообщения: 2860
Зарегистрирован: Вс янв 23, 2011 5:08 pm

Re: modbusTCP обработка данных побитно

Сообщение Черемис » Ср апр 11, 2012 2:49 pm

Ну это то же самое что и у меня было в первом посту.
Исходные данные:
I/O tegineger - V1, V2, V3....V25
memory Discret - V1_open, V1_close .....V25_ ...
Косвенный тег - nomerValve, int_open, int_close
аргумент QuickFunction - tagIO - message
nomerValve.Name = tagIO;
int_open.Name = tagIO + "_int_open";
int_close.Name = tagIO + "_int_close";

int_open.Value = nomerValve.00;
int_close.Value = nomerValve.01;

Насколько я понял значению косвенного тега нельзя присвоить значение другого косвенного тега в quickFunction там и без того ссылочных данных хватает, но скорее ошибаюсь. Может быть на тот момент у меня в другом месте были проблемы. Сейчас исправлять ничего не буду, проект на стадии завершении и application загружен, но терпимо. Вот размышляю как организовать разграничение доступа к кнопкам и в алармах что бы писало, кто что юзает. Ткните пожалуйста в документацию про это, наверника есть стандартные схемы, не хочу придумывать велосипед.
Черемис
 
Сообщения: 15
Зарегистрирован: Ср мар 28, 2012 12:11 pm

Re: modbusTCP обработка данных побитно

Сообщение Генератор зла » Ср апр 11, 2012 4:11 pm

Черемис писал(а):Ткните пожалуйста в документацию про это, наверника есть стандартные схемы, не хочу придумывать велосипед.

InTouch-Help-Security
Vita est dolor.
Генератор зла
 
Сообщения: 2860
Зарегистрирован: Вс янв 23, 2011 5:08 pm


Вернуться в Другое

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 39

cron