PDA

Просмотр полной версии : СП310 + МУ110-16Р, зажигаем лампочку по температуре



Алексей Скрынников
25.05.2017, 08:24
Доброго времени суток!
Читал похожую тему но не нашел нужного ответа :(

Задача проста. При достижении определенной температуры, панель должна включить выход на МУ110-16Р (лампочку).

1. Попробовал просто через кнопку. Натравил ее на нужный регистр. Нажимаю... нажимается... лампочка загорается(физически). Но через 1-2 сек тухнет. Вычитал что там надо время опроса модуля поставить в 0, но не найду где :(
2. Написал макрос:
DWORD Value = 0; //Объявляю и инициализирую переменную нулем

Read(PLC, 100, MODBUS_RTU_REG_4X, 4, 0, TYPE_DWORD, &Value); //Считаю значение температуры с модуля МВ110-8А

*(DWORD*)(PSW+400)=Value; //Записываю полученное значение в регистр панели (для проверки считывания)

if (Value < 7) //Проверяю что значение температуры меньше 7 градусов
{
Write(PLC, 105, MODBUS_RTU_BIT_0X, 0, 0, TYPE_BIT, 1); //Записываю бит "1" в МУ110-16Р
}
else //Иначе
{
Write(PLC, 105, MODBUS_RTU_BIT_0X, 0, 0, TYPE_BIT, 0); //Записываю бит "0" в МУ110-16Р
}
Вывожу показания с регистра PSW400 на экран. Все отлично показывает. А модуль упорно молчит. Вместо записи на модуль сразу, пробовал менять бит PSB280 командами SetPSB(280) и ResetPSB(280). Команды не выполняются(


Собственно вопрос, что я не так делаю в обоих случаях?

Евгений Кислов
25.05.2017, 08:43
Во-первых, вам нужно объявить переменную как float.




float Value = 0.0;

Read(PLC, 100, MODBUS_RTU_REG_4X, 4, 0, TYPE_DWORD, &Value); //Считаю значение температуры с модуля МВ110-8А

if (Value < 7.0) //Проверяю что значение температуры меньше 7 градусов
{
// какое-то действие
}
else //Иначе
{
// какое-то действие
}





Прикладываю пример реализации (используется память панели).


Во-вторых, запись в модуль осуществляется функцией 15 (отдельные выходы) или 16 (маска).
Write и Writes в данном случае не подойдут.
Реализации описана в статье, на сайте доступен пример (раздел ПО, примеры и инструкции):
http://www.owen.ru/uploads/aip_47_sait_kislov_36-37.pdf

Трофимов Артем
25.05.2017, 10:58
Доброго времени суток!
Читал похожую тему но не нашел нужного ответа :(

Задача проста. При достижении определенной температуры, панель должна включить выход на МУ110-16Р (лампочку).

1. Попробовал просто через кнопку. Натравил ее на нужный регистр. Нажимаю... нажимается... лампочка загорается(физически). Но через 1-2 сек тухнет. Вычитал что там надо время опроса модуля поставить в 0, но не найду где :(

Собственно вопрос, что я не так делаю ?



проверьте настройку модуля 16Р. у него есть параметр сетевых настроек - максимальный сетевой таймаут. похоже, что у Вас там установлено 1 или 2 секунды. если за это время не приходят модулю повторно посылки - он переводит выходы в безопасное состояние, которые по умолчанию все выключены.

Алексей Скрынников
25.05.2017, 16:00
Запустил систему.

Как и посоветовал мне Евгений Кислов в скайпе, по первому вопросу действительно неправильно указал поведение кнопки.
Настроил просто: 105 адрес, регистр 0, записываемое значение 1.

По второму вопросу все получилось.
Код примерно такой:
float Value = 0; //Объявляю и инициализирую переменную нулем
Read(PLC, 100, MODBUS_RTU_REG_4X, 4, 0, TYPE_DWORD, &Value); //Считаю значение температуры с модуля МВ110-8А и записываю значение в переменную Value

if (Value < 7) //Проверяю что значение температуры меньше 7 градусов
{
Write(PLC, 105, MODBUS_RTU_BIT_0X, 0, 0, TYPE_BIT, 1); //Записываю бит "1" в МУ110-16Р
}
else //Иначе
{
Write(PLC, 105, MODBUS_RTU_BIT_0X, 0, 0, TYPE_BIT, 0); //Записываю бит "0" в МУ110-16Р
}
Все заработало на ура. Команда Write отлично отрабатывает.