Страница 111 из 250

Re: EasyBuilder - Скорая помощь новичкам

СообщениеДобавлено: 15 фев 2019, 13:50
Number17
Попробовал установить быстрое отображение - не помогло. Задержка в отображении при включении панели для всех объектов, в том числе данные которых содержатся в панели.

Re: EasyBuilder - Скорая помощь новичкам

СообщениеДобавлено: 15 фев 2019, 14:03
Number17
Ещё дурацкий вопрос... На данный момент панель общается с устройством посредством Free Protocol. Здесь мне всё понятно: с помощью своих ФБ и макросов формирую пакет, выдаю его в линию с помощью ФБ OUTPORT, принимаю через INPORT, анализирую данные, распихиваю их по ячейкам памяти. Планирую сейчас подключить к панели модуль ввода данных со стандартным ModbusRTU. В настройках выбрал данный протокол, а что дальше? Как с этим работать? Самому формировать пакет и приняв ответ его анализировать? Должно же быть как то проще.
P.S. Кажется сообразил... через GetData, SetData работать надо. Панель будет сама формировать пакет исходя из выбранного протокола.

Re: EasyBuilder - Скорая помощь новичкам

СообщениеДобавлено: 15 фев 2019, 18:06
АЛМ
Лучше использовать GetDataEx, SetDataEx. Тогда при отсутствии связи макрос не будет прерываться. И еще в макросе используйте проверку на ошибку получения или передачи.

Re: EasyBuilder - Скорая помощь новичкам

СообщениеДобавлено: 18 фев 2019, 11:26
Number17
АЛМ писал(а): И еще в макросе используйте проверку на ошибку получения или передачи.

Это обязательно.

Re: EasyBuilder - Скорая помощь новичкам

СообщениеДобавлено: 18 фев 2019, 14:06
Number17
Поясните про типы адресов, рассматриваем протокол ModbusRTU:
3x
3x_MAX1W
3x_MAX2W
3x_Double
4x
4x_MAX1W
4x_MAX2W
4x_Double
4x_32Bit
5x
6x
0x_single_coil
В документации не нашёл никакого описания. То что 3x, 4x, 5x, 6x - эти обозначения как то соответствуют функциям Modbus (0х03, 0х04 и т.д)?
Или это что то иное? Где почитать про это всё?

Второй вопрос: Имеем ФБ GetErr(), получает код ошибки, а где описано соответствие кодов ошибкам?

Re: EasyBuilder - Скорая помощь новичкам

СообщениеДобавлено: 18 фев 2019, 17:06
VanMo
Описание регистров есть в описании на драйвер: http://www.rusavtomatika.com/upload_files/drivers/MODBUS_RTU.pdf
Названия регистров к функциям не имеют отношения.
Про коды ошибок можно почитать в мануале в главе 22.3.21. Communication Error Codes.

Re: EasyBuilder - Скорая помощь новичкам

СообщениеДобавлено: 22 фев 2019, 13:15
Val
Здравствуйте, у меня проблема, есть сигнальная панель с надписью и заполненный журнал сигналов/событий
нужно сделать чтобы от битов (М0, М1, М2....) это название менялось.
Получилось сделать: надпись меняется но с бегущей строкой.
Можно ли как то остановить эту строку?
Или как это сделать?

Re: EasyBuilder - Скорая помощь новичкам

СообщениеДобавлено: 22 мар 2019, 12:47
NadinKa
Здравствуйте!
Подскажите пути реализации чтения из файла и записи в файл с последующей его передачей на другой источник.
Предполагается посыл запросов на ПЛК по ModBus, взятых из файла, и получение ответов от ПЛК с записью в файл.
Какими средствами это можно реализовать?
Допустим, что чтение из файла можно опустить путем занесения содержимого файла в список или базу рецептов, но ответы нужно куда-то и как-то записывать.
Быть может что-то не так думаю, с EasyBuilder работаю впервые, много непонятных моментов есть.

Re: EasyBuilder - Скорая помощь новичкам

СообщениеДобавлено: 25 мар 2019, 07:08
mcleon
Пытаюсь реализовать подсчет моточасов.
Для хранения часов использую RW.
Запись каждый час (не очень точно, но установку если и будут обесточивать, то не чаще раза в смену).
Считаю макросом секунды.
Код: Выделить всё
sub unsigned short count_seconds (unsigned short cntr_sec, unsigned int in_addr)
unsigned short cntr_seconds
unsigned int address, ledad
bool in_state = false

cntr_seconds = cntr_sec
address = in_addr
GetData(in_state, "MODBUS TCP/IP (Zero-based Addressing)", 6x_Bit, address, 1)
if in_state == true then
   cntr_seconds = cntr_seconds + 1
   
end if
return cntr_seconds
end sub

Потом часы
Код: Выделить всё
sub unsigned short count_hours(unsigned short cnt_seconds, unsigned short cntr_hours)
unsigned short motohours
   if cnt_seconds >= 3600 then
//   if cnt_seconds >= 10 then//3600 then
      motohours = cntr_hours + 1
   end if
return motohours
end sub


Потом для каждого аппарата (вакуумные насосы) считаю, сравниваю, выставляю аларм
Код: Выделить всё
GetData(read_seconds, "Local HMI", "DP1_seconds", 1)
GetData(read_hours, "Local HMI", "DP1_hours", 1)
addr = 200005
cntr_seconds = count_seconds(read_seconds, addr)
cntr_hours = count_hours(cntr_seconds, read_hours)
if cntr_hours > read_hours then
   SetData(cntr_hours, "Local HMI", "DP1_hours", 1)
   cntr_seconds = 0
end if
SetData(cntr_seconds, "Local HMI", "DP1_seconds", 1)

GetData(read_seconds, "Local HMI", "DP2_seconds", 1)
GetData(read_hours, "Local HMI", "DP2_hours", 1)
addr = 200006
cntr_seconds = count_seconds(read_seconds, addr)
cntr_hours = count_hours(cntr_seconds, read_hours)
if cntr_hours > read_hours then
   SetData(cntr_hours, "Local HMI", "DP2_hours", 1)
   cntr_seconds = 0
end if
SetData(cntr_seconds, "Local HMI", "DP2_seconds", 1)

SetData(cntr_hour - это сохранение в память RW
Собственно, проблема - секунды считаются раздельно, для каждого аппарата свои, это проверил выставлением флажков и индикацией секунд для всех аппаратов.
Если включен один насос, у него наработан очередной час, пишем в его РВ, но обновляются регистры всех аппаратов (пишется та же цифра, то есть наработка у всех одинаковая).
Тэги на регистры введены, как раз, чтобы не было путаницы. И регистры больше нигде не пользую.
Очевидно, неправильно пишу в энергонезависимую память. Но что я делаю не так?

Re: EasyBuilder - Скорая помощь новичкам

СообщениеДобавлено: 25 мар 2019, 15:55
mcleon
mcleon писал(а):Пытаюсь реализовать подсчет моточасов.
Для хранения часов использую RW.
DEL

Решено.
Убрал все действия с подпрограммами, просто прямо скопировал одинаковый код из подпрограмм для каждого аппарата, и всё стало работать как задумано.
Почему - не знаю. Может что-то с переменными-параметрами, передаваемыми в подпрограмму, неправильно делал.