1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Передача данных между портами панели оператора

Панели оператора F, FE, FPad и FlexSCADA

Модераторы: Глоб.модераторы, специалисты Flexem

Ответить

Автор темы
DimaDrobot
здесь недавно
здесь недавно
Сообщения: 32
Зарегистрирован: 27 июн 2023, 09:11
Имя: Дмитрий
Страна: Россия
город/регион: Екатеринбург / Свердловская область
Поблагодарили: 1 раз

Передача данных между портами панели оператора

Сообщение DimaDrobot »

Добрый день. А есть какое-то руководство по созданию проектов для HMI панелей Flexem в FStudio?

На данном этапе не могу разобраться как сделать макрос, чтобы панель в режиме Мастера читала данные адреса (например 12306) с устройства слейв по COM2, записывала значение во внутреннюю переменную (например с адресом 50), а потом в режиме слейв через COM1 передавала эти данные на верхний уровень.
Отдельно com1 и Com2 настроены. Панель видит данные с устройства, а на компьютере я вижу значение в цифровом поле, которое задаю на HMI.

se_sib
специалист по FLEXEM
специалист по FLEXEM
Сообщения: 315
Зарегистрирован: 14 дек 2015, 12:15
Имя: Евгений
Страна: Россия
город/регион: Краснодар
Благодарил (а): 7 раз
Поблагодарили: 84 раза

Передача данных между портами панели оператора

Сообщение se_sib »

DimaDrobot писал(а): 27 июн 2023, 09:20 Добрый день. А есть какое-то руководство по созданию проектов для HMI панелей Flexem в FStudio?

На данном этапе не могу разобраться как сделать макрос, чтобы панель в режиме Мастера читала данные адреса (например 12306) с устройства слейв по COM2, записывала значение во внутреннюю переменную (например с адресом 50), а потом в режиме слейв через COM1 передавала эти данные на верхний уровень.
Отдельно com1 и Com2 настроены. Панель видит данные с устройства, а на компьютере я вижу значение в цифровом поле, которое задаю на HMI.
Здравствуйте, по ссылке в начале темы есть "Руководство по работе с FStudio", правда пока только на английском языке.
Там же в папке "ПО" с дистрибутивом есть демо проекты от производителя.
Позже сделаю и добавлю свои примеры и инструкции для обучения.

Вашу задачу можно реализовать проще через таблицу сопоставления адресов(Address Mapping)
т.е. уже есть штатный инструмент чтобы перекладывать данные из порта на порт.
1) COM2 у нас сконфигурирован как Master Modbus RTU
2) На COM1(Slave) активируем функцию Address Mapping и набиваем таблицу переменных с указанием с какого интерфейса и по какому адресу брать данные.
Master Com2.JPG
Address Mapping COM1.JPG

p.s. Я стараюсь не использовать прямую адресацию к регистрам, а создавать таблицу переменных с символьными имена и привязывать к объектам переменные по имени.
а) В таком случае вы всегда можете поменять адрес для переменной в таблице
б) Есть инструмент для импорта/экспорта переменных.
AddressLabel.JPG
BindingByName.JPG
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Автор темы
DimaDrobot
здесь недавно
здесь недавно
Сообщения: 32
Зарегистрирован: 27 июн 2023, 09:11
Имя: Дмитрий
Страна: Россия
город/регион: Екатеринбург / Свердловская область
Поблагодарили: 1 раз

Передача данных между портами панели оператора

Сообщение DimaDrobot »

Добрый день. Спасибо за ответ.

Делаю по Вашей инструкции если включаю AdressMaping в настройках COM1 то у меня тогда комп не видит панель . программа ошибку выдает 129/130

У меня Com1 rs232,а COM2 485. Это как то может влиять на адрес мапинг?

Если отключаю адрес мапинг то комп видит панель и даже читает данные из адреса цифрового окна то что на панели задаю.

Адресную метку создал, и создал цифровой дисплей со ссылкой на адресную меткую На панели он копирует параметр из одного окна в другой, а как на комп его вытащить так и не пойму.
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Автор темы
DimaDrobot
здесь недавно
здесь недавно
Сообщения: 32
Зарегистрирован: 27 июн 2023, 09:11
Имя: Дмитрий
Страна: Россия
город/регион: Екатеринбург / Свердловская область
Поблагодарили: 1 раз

Передача данных между портами панели оператора

Сообщение DimaDrobot »

Добрый день. Подскажите пожалуйста, есть ли какие-то мысли по поводу моей задачи?

se_sib
специалист по FLEXEM
специалист по FLEXEM
Сообщения: 315
Зарегистрирован: 14 дек 2015, 12:15
Имя: Евгений
Страна: Россия
город/регион: Краснодар
Благодарил (а): 7 раз
Поблагодарили: 84 раза

Передача данных между портами панели оператора

Сообщение se_sib »

DimaDrobot писал(а): 29 июн 2023, 10:01 Добрый день. Подскажите пожалуйста, есть ли какие-то мысли по поводу моей задачи?
Это не должно зависеть от интерфейса, хотя я сам не тестировал с RS232, нет конвертера под рукой.
Учитывайте адресацию переменных и адреса устройств.

Как пример, панель читает переменную из ПЛК с адресом 11 по Modbus TCP.
Эта переменная привязывается к Modbus RTU серверу панели и теперь доступна по адресу 1.
Т.е. с ПК мы обращаемся к переменной с адресом 1.
AddressMapping.JPG
У вас нет необходимых прав для просмотра вложений в этом сообщении.

se_sib
специалист по FLEXEM
специалист по FLEXEM
Сообщения: 315
Зарегистрирован: 14 дек 2015, 12:15
Имя: Евгений
Страна: Россия
город/регион: Краснодар
Благодарил (а): 7 раз
Поблагодарили: 84 раза

Передача данных между портами панели оператора

Сообщение se_sib »

DimaDrobot писал(а): 29 июн 2023, 10:01 Добрый день. Подскажите пожалуйста, есть ли какие-то мысли по поводу моей задачи?
Второй способ это создать периодическую задачу в свойствах окна для передачи значений между переменными.
-Открываете свойства окна
-выбираете вкладку "Синхронная передача данных"
-нажимаете кнопку "Добавить"
-Открывается окно "Пункт передачи данных", на вкладке "Вызов и останов" настраиваете период вызова
на вкладке "Передача данных" выбираете с какой в какую переменную данные перекладывать.

Ну и третий вариант скрипты, тоже не сильно сложно, но не имеет смысла, если не нужно никаких преобразований, условий....
да и первые два варианта наиболее просты.
TransferData.JPG
У вас нет необходимых прав для просмотра вложений в этом сообщении.

teewoon
здесь недавно
здесь недавно
Сообщения: 20
Зарегистрирован: 27 сен 2023, 16:03
Имя: Илья
Страна: Беларусь
город/регион: Витебск
Благодарил (а): 2 раза
Поблагодарили: 6 раз

Передача данных между портами панели оператора

Сообщение teewoon »

Тоже как-то приспичило сделать панель как modbus-прокси. Т.е. периодически синхронизировать внутренние регистры с содержимым удаленного устройства (или нескольких), использовать их для построения картинки/интерфейса локально, и одновременно раздавать содержимое локальных регистров по другим линиям. Можно поиграть в регистратор, да. Например в таком конфиге:
Документ3.png
Ремап тут не очень. По сути - это перепрыгивание через внутренние регистры в направлении "туда". Да и лишний трафик. Вот если бы он еще умел перенаправлять и write - потоки...

С чтением вовнутрь проблем нет. Периодический трансфер или периодический скрипт. Самое больное - это когда содержимое локального регистра меняется и надо отослать изменения в первоисточник. Вот тут я приседал знатно и перепробовал всякое. Ключевой механизм - это то, что панель может среагировать на _изменение_ содержимого регистра и что-то сделать. Как-то внятно управлять этим сложно. Один из вариантов, и возможно единственный - это позволить механизму срабатывать, настроить обратную пересылку измененного значения, но управлять _количеством_ отсылаемых слов. Допустим, у нас регистр LW5 - он и на чтение и на запись. (ему соответствует удаленный регистр 4x5) Скажем, это будет уставка какого-нибудь регулятора. Для контроля пересылки, вводим дополнительно ему LW1005. Чисто служебный регистр. Далее настраиваем:
Документ4.png
Документ4_1.png
Документ4_2.png
скрипт периодической подгрузки данных (таймер в свойствах окна):

Код: Выделить всё

#include <macro.h>

int MacroMain()
{
	short remote_regs[10]; 	//LW0..9
	short local_regs[10];		//X4
	short update_cnts[10];	//LW1000..1009
	short i;

	// Here to add macro code.
	GetMem(remote_regs,@remote_regs@,0,20);	//10 регистров по 2 байта
	GetMem(local_regs,@local_regs@,0,20);
	GetMem(update_cnts,@update_cnts@,0,20);

	for(i=0;i<10;i++){
		if(local_regs[i]!=remote_regs[i])
			update_cnts[i] = 0;
//		else	
//			update_cnts[i] = 1;
	}
	SetMem(update_cnts,@update_cnts@,0,20);
	SetMem(remote_regs,@local_regs@,0,20);

	return 0;
}
Скрипт массово подгружает данные и проверяет на отличие содержимого. Это всё для того, чтобы панель по изменению содержимого не начала спамить обратно в контроллер и так по кругу. После холостого срабатывания события, оно само себе взведет адекватную длину отсылки, которая сработает в следующий раз. А следующее событие с изменением содержимого может быть спровоцировано как оператором, изменившим значение LW5, так и сторонним актором по другим интерфейсам (дублирующая панель, пульт, вышестоящая система.)

P.S.: Событие "по изменеию" - немножко волшебное. В том плане, что это оно взводится и всячески стремиться сработать. Причем момент трудно предсказать/отследить. Сбросить его можно только дав ему свершиться.

P.S.: Да, по-хорошему, скрипт и события "по изменению" надо пихать в Public - окно, чтоб работало всегда и везде. Но тут на вкус и задумку.

P.S.: ктати про ремап. По сути, это единственный способ оградить доступ master-устройств от бесконтрольного шляния по регистрам панели. Заворачивая их куда подальше от чувствительных областей.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ответить

Вернуться в «ЧМИ, SCADA»