Необходимо добавить в проект библиотеку Mx110Assistant.
Она там есть, я Ваш пример ковыряю если что.
Вот архив, поправьте пожалуйста мои ошибки. Делал в СП5.
А всё остальное как, нормально? Поправьте и выложите пожалуйста.
Интересует правильность формирования значений входов.
Подскажите, а в КДС2 тоже есть библиотека Mx110Assistant?
К сожалению, у меня сейчас нет возможности "править и выкладывать" - но я могу проконсультировать вас по skype.
В целом, пробежавшись по проекту, вижу две явных ошибки:
1. По дискретным модулям - входы 1-8 лежат в 1 байте, 9-16 - в нулевом (у вас же - наоборот).
2. С аналоговым модулем что-то странное, вы считываете 1 канал и потом пытаетесь получить данные по 3 каналам.
Нет, библиотека Mx110Assistant существует только для CODESYS 3.5.
Какие данные надо поправить, что бы получилось нормально?Цитата:
2. С аналоговым модулем что-то странное, вы считываете 1 канал и потом пытаетесь получить данные по 3 каналам.
Делаю опрос частотника через бибку, вроде и опрос идет но значения все одинаковые, понимаю что где-то скосячил , но не вижу ошибку:
ComConn1(enable:=TRUE,PortNum:=3,PortBaudrate:=192 00,PortParity:=0,PortStopBits:=1,PortByteSize:=8,
Port_Mode:=2(*0-rs232*),Port_ModeOn:=FALSE,Port_CloseOn:=FALSE,Han dle=>id_port,Done=>port_ok,ErrCode=>er_com1);
CASE step OF
0://Опрос регистра статуса
MRhR(Enable:=port_ok,Mode:=MB_RTU,DevAddr:=48,Firs tAddr:=RegAddr1,
Quantity:=1,ComHandle:=id_port,TimeOut:=T#100MS,Bu ffer:=bufferATV,Complete=>ok_op,
Exception=>er_op,ByteCnt=>);
IF ok_op AND er_op=0 THEN
ptr_x:=ADR(status);
ptr_x^:=BufferATV[1];
ptr_x:=ptr_x+1;
ptr_x^:=BufferATV[0];
MRIR(Enable:=FALSE,Buffer:=buffer1);step:=1;
ELSE MRIR(Enable:=FALSE,Buffer:=buffer1);error_opr:=MRI R.Exception;step:=1;
END_IF
1://Опрос регистра тока
MRIR(Enable:=port_ok,Mode:=MB_RTU,DevAddr:=48,Firs tAddr:=RegAddr2,
Quantity:=1,ComHandle:=id_port,TimeOut:=T#100MS,Bu ffer:=bufferATV,Complete=>ok_op,
Exception=>er_op,ByteCnt=>);
IF ok_op AND er_op=0 THEN
Bytes_word1.mas_byte[1]:=BufferATV[0];
Bytes_word1.mas_byte[0]:=BufferATV[1];
tok:=Bytes_word1.var_word;
MRIR(Enable:=FALSE,Buffer:=buffer1);step:=2;
ELSE MRIR(Enable:=FALSE,Buffer:=buffer1);error_opr:=MRI R.Exception;step:=2;
END_IF
2://Опрос регистра напряжения
MRIR(Enable:=ComConn1.Done,Mode:=MB_RTU,DevAddr:=4 8,FirstAddr:=RegAddr3,
Quantity:=1,ComHandle:=id_port,TimeOut:=T#100MS,Bu ffer:=bufferATV,Complete=>ok_op,
Exception=>er_op,ByteCnt=>);
IF ok_op AND er_op=0 THEN
Bytes_word1.mas_byte[1]:=BufferATV[0];
Bytes_word1.mas_byte[0]:=BufferATV[1];
volt:=Bytes_word1.var_word;
MRIR(Enable:=FALSE,Buffer:=buffer1);step:=3;
ELSE MRIR(Enable:=FALSE,Buffer:=buffer1);error_opr:=MRI R.Exception;step:=3;
END_IF
3://Опрос регистра наработки
MRIR(Enable:=ComConn1.Done,Mode:=MB_RTU,DevAddr:=4 8,FirstAddr:=RegAddr4,
Quantity:=1,ComHandle:=id_port,TimeOut:=T#100MS,Bu ffer:=bufferATV,Complete=>ok_op,
Exception=>er_op,ByteCnt=>);
IF ok_op AND er_op=0 THEN
Bytes_word1.mas_byte[1]:=BufferATV[1];
Bytes_word1.mas_byte[0]:=BufferATV[0];
narabot:=Bytes_word1.var_word;
MRIR(Enable:=FALSE,Buffer:=buffer1);step:=4;
ELSE MRIR(Enable:=FALSE,Buffer:=buffer1);error_opr:=MRI R.Exception;step:=4;
END_IF
4://Запись в регистр частоты
write1:=fregensy;
MWSR(Enable:=ComConn1.Done,Mode:=MB_RTU,DevAddr:=8 ,RegAddr:=16#219A,
Value:=write1,ComHandle:=id_port,TimeOut:=T#100MS, Complete=>ok_wr,Exception=>);
IF ok_wr THEN
MWSR(Enable:=FALSE,value:=0);step:=5;
ELSE MWSR(Enable:=FALSE,value:=0);error_wr:=MWSR.Except ion;step:=5;
END_IF
5://Запись в регистр частоты
write1:=stat_in;
MWSR(Enable:=ComConn1.Done,Mode:=MB_RTU,DevAddr:=8 ,RegAddr:=16#2135,
Value:=write1,ComHandle:=id_port,TimeOut:=T#100MS, Complete=>ok_wr,Exception=>);
IF ok_wr THEN
MWSR(Enable:=FALSE,value:=0);step:=0;
ELSE MWSR(Enable:=FALSE,value:=0);error_wr:=MWSR.Except ion;step:=0;
END_IF
END_CASE
да какой то мертвый сезон 2 день
СТР. 123 РИС 6.18, ОПРОС ТО ВРОДЕ И ИДЕТ НО ЛЕЗЕТ ХРЕНЬ ВСЯКАЯ И ПРИ ЧЕМ ОДИНАКОВАЯ ПО ВСЕМ РЕГИСТРАМ
Пересобрал на UniRead UniWrite заработало, что то не срослось у меня с бибкой Modbas))), разбираться сейчас времени нет, да не подскажите ТРМ202 сеть удерживает после запроса
Не подскажите кому написать в техподдержку
Можно просто написать на support@owen.ru
Спасибо за информацию
Всё читать не стал, может кто-то уже заметил и написал, но на стр 9 с таблицей функций перепутаны описании функций 03 и 04 (я целый день потратил, пытаясь прочитать входные регистры не той функцией).
http://www.owen.ru/catalog/codesys_v3/80224381
Пакет "Модули Мx110".
Модуль МВ110-16Д + СПК105. Работаю через шаблоны. MV110_16D_DN.rCounterX не хочет перезаписывать счётчик. Чтение входов и значений регистров счётчика проходит без проблем. В чём может быть дело?
Эта функция используется для обнуления счетчика. Вы пытаетесь записать какое-то отличное от нуля значение?
Для обнуления счетчика необходимо записать в wCounterX любое значение, отличное от текущего, а на следующем цикле - записать в него 0.
Здравствуйте, уважаемые форумчане!
Меня зовут Павел.
У меня к Вам вопрос: как мне программно связать датчики ПВТ100(5 шт.) с СПК110 по Modbus RTU?
Что уже я сделал:
1) в СПК110 я добавил устройство Modbus_COM;
2) для устройства Modbus_COM я вставил устройство Modbus_Master_COM_Port;
3) в устройстве Modbus_Master_COM_Port я добавил устройство Modbus_Slave_COM_Port
4) для устройства Modbus_Slave_COM_Port я добавил два канала:
а) имя(Chanel1), тип доступа(Read Input Registers(код функции 04)), триггер(CYCLIC, t#100ms), сдвиг READ(16#0102), длина(1) - для считывания показаний температуры
б) имя(Chanel2), тип доступа(Read Input Registers(код функции 04)), триггер(CYCLIC, t#100ms), сдвиг READ(16#0103), длина(1) - для считывания показаний влажности
Что делать дальше?
Как я понял эти два канала Chanel1 и Chanel2 я сделал только для одного датчика с сетевым номером 16(первый Х до знака # в выражении16#0102)?
Может быть для каждого датчика нужно сделать по 2 канала(канал для температура и канал для влажности) с соответствующими этим датчикам сетевыми номерами? Тогда должно будет получиться 10 каналов для 5-ти датчиков?
Это была первая линия романа.
Теперь вопрос по второй части:
у меня на экране СПК110 для каждого датчика будут отдельные места для вывода показаний отдельно температуры и отдельно влажности.
Вопрос: как мне из одного датчика вытащить два показания? (может быть это сделать как-то с помощью регистров: т.е. объявить 10 разных переменных и в каждую из объявленных переменных сделать запись своего отдельного регистра, а уже потом эти переменные присвоить к текстовым полям(созданным для вывода температур и влажностей)?
Скрины рабочего экрана прикладываю.
Вложение 27549 - настройка связи по Modbus
Вложение 27550 - программа PLC_PRG
Настройка связи по Modbus.jpg - настройка связи по Modbus
Программа PLC_PRG.jpg - программа PLC_PRG
Жду ответа.
Заранее, большое спасибо за помощь и пояснение сложным моментов!
1. 16 - это не адрес, а система счисления, в которой записывается номер регистра. Адрес задается на вкладке Общее. Один компонент Modbus_Slave_COM_Port соответствует одному устройству (в вашем случае датчику) - так что вам потребуется добавить 5 экземпляров с разными адресами и одинаковой настройкой опрашиваемых регистров. Не забывайте про Вкл. 2 для параметра Всегда обновлять переменные (вкладка соотнесения входов-выходов). И поменяйте функцию Modbus на 03 (см. инструкцию на датчик).
2. После п. 1 у вас будет десять параметров, которые вы сможете отобразить на дисплее. Не забывайте, что их предварительно необходимо поделить на 100 (см. инструкцию на датчик).
3. В текущих прошивках СПК тренды не поддерживаются и работать не будут.
Спасибо за ответ, Евгений!
И ещё сразу Вам один вопрос: какую прошивку мне нужно будет использовать для СПК110 для того чтобы в СПК110 работали тренды?
И ещё один момент, Евгений:
получается, что мне, для моего случая, вообще не нужно писать программу в PLC_PRG, скрин которой я прикрепил к своему первому вопросу?
А для каких-либо других панелей ОВЕН такая прошивка уже существует?
Не уверен, что получится обойтись вообще без программы - как уже упоминал, надо будет конвертировать считанные значения в REAL и делить на 100. Но то присвоение, которое на вашем скрине - не нужно.
Официальной прошивки с трендами не существует, есть экспериментальные версии для СПК207 - но только для тестирования, на объектах ее использовать нельзя.
http://www.owen.ru/forum/showthread.php?t=22175
Евгений, странно как-то получается: target-файлы на СПК110 с "Трендами" на панели управления есть, а рабочих заводских прошивок на СПК110 что-бы тренды работали ещё нет?
Таргет-файлы не определяют набор доступных компонентов для создания проекта. Точно также вы можете добавить Modbus TCP, несмотря на то, что у СПК110 нет Ethernet-порта.
Поскольку обсуждаемые вопросы уже вышли за рамки Modbus, прошу при необходимости задавать их в соответствующих темах.