PDA

Просмотр полной версии : CODESYS V3.5. Настройка обмена с другими устройствами (Modbus, ОВЕН, OPC и др.)



Страницы : [1] 2 3 4 5 6

Евгений Кислов
21.04.2016, 09:45
Добрый день, уважаемые коллеги.

Эта тема предназначена для обсуждения вопросов, связанных с настройкой обмена между контроллерами ОВЕН, программируемыми в среде CODESYS V3.5, и другими устройствами.

Наши контроллеры поддерживают следующие протоколы:


Modbus TCP/RTU/ASCII (Master/Slave) - настройка через нативные компоненты CODESYS, добавляемые в дерево проекта;
Modbus TCP/RTU/ASCII (Master/Slave) - настройка через библиотеку OwenCommunication (https://owen.ru/forum/showthread.php?t=31816) (расширенный функционал, управление обменом из кода);
OPC UA (Server) - настройка через нативный компонент CODESYS (Символьная конфигурация);
MQTT (Client) - настройка через одну из свободно распространяемых библиотек (https://owen.ru/forum/showthread.php?t=28167&p=269327&viewfull=1#post269329);
SNMP (Manager/Agent) - настройка через библиотеку OwenSnmp (https://owen.ru/forum/showthread.php?t=34308);
протоколы опроса распространенных электро- и теплосчетчиков (Меркурий, Энергомера и др.) - настройка через библиотеку OwenVendorProtocols (https://owen.ru/forum/showthread.php?t=34449);
протокол платформы умный дом Яндекс - через библиотеку OwenYandexHome (https://owen.ru/forum/showthread.php?t=35907);
http(s)/ftp/smtp - настройка через библиотеку CmpSysExec и вызовы утитилы cURL (примеры: http/ftp/smtp (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/08_Sockets/Example_CurlFeatures_3514v1_PLC210.projectarchive) , работа с API OwenCloud (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/08_Sockets/Example_OwenCloudApi_plc210_3514v1.projectarchive) , работа с API Telegram (https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/08_Sockets/Example_TelegramApi_3514v1.zip));
протокол ОВЕН (Master) - настройка через библиотеку OwenNet;
возможна реализация нестандартных протоколов обмена через библиотеку OwenCommunication (https://owen.ru/forum/showthread.php?t=31816) или стандартные библиотеки CODESYS.



В таблице ниже собрана документация, посвященная организации связи по протоколам Modbus, ОВЕН и нестандартным протоколам, а также опросу контроллеров с помощью OPC-серверов. Каждый документ содержит примеры, доступные для скачивания в формате .projectarchive.




Название документа
Версия
Ссылка


CODESYS V3.5. Протокол Modbus
3.2
скачать (https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Modbus_v3.2.pdf)


CODESYS V3.5. Примеры обмена c ПЛК110 [М02]
3.0
скачать (https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_ExamplesWithPlc110m02_v.3.0.pdf)


CODESYS V3.5. Протокол ОВЕН
2.1
скачать (https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_ProtocolOWEN_v2.1.pdf)


CODESYS V3.5. Протокол SNMP
2.1
скачать (https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Snmp_v2.1.pdf)


CODESYS V3.5. Реализация нестандартных протоколов
3.0
скачать (https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_UserProtocols_v.3.0.pdf)


CODESYS V3.5. Настройка обмена с верхним уровнем (OPC, SCADA, OwenCloud)
3.0
скачать (https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_OPC_v3.0.pdf)


CODESYS V3.5. Настройка связи между ПЛК
3.0
cкачать (https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_PlcCommunication_v3.0.pdf)


CODESYS V3.5. Реализация обмена через сокеты
3.0
скачать (https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Sockets_v3.0.pdf)


CODESYS V3.5. Библиотека OwenVendorProtocols
2.8
скачать (https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_OwenVendorProtocols_v2.8.pdf)


CODESYS V3.5. Библиотека OwenYandexHome
2.0
скачать (https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_OwenYandexHome_v2.0.pdf)


Архив документации (для старой линейки СПК1хх, СПК207)

перейти (https://ftp.owen.ru/CoDeSys3/11_Documentation/01_SPK/)







1. В компоненте Modbus RTU Master версии 3.5.7.0 не работает галочка Автопереподключение (Autoreconnect).

Статус: в версии 3.5.11.x галочка работает корректно.
При работе со старой линейкой СПК1хх/СП207 рекомендуется использовать версию компонента (3.5.5.0).

2. В компоненте Modbus TCP Slave Device версии 3.5.2.0 не поддержана работа с битами.

Статус: исправлено в версии компонента 3.5.11.x.

3. В компоненте Modbus RTU Slave Device версии 3.5.5.5 не поддержана работа с битами.

Статус: исправлено в версии компонента 3.5.11.x.

4. Модули МУ110-6У и МУ110-8И в некоторых ситуациях могут переставать отвечать на запросы мастера.

Статус: проблема решена в прошивках модулей версии 2.00 (https://owen.ru/product/moduli_analogovogo_vivoda_s_interfejsom_rs_485/documentation_and_software). Текущую версию прошивки можно посмотреть в Конфигураторе Mx110.

5. Модуль МВ110-2АС некорректно обрабатывает групповые запросы.

Статус: проблема решена в прошивках модулей версии 1.08 (https://owen.ru/product/moduli_analogovogo_vvoda_s_bistrimi_vhodami_s_inte rfejsom_rs_485/documentation_and_software). Текущую версию прошивки можно посмотреть в Конфигураторе Mx110.

6. При использовании Modbus TCP каждое slave-устройство должно иметь уникальный порт. При использовании шлюзов Modbus TCP/RTU, которые используют один порт и разные Unit ID , будет производится опрос только первого добавленного устройства.

Статус: исправлено в версии компонента 3.5.11.x.



1. Решение проблемы записи целых чисел P.min, P.max, P.nom, i.upr, i.min
https://owen.ru/forum/showthread.php?t=23897&p=351697&viewfull=1#post351697

Владимир Ситников
21.04.2016, 10:44
В документе SPK_Modbus_v.0.8.pdf много раз используется фраза "рисунок хорошо масштабируется", хотя по факту масштабируется плохо (т.е. картинка растровая).

В итоге "Рис. 5.9. Код программы COM2 (CFC)" читается тяжело/плохо.

Евгений Кислов
21.04.2016, 10:49
В документе SPK_Modbus_v.0.8.pdf много раз используется фраза "рисунок хорошо масштабируется", хотя по факту масштабируется плохо (т.е. картинка растровая).

В итоге "Рис. 5.9. Код программы COM2 (CFC)" читается тяжело/плохо.

Справедливо, с рисунком 5.9 действительно возникли определенные проблемы. Спасибо за замечание.

ASo
21.04.2016, 11:09
Пока вижу ляп на с.38..39 с модбас слэйв.

Евгений Кислов
21.04.2016, 11:20
Пока вижу ляп на с.38..39 с модбас слэйв.

Спасибо, увидел на с. 39 - вместо Modbus COM написано Device. На с. 38 тоже есть опечатка?

ASo
21.04.2016, 12:08
Скорее на с.40, таблица внизу.
1. Input Registers - это как раз запись из программы и только чтение из сети
Holding Registers - это только чтение из программы и запись/чтение из сети

2. Надо объяснить, что Input Registers отображаются в конфигурации как %QW, а Holding Registers отображаются в конфигурации как %IW.

3. Теперь надо объяснить, что такая конфигурация делает бессмысленным ее применение - не возможно редактировать значение переменной с панели и по сети. Для этого нужна библиотека ModbusSlave.

4. По поводу бибки ModbusSlave - надо придумать пример, как передавать такую переменную из п.3

В принципе, если Вы работаете на Компрессоре, можно встретится на следующей неделе, принесу свой пример.

Евгений Кислов
21.04.2016, 12:21
Скорее на с.40, таблица внизу.
1. Input Registers - это как раз запись из программы и только чтение из сети
Holding Registers - это только чтение из программы и запись/чтение из сети

2. Надо объяснить, что Input Registers отображаются в конфигурации как %QW, а Holding Registers отображаются в конфигурации как %IW.

3. Теперь надо объяснить, что такая конфигурация делает бессмысленным ее применение - не возможно редактировать значение переменной с панели и по сети. Для этого нужна библиотека ModbusSlave.

4. По поводу бибки ModbusSlave - надо придумать пример, как передавать такую переменную из п.3

В принципе, если Вы работаете на Компрессоре, можно встретится на следующей неделе, принесу свой пример.

Спасибо за замечания, все принял к сведению.
Работаю на компрессоре. Напишите в личку по этому поводу, пожалуйста.

rovki
21.04.2016, 12:36
Что бы остальные не поняли ,что вы работаете на компрессоре или тракторе - это территория завода ,где расположен головной офис ОВЕН ;) ,

Сергей0308
21.04.2016, 13:02
Что бы остальные не поняли ,что вы работаете на компрессоре или тракторе - это территория завода ,где расположен головной офис ОВЕН ;) ,

Не вижу ничего плохого(постыдного) работать на компрессоре или тракторе!!!

rovki
21.04.2016, 13:04
А кто говорил ,что это плохо ,работать на тракторе ???Просто дал пояснение ,что это географическое понятие (место) .

Эдуард_Н
21.04.2016, 13:10
На странице 26 указано выставить время между фреймами 20, а в примере 20-ка только у модулей 16R и 16D у 8А выставлено 200.

Евгений Кислов
21.04.2016, 13:16
На странице 26 указано выставить время между фреймами 20, а в примере 20-ка только у модулей 16R и 16D у 8А выставлено 200.

Спасибо, поправлю.

Эдуард_Н
22.04.2016, 07:38
Вопрос может не по теме, но всё же: У ОВЕНа много руководств по КДС3 и КДС2 и т.д. почему бы ОВЕНу не начать продавать все эти руководства в напечатанном виде, иной раз проще купить чем идти и распечатывать? Тем более если печать будет цветной.

Евгений Кислов
22.04.2016, 07:58
Вопрос может не по теме, но всё же: У ОВЕНа много руководств по КДС3 и КДС2 и т.д. почему бы ОВЕНу не начать продавать все эти руководства в напечатанном виде, иной раз проще купить чем идти и распечатывать? Тем более если печать будет цветной.

Конкретно мне сложно представить в каких случаях это может понадобиться. Электронная документация обладает рядом очевидных преимуществ:

1. Компактность (можно возить с собой на ноутбуке/флэшке/телефоне практически безграничное количество руководств, когда как с бумажными возникнет проблема).
2. Эргономичность (гиперссылки, возможность масштабировать картинки).
3. Доступность для актуализации (документация обновляется).

Я, честно говоря, уже не помню, когда последний раз держал в руках бумажную книгу, при том что постоянно что-то читаю.

Эдуард_Н
22.04.2016, 08:04
Я, честно говоря, уже не помню, когда последний раз держал в руках бумажную книгу, при том что постоянно что-то читаю.
Напрасно, в бумажной книге есть своя прелесть и нечто магическое.
Лично мне пришлось распечатывать несколько руководств по КДС3 для лучшего восприятия.

Евгений Кислов
22.04.2016, 08:10
Напрасно, в бумажной книге есть своя прелесть и нечто магическое.
Лично мне пришлось распечатывать несколько руководств по КДС3 для лучшего восприятия.

Согласен про магичность, про запах типографской краски и т.д., но остальные "конкретные" преимущества все же перевешивают эту эфемерность, на мой взгляд. Впрочем, мы немного отвлеклись от темы - так что, если вы не против, давайте на этом закончим дискуссию о печатной продукции.

Евгений Кислов
22.04.2016, 09:31
Поскольку ошибка в описании input и holding регистров, указанная вчера ASo, является принципиальной, документ обновлен до версии 0.81. Все остальные замечания также были отработаны.

жекон
27.04.2016, 13:55
Можно было бы добавить примеры работы с девайсами других производителей

Александр Приходько
28.04.2016, 01:31
Можно было бы добавить примеры работы с девайсами других производителей
Принцип не изменится. Стандартные средства CODESYS описаны. А особенности чужого оборудования описывать в нашу задачу не входило.
Если будет сильно востребовано, подумаем. Предлагайте примеры.

Александр Приходько
28.04.2016, 01:36
В целом хотелось бы понять документ понятен? Полезен? На сколько удобен такой принцип подачи материала? Остаются ли еще вопросы после прочтения?

Александр Приходько
04.05.2016, 02:41
1) забавно читается, что к недостаткам относится навыки программирования и знание работы интерфейсов
2) по поводуна этот протокол распространяются те же правила, нумерация адресов слейвов помещается в размерность байта, так что ограничение имеется, да и с мастерами тоже, всё зависит сколько клиентов может одновременно подключиться к слейву

capzap, Вы прекрасно знаете что большинство "программистов" это электронщики, КИПовцы и выходцы из других сфер. Многие о протоколах мало чего знают, еще больше не понимают как это работает на низком уровне. Вот поэтому мы стремимся упростить и работу с контроллерами. Это поможет нам привлекать людей разного уровня подготовки с разными знаниями. Возможно этот человек не понимает в протоколах, но отличный технолог. Для него глубокие познания в программировании не так важны и писать обмен на ассемблере ему не надо.. ) С помощью шаблонов он за 2 минуты осилит всю конфигурацию и дальше будет рисовать в CFC.

По второму замечанию акцент делался на то, что в RTU есть физические ограничения самой линии RS. Т.е. если надо подключить более 32 устройств нужен повторитель интерфейса. В TCP такого ограничения нет. Но верхний потолок действительно есть и он равен 255. При этом CODESYS крайние адреса 254, 255 не дает использовать. 0-адрес широковещательной рассылки.

Евгений в заслуженном отпуске. Когда появится, внесем уточнения.

жекон
05.05.2016, 06:19
Нарисовал программу опроса как в примере

com_2(enable:=TRUE,PortNum:=3,PortBaudrate:=19200, Port_Mode:=2,Port_ModeOn:=TRUE,Port_closeon:=FALSE );//Открытие портa
CASE step OF
0://Опрос модуля МК110-4ДН4Р(1)(адресс 8)
MK110_4dn_4R_inputs1(Handle:=com_2.Handle,Enabl:=c om_2.Done AND com_2.ErrCode=0,Addr:=8,
TimeOut:=T#500MS);
IF MK110_4dn_4R_inputs1.done THEN
IF MK110_4dn_4R_inputs1.wErrCode=0 THEN
dout1:=MK110_4dn_4R_inputs1.inp1;
dout2:=MK110_4dn_4R_inputs1.inp2;
dout3:=MK110_4dn_4R_inputs1.inp3;
dout4:=MK110_4dn_4R_inputs1.inp4;
END_IF;
MK110_4dn_4R_inputs1.Enabl:=FALSE;step:=1;
END_IF
1://Запись в модуль МК110-4ДН4Р(1)(адресс 8)
MK110_4dn_4R_outs1(Handle:=com_2.Handle, Enabl:=com_2.Done AND com_2.ErrCode=0, Addr:=8,
out1:=din1,out2:=din2,out3:=din3,out4:=din4,TimeOu t:=MK110_4dn_4R_inputs1.TimeOut);
IF MK110_4dn_4R_outs1.done THEN
MK110_4dn_4R_outs1.Enabl:=FALSE;step:=2;
END_IF
2://Опрос модуля МК110-4K.4Р(адресс 16)
MK110_4K_4R_inputs1(Handle:=com_2.Handle,Enabl:=co m_2.Done AND com_2.ErrCode=0,Addr:=16,
TimeOut:=T#500MS);
IF MK110_4K_4R_inputs1.done THEN
IF MK110_4K_4R_inputs1.wErrCode=0 THEN
dout5:=MK110_4K_4R_inputs1.inp1;
dout6:=MK110_4K_4R_inputs1.inp2;
dout7:=MK110_4K_4R_inputs1.inp3;
dout8:=MK110_4K_4R_inputs1.inp4
;END_IF
MK110_4K_4R_inputs1.Enabl:=FALSE;step:=3;
END_IF
3://Запись в модуль МК110-4K.4Р(адресс 16)
MK110_4K_4R_outs1(Handle:=com_2.Handle, Enabl:=com_2.Done AND com_2.ErrCode=0,Addr:=16,
out1:=din5,
out2:=din6,
out3:=din7,
out4:=din8,TimeOut:=MK110_4K_4R_inputs1.TimeOut);
IF MK110_4K_4R_outs1.done THEN
MK110_4K_4R_outs1.Enabl:=FALSE;step:=4;
END_IF
4://Опрос модуля МВ110-8ДФ(адресс 24)
MV110_8D_inputs1(Handle:=com_2.Handle,Enabl:=com_2 .Done AND com_2.ErrCode=0,Addr:=24,TimeOut:=T#500MS);
IF MV110_8D_inputs1.done THEN
IF MV110_8D_inputs1.wErrCode=0 THEN
dout9:=MV110_8D_inputs1.inp1;
dout10:=MV110_8D_inputs1.inp2;
dout11:=MV110_8D_inputs1.inp3;
dout12:=MV110_8D_inputs1.inp4;
dout13:=MV110_8D_inputs1.inp5;
dout14:=MV110_8D_inputs1.inp6;
dout15:=MV110_8D_inputs1.inp7;
dout16:=MV110_8D_inputs1.inp8;
END_IF
MV110_8D_inputs1.Enabl:=FALSE;step:=5;
END_IF
5://Опрос модуля МВ110-8А(адресс 32)
MV110_8A_inputs1(Handle:=com_2.Handle,Enabl:=com_2 .Done AND com_2.ErrCode=0,Addr:=32,TimeOut:=T#500MS);
IF MV110_8A_inputs1.done THEN
IF MV110_8A_inputs1.wErrCode=0 THEN
aout1:=MV110_8A_inputs1.inp1;
aout2:=MV110_8A_inputs1.inp2;
aout3:=MV110_8A_inputs1.inp3;
aout4:=MV110_8A_inputs1.inp4;
aout5:=MV110_8A_inputs1.inp5;
aout6:=MV110_8A_inputs1.inp6;
aout7:=MV110_8A_inputs1.inp7;
aout8:=MV110_8A_inputs1.inp8;
END_IF
MV110_8A_inputs1.Enabl:=FALSE;step:=6;
END_IF
6://Запись в модуль МУ110-8Р(адресс 40)
MY110_8R_outs1(Handle:=com_2.Handle,Enabl:=com_2.D one AND com_2.ErrCode=0,Addr:=40,TimeOut:=T#500MS,
out1:=din9,
out2:=din10,
out3:=din11,
out4:=din12,
out5:=din13,
out6:=din14,
out7:=din15,
out8:=din16);
IF MY110_8R_outs1.done THEN
MY110_8R_outs1.Enabl:=FALSE;step:=7;
END_IF
7://Чтение ТРМ202(адресс 48)
TRM_202_read1(Handle:=com_2.Handle,Enabl:=com_2.Do ne AND com_2.ErrCode=0,Modd:=,
Addr:=48,TimeOut:=T#500MS,ErCL:=,inp1=>aout9,inp2=>,ust1=>aout11,
ust2=>,out1=>aout10,out2=>,ges1=>aout12,ges2=>,wErrCode=>,done=>);
IF TRM_202_read1.done THEN
TRM_202_read1.Enabl:=FALSE;step:=8;
END_IF
8://Запись в ТРМ202(адресс 48)
TRM_202_write1(Handle:=com_2.Handle,Enabl:=com_2.D one AND com_2.ErrCode=0,Modd:=,Addr:=48,
TimeOut:=TRM_202_read1.TimeOut,ust1:=ain1,ust2:=,g es1:=ain2,ges2:=,ErCL:=,wErrCode=>,done=>);
IF TRM_202_write1.done THEN
TRM_202_write1.Enabl:=FALSE;step:=9;END_IF
9://Чтение АТВ312(адресс 54)
ATV312_read1(
Handle:=com_2.Handle,
Enabl:=com_2.Done AND com_2.ErrCode=0,
Modd:= ,
Addr:=54,
TimeOut:=T#500MS,
ErCL:= ,
status=>aout13,
freg=>aout14,
tok=>aout15,
volt=>aout16,
narab=>aout17,
eror=>aout18,
wErrCode=> ,
done=> );
IF ATV312_read1.done THEN
ATV312_read1.Enabl:=FALSE;step:=10;END_IF
10://Запись в АТВ312(адресс 54)
ATV312_write1(
Handle:=com_2.Handle,
Enabl:=com_2.Done AND com_2.ErrCode=0,
Modd:= ,
Addr:=54,
TimeOut:=ATV312_read1.TimeOut,
fr_w:=ain3,
st_w:=ain4,
ErCL:= ,
wErrCode=> ,
done=> );
IF ATV312_write1.done THEN
ATV312_write1.Enabl:=FALSE;step:=11;END_IF
11://Чтение МК110-4ДН4Р(2)(адресс 64)
MK110_4dn_4R_inputs2(Handle:=com_2.Handle,Enabl:=c om_2.Done AND com_2.ErrCode=0,Addr:=64,TimeOut:=T#500MS);
IF MK110_4dn_4R_inputs2.done THEN
IF MK110_4dn_4R_inputs2.wErrCode=0 THEN
dout17:=MK110_4dn_4R_inputs2.inp1;
dout18:=MK110_4dn_4R_inputs2.inp2;
dout19:=MK110_4dn_4R_inputs2.inp3;
dout20:=MK110_4dn_4R_inputs2.inp4;
END_IF;
MK110_4dn_4R_inputs2.Enabl:=FALSE;step:=12;
END_IF
12://Запись в модуль МК110-4ДН4Р(2)(адресс 64)
MK110_4dn_4R_outs2(Handle:=com_2.Handle, Enabl:=com_2.Done AND com_2.ErrCode=0, Addr:=64,
out1:=din17,out2:=din18,out3:=din19,out4:=din20,Ti meOut:=MK110_4dn_4R_inputs2.TimeOut);
IF MK110_4dn_4R_outs2.done THEN
MK110_4dn_4R_outs2.Enabl:=FALSE;step:=0;
END_IF
END_CASE
проходит один опрос и все встает http://www.owen.ru/forum/attachment.php?attachmentid=24296&stc=1 где накосячил не пойму

Евгений Кислов
05.05.2016, 08:39
0://Опрос модуля МК110-4ДН4Р(1)(адресс 8)
MK110_4dn_4R_inputs1(Handle:=com_2.Handle,Enabl:=c om_2.Done AND com_2.ErrCode=0,Addr:=8,
TimeOut:=T#500MS);
IF MK110_4dn_4R_inputs1.done THEN
IF MK110_4dn_4R_inputs1.wErrCode=0 THEN
dout1:=MK110_4dn_4R_inputs1.inp1;
dout2:=MK110_4dn_4R_inputs1.inp2;
dout3:=MK110_4dn_4R_inputs1.inp3;
dout4:=MK110_4dn_4R_inputs1.inp4;
END_IF;
MK110_4dn_4R_inputs1.Enabl:=FALSE;
step:=1;
END_IF


Вы присвоили что-то там входу ФБ. Но пока сам ФБ не вызван, это не имеет никакого значения. Надо делать так:


MK110_4dn_4R_inputs1(Enabl:=FALSE);

Ну или так:



MK110_4dn_4R_inputs1.Enabl:=FALSE
MK110_4dn_4R_inputs1();

жекон
05.05.2016, 08:50
0://Опрос модуля МК110-4ДН4Р(1)(адресс 8)
MK110_4dn_4R_inputs1(Handle:=com_2.Handle,Enabl:=c om_2.Done AND com_2.ErrCode=0,Addr:=8,
TimeOut:=T#500MS);
IF MK110_4dn_4R_inputs1.done THEN
IF MK110_4dn_4R_inputs1.wErrCode=0 THEN
dout1:=MK110_4dn_4R_inputs1.inp1;
dout2:=MK110_4dn_4R_inputs1.inp2;
dout3:=MK110_4dn_4R_inputs1.inp3;
dout4:=MK110_4dn_4R_inputs1.inp4;
END_IF;
MK110_4dn_4R_inputs1.Enabl:=FALSE;
step:=1;
END_IF


Вы присвоили что-то там входу ФБ. Но пока сам ФБ не вызван, это не имеет никакого значения. Надо делать так:


MK110_4dn_4R_inputs1(Enabl:=FALSE);

Ну или так:



MK110_4dn_4R_inputs1.Enabl:=FALSE
MK110_4dn_4R_inputs1();

С вашего примера срисововал)))))))))

Евгений Кислов
05.05.2016, 08:54
С вашего примера срисововал)))))))))

Скриншот, приведите, пожалуйста, с которого срисовывали.

Владимир Ситников
05.05.2016, 09:40
Скриншот, приведите, пожалуйста, с которого срисовывали.

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

Евгений Кислов
05.05.2016, 09:48
Можно сделать так, чтобы с примеров копировать можно было?
Т.е. не картинкой примеры показывать, а текстом.

Копировать текстом можно из выложенных проектов CODESYS - скриншоты снимались именно с них.

Владимир Ситников
05.05.2016, 10:24
Копировать текстом можно из выложенных проектов CODESYS - скриншоты снимались именно с них.

Я прекрасно понимаю, что скриншоты снимались с codesys, и что есть отдельные файлы.
Но вы поймите, что показывать код, с которого нельзя скопировать это ай как нехорошо.

Гораздо удобнее будет, если прямо из документа можно будет скопировать.
Листингов не так много.

А польза следующая:
1) Нашёл в документе раздел -- скопировал, работает. Открывать и ещё раз искать в "спец проекте" уже не нужно.
2) Можно поиском найти фрагмент кода. По картинке, сами знаете, ctrl+f не работает.
3) Шрифты будут выглядеть на порядок лучше, без замыливания, которое дают картинки. Не удивлюсь, если кто-нибудь догадается распечатать этот документ, и как "код-картинкой" будет выглядеть на печати сказать сложно. Вряд ли хорошо.
4) Последовательность действий в духе "стр 76 Добавьте в проект объединение с именем String_Word....Рис. 4.79. Объявление переменных объединения" будет гораздо проще выполнять. Сейчас надо смотреть на картинку и перерисовывать. Если бы можно было скопировать, то было бы гораздо проще (да и ошибок меньше)

Да, для CFC скопировать не получится, но те, кто выбрали CFC сами виноваты. А текстовые примеры очень даже можно и сделать "копируемыми".

Евгений Кислов
05.05.2016, 10:37
Пожелание понятно. Постараюсь реализовать в следующей версии.

ASo
05.05.2016, 12:02
Не проще выложить файлы проекта, дав ссылку в документе?

Евгений Кислов
05.05.2016, 12:11
Не проще выложить файлы проекта, дав ссылку в документе?

Так сейчас же так и сделано. Или я чего-то не уловил?

Евгений Кислов
05.05.2016, 13:00
ссылка конечно же есть, только зря Вы её оформили через принятие соглашения, у меня например после этого архив открывается как текст в браузере. :) делов то убрать лишнее в начале ссылки

Присутствие текста соглашения - это требование, предъявляемое к любым доступным для скачивания материалам, тут я ничего не могу поделать. По поводу проблемы с попыткой браузера открыть архив как текстовый файл - честно говоря, такое видел только у IE. Сам я использую Chrome, с ним проблемы возникают крайне редко.

Александр Приходько
05.05.2016, 13:12
Присутствие текста соглашения - это требование, предъявляемое к любым доступным для скачивания материалам, тут я ничего не могу поделать. По поводу проблемы с попыткой браузера открыть архив как текстовый файл - честно говоря, такое видел только у IE. Сам я использую Chrome, с ним проблемы возникают крайне редко.
Такая проблема уже была, поправляли. Пообщаемся с нашими web верстальщиками, возможно просто немного некорректную ссылку в документ положили.

vniko
12.05.2016, 11:12
Документ СПК.Modbus по-моему не просто полезен, но и самый важный при изучении СПК, ведь без способности связи с "внешним миром" СПК не интересен. Выражаю большую признательность автору, очень познавательный документ.
Описки и замечания: (красным выделены описки, в скобках пояснения)

Стр.7. В сети может присутствовать только одно master-устройство,
которое отсылает и принимает запросы подчиненных slave-устройств.
(т.е. получается, что слэйв отсылает мастеру запросы?)
Стр.7. …, время одного полного цикла опроса может значительно увеличит(ь)ся.
Стр.8. В сети могут также существовать специальные шлюзы (gateway), которые
предоставляют данные устройствам из сети TCP/IP доступ к устройствам, объединенным
последовательной линией связи или ведущему устройству с последовательным интерфейсом
доступ к сети TCP/IP.
Стр.21. Список переменных диагностики приведен в приложении Г.
Стр.28. В переменной MV110_16В_DN.rEAd_1; в переменную MU10_16R.wOut1
Стр.31, 39. Четность (хотелось бы рекомендации);
Стоповые биты (рекомендации 2 стоповых бита при отсутствии контроля четности в примерах не выполняются)
Стр.32. Таймаут отклика (на скриншоте таймаут ответа)
Стр.34. Время цикла (Пропущено определение.
Вот это из FAQ: "Время цикла – частота опроса slave-устройства.
Должно быть равным или кратным времени цикла приложения (см. рис. 11.4).
Также время цикла должно выбираться в зависимости от опрашиваемого устройства – например,
для модулей МВ110.8А время обновления данных одного канала для термопары типа ТХК составляет 0.4 секунды,
соответственно, разумное время цикла в секундах равно произведению 0.4 на число используемых каналов.")
Стр.40. для данного для данного slave-устройства; (- в 2-х местах)
Стр.45. после чего выберите из списку нужную переменную
Стр.55. Рис. 4.43: wPrevDI.0 (исправлено на рис 4.60)
Замечание: Например на рис. 4.54 и 4.56 – разные версии CoDeSys
Стр.63. В этом регистре содержаться значения
Стр. 71. Рис. 4.70. (не объяснена вкладка "ModbusGenericSerialMaster Соотнесение входов/выходов")
Стр.78. В COM-порт добавьте компонент Modbus Slave (Serial Device);
Рис. 4.84. Добавление компонента Modbus Master (Serial Device)
Стр.115. Блоки 8-11. …после чего код статуса декодируется помощью функции
Стр.125. Блок [3.0.1]. …хранится битовая маска состояний входом модуля.
Стр.127. 4. При опросе модулей следует анализировать код возникающих ошибок (выход
wErrCode) (в действительности выход Exception)
Стр. 132. …с помощью любой из функций (см. табл. 2.1) (ссылка некорректна)
Стр.138. Рис. 7.15. Добавление компонента Modbus Master (добавляется версия 3.5.7.0,
которая не рекомендуется из-за того, что Автоперезапуск соединения не работает)
Стр.145. Блок 19. В данном примере задействовано 15 байт буфера (я насчитал 14)
Стр.150. Рис. 8.4. (не объяснена вкладка "ModbusTCPMaster Соотнесение входов/выходов")
Стр.150. на вкладке Конфигурация Modbus (TCP) Master
Стр.150. Таймаут сокета (определение непонятно, слово сокет не определено)
Стр. 153. Рис. 8.9. Добавление компонента Modbus TCP Slave (Slave Device)
Стр.154. Рис. 8.10. Настройки компонента Modbus TCP Slave (Slave Device)
Стр.161. Рис. 8.22. Добавление (Настройка) компонента Modbus (TCP) Slave в проект
Стр.174. Рис. 9.5. Настройки СПК в режиме Modbus Slave (Serial Device)
Стр.175. Рис. 9.6. Наложение областей памяти в Modbus Slave (Serial Device)
Стр.175. Modbus Slave (Serial Device) (путаница в наименовании компонентов)
Стр.175. в каждом из случаев мастер-устройство(м) должно(ы) использоваться подходящие функции Modbus

Евгений Кислов
12.05.2016, 11:19
Документ СПК.Modbus по-моему не просто полезен, но и самый важный при изучении СПК, ведь без способности связи с "внешним миром" СПК не интересен. Выражаю большую признательность автору, очень познавательный документ.
Описки и замечания: (красным выделены описки, в скобках пояснения)

Стр.7. В сети может присутствовать только одно master-устройство,
которое отсылает и принимает запросы подчиненных slave-устройств.
(т.е. получается, что слэйв отсылает мастеру запросы?)
Стр.7. …, время одного полного цикла опроса может значительно увеличит(ь)ся.
Стр.8. В сети могут также существовать специальные шлюзы (gateway), которые
предоставляют данные устройствам из сети TCP/IP доступ к устройствам, объединенным
последовательной линией связи или ведущему устройству с последовательным интерфейсом
доступ к сети TCP/IP.
Стр.21. Список переменных диагностики приведен в приложении Г.
Стр.28. В переменной MV110_16В_DN.rEAd_1; в переменную MU10_16R.wOut1
Стр.31, 39. Четность (хотелось бы рекомендации);
Стоповые биты (рекомендации 2 стоповых бита при отсутствии контроля четности в примерах не выполняются)
Стр.32. Таймаут отклика (на скриншоте таймаут ответа)
Стр.34. Время цикла (Пропущено определение.
Вот это из FAQ: "Время цикла – частота опроса slave-устройства.
Должно быть равным или кратным времени цикла приложения (см. рис. 11.4).
Также время цикла должно выбираться в зависимости от опрашиваемого устройства – например,
для модулей МВ110.8А время обновления данных одного канала для термопары типа ТХК составляет 0.4 секунды,
соответственно, разумное время цикла в секундах равно произведению 0.4 на число используемых каналов.")
Стр.40. для данного для данного slave-устройства; (- в 2-х местах)
Стр.45. после чего выберите из списку нужную переменную
Стр.55. Рис. 4.43: wPrevDI.0 (исправлено на рис 4.60)
Замечание: Например на рис. 4.54 и 4.56 – разные версии CoDeSys
Стр.63. В этом регистре содержаться значения
Стр. 71. Рис. 4.70. (не объяснена вкладка "ModbusGenericSerialMaster Соотнесение входов/выходов")
Стр.78. В COM-порт добавьте компонент Modbus Slave (Serial Device);
Рис. 4.84. Добавление компонента Modbus Master (Serial Device)
Стр.115. Блоки 8-11. …после чего код статуса декодируется помощью функции
Стр.125. Блок [3.0.1]. …хранится битовая маска состояний входом модуля.
Стр.127. 4. При опросе модулей следует анализировать код возникающих ошибок (выход
wErrCode) (в действительности выход Exception)
Стр. 132. …с помощью любой из функций (см. табл. 2.1) (ссылка некорректна)
Стр.138. Рис. 7.15. Добавление компонента Modbus Master (добавляется версия 3.5.7.0,
которая не рекомендуется из-за того, что Автоперезапуск соединения не работает)
Стр.145. Блок 19. В данном примере задействовано 15 байт буфера (я насчитал 14)
Стр.150. Рис. 8.4. (не объяснена вкладка "ModbusTCPMaster Соотнесение входов/выходов")
Стр.150. на вкладке Конфигурация Modbus (TCP) Master
Стр.150. Таймаут сокета (определение непонятно, слово сокет не определено)
Стр. 153. Рис. 8.9. Добавление компонента Modbus TCP Slave (Slave Device)
Стр.154. Рис. 8.10. Настройки компонента Modbus TCP Slave (Slave Device)
Стр.161. Рис. 8.22. Добавление (Настройка) компонента Modbus (TCP) Slave в проект
Стр.174. Рис. 9.5. Настройки СПК в режиме Modbus Slave (Serial Device)
Стр.175. Рис. 9.6. Наложение областей памяти в Modbus Slave (Serial Device)
Стр.175. Modbus Slave (Serial Device) (путаница в наименовании компонентов)
Стр.175. в каждом из случаев мастер-устройство(м) должно(ы) использоваться подходящие функции Modbus


Большое спасибо за список ошибок/опечаток, это очень поможет при подготовке релизной версии документа.

vniko
12.05.2016, 11:20
При изучении документа возникли некоторые вопросы:
1. На рисунке 5.9 (стр.89) и рисунке 5.11 (стр.92) показан код программ опроса портов на CFC с использованием библиотеки ModulsOwenLib; на рисунке 5.14 (стр.95) и рисунке 5.16 (стр.98) показан код программ опроса портов на ST с использованием библиотеки ModulsOwenLib .
Вопрос: В цикле каждой из задач будет происходить опрос всех входов/выходов или только задействованных?
2. Пример настройки обмена между двумя контроллерами СПК207, один из которых выполняется функцию master (с помощью стандартных средств конфигурирования CODESYS), а другой – slave (с помощью библиотеки ModbusSlave). На стр. 135 создается новый проект CODESYS для СПК207 (master) c программой PLC_PRG на языке CFC. На стр. 141 создается новый проект CODESYS для СПК207 (slave) c программой PLC_PRG на языке CFC.
Вопрос: Почему в этом случае нельзя в проект CODESYS, содержащий СПК (master), добавить контроллер СПК (slave)?
3. На рис. 9.6. показано наложение областей памяти в Modbus Serial Device.
Вопрос: Как реализовать каналы в этом случае? Допускается ли привязать одновременно и holding регистры и coil (или и input регистры и discrete Inputs) для компонента Modbus Slave (модули ввода-вывода) как показано на рисунке 9.6.?

Евгений Кислов
12.05.2016, 11:31
При изучении документа возникли некоторые вопросы:
1. На рисунке 5.9 (стр.89) и рисунке 5.11 (стр.92) показан код программ опроса портов на CFC с использованием библиотеки ModulsOwenLib; на рисунке 5.14 (стр.95) и рисунке 5.16 (стр.98) показан код программ опроса портов на ST с использованием библиотеки ModulsOwenLib .
Вопрос: В цикле каждой из задач будет происходить опрос всех входов/выходов или только задействованных?
2. Пример настройки обмена между двумя контроллерами СПК207, один из которых выполняется функцию master (с помощью стандартных средств конфигурирования CODESYS), а другой – slave (с помощью библиотеки ModbusSlave). На стр. 135 создается новый проект CODESYS для СПК207 (master) c программой PLC_PRG на языке CFC. На стр. 141 создается новый проект CODESYS для СПК207 (slave) c программой PLC_PRG на языке CFC.
Вопрос: Почему в этом случае нельзя в проект CODESYS, содержащий СПК (master), добавить контроллер СПК (slave)?
3. На рис. 9.6. показано наложение областей памяти в Modbus Serial Device.
Вопрос: Как реализовать каналы в этом случае? Допускается ли привязать одновременно и holding регистры и coil (или и input регистры и discrete Inputs) для компонента Modbus Slave (модули ввода-вывода) как показано на рисунке 9.6.?

1. Будет происходить опрос всех входов/выходов - такова реализация модулей в библиотеке (используются групповые запросы).
2. Вы совершенно правы - разумеется, так сделать можно, более того, в самом проекте так и сделано. Поправлю.
3. В целом, это зависит от задачи. Одновременная привязка регистров и битов допускается, но мне сложно представить ситуацию, в которой это может реально понадобиться. Ну, предположим, у нас есть некоторое фантастическое мастер-устройство, которое может читать только биты, а писать только регистры - и мы хотим с помощью него работать с неким набором битов (читать/писать). Тогда использование holding регистров/сoil'ов в соответствии с рис 9.6 представляется вполне легитимным.

vniko
12.05.2016, 21:19
Евгений, вот реальный пример одновременного использования регистров и битов:
В модуле ввода с 16 входами первые 8 подключены к BCD переключателю, оставшиеся - к кнопкам и датчику.
То есть, мне удобнее читать регистр (слово 16 бит) для получения числа с BCD переключателя и привязать биты из 2-го байта к дискретным входам.

Евгений Кислов
12.05.2016, 21:37
Евгений, вот реальный пример одновременного использования регистров и битов:
В модуле ввода с 16 входами первые 8 подключены к BCD переключателю, оставшиеся - к кнопкам и датчику.
То есть, мне удобнее читать регистр (слово 16 бит) для получения числа с BCD переключателя и привязать биты из 2-го байта к дискретным входам.

Да, можно так сделать. На опрос это никак не повлияет, т.е. читать вы в любом случае будете только регистр, но в привязанные BOOL переменные будут копироваться значения соответствующих битов.

Эдуард_Н
14.05.2016, 17:18
Скажите вот так 24460можно сделать или нет?

Евгений Кислов
14.05.2016, 18:13
Скажите вот так 24460можно сделать или нет?

Да, так можно сделать.

Эдуард_Н
14.05.2016, 18:24
И ещё вопрос, во всех примерах модуль 8А висит на другом порту, а как этот модуль на тот же порт повесить на котором висят 16Д и 16Р?

Евгений Кислов
14.05.2016, 18:40
И ещё вопрос, во всех примерах модуль 8А висит на другом порту, а как этот модуль на тот же порт повесить на котором висят 16Д и 16Р?

Вопрос непонятен. В примерах показано, как опросить два модуля, подключенных к одному порту. Опрос трех, четырех и т.д. модулей выполняется совершенно аналогично.

Эдуард_Н
14.05.2016, 18:49
Вопрос непонятен. В примерах показано, как опросить два модуля, подключенных к одному порту. Опрос трех, четырех и т.д. модулей выполняется совершенно аналогично.

В смысле без разницы дискретные или аналоговые.

Евгений Кислов
14.05.2016, 18:57
В смысле без разницы дискретные или аналоговые.

Разницы, в принципе, нет. Если углубиться в тему, то у аналоговых модулей есть определенное время обновления значений каналов, и для оптимизации обмена можно опрашивать их в соответствии с этим временем. Но, опять же, никто не запрещает их опрашивать и в цикле программы.

alexx751
14.05.2016, 20:14
Разница есть. Если повесить 8А и дискреты на один порт - начинаются тормоза дискретного ввода-вывода. Дело в том, что 8А занимает шину на 500 - 1000 мс при ответе, даже при опросе одного канала (о чем неоднократно писалось на форуме).
Видимо зная эту особенность авторы и разнесли модули на разные порты. Я на днях вешал все три модуля на один порт - дискреты работают плохо.

Эдуард_Н
14.05.2016, 20:19
Мы их тоже вешаем на один порт, а второй под модем.

alexx751
14.05.2016, 21:56
Еще интересно выделение на каждый порт своей задачи. Это расценивать как официальную рекомендацию от "Овен" или просто прихотью автора документа? Во всяком случае объяснения в тексте не нашел.

Евгений Кислов
14.05.2016, 22:19
Еще интересно выделение на каждый порт своей задачи. Это расценивать как официальную рекомендацию от "Овен" или просто прихотью автора документа? Во всяком случае объяснения в тексте не нашел.

Расценивайте это как один из способов структурирования проекта.

alexx751
14.05.2016, 22:44
Ну хорошо хоть не в разные контроллеры обмен вынесен - так еще "структурированее" будет:)
И все же если серъезно - так надежнее/более стабильно? Или такой информации нет?

Евгений Кислов
14.05.2016, 22:53
Ну хорошо хоть не в разные контроллеры обмен вынесен - так еще "структурированее" будет:)
И все же если серъезно - так надежнее/более стабильно? Или такой информации нет?

Вопрос надежности/стабильности в данном контексте не рассматривался, и сложно представить, что между ним и разнесением программ опроса различных портов по отдельным задачам есть явная взаимосвязь.

Повторюсь, это просто способ структурирования проекта, который упрощает отладку.

Эдуард_Н
15.05.2016, 18:36
В документах "Модули МХ110 для CODESYS 3.5", "СПК. Modbus (тестирование документа) " как то не уточнено почему использованы именно такие адреса 1 и 16, а так-то хочется знать какие адреса можно присваивать при использовании библиотеки "Модули МХ110 для CODESYS 3.5".

Евгений Кислов
15.05.2016, 19:55
В документах "Модули МХ110 для CODESYS 3.5", "СПК. Modbus (тестирование документа) " как то не уточнено почему использованы именно такие адреса 1 и 16, а так-то хочется знать какие адреса можно присваивать при использовании библиотеки "Модули МХ110 для CODESYS 3.5".

1 и 17, если точнее. Cм. стр. 13.

Эдуард_Н
15.05.2016, 20:23
Понял, спасибо.

Евгений Кислов
15.05.2016, 20:24
Ну да 1 и 17 почему не 1 и 2 или 16 и 17?

Ладно, я перескажу написанное на стр. 13 другими словами.

Модули конфигурируются по протоколу Овен. Во время конфигурирования каждый модуль занимает в сети кол-во адресов, равное числу его каналов.

Предположим, у вас в связке 4 модуля 8А. Вы достали их из коробки, по одному подключали к ПК через АС4, настраивали и задали адреса 1,2,3,4.
Потом подключили к контроллеру. Все работает нормально. Через какое-то время возникла необходимость поменять тип датчиков. Вы подходите к шкафу, отключаете всю связку и через АС4 цепляете ее к своему ноутбуку. Пытаетесь настраивать модули и видите, что происходит что-то не то. Это объясняется тем, что при настройке модуля с адресом 1 отправляются команды на адреса 1-8 (еще раз - в протоколе Овен модуль занимает кол-во адресов, равное числу каналов). Вам приходится разбирать связку и подключать каждый модуль к ноутбуку по отдельности.

Если бы вы задавали адреса с разрывом в число каналов (в данном случае, соответственно, это были бы 1-9-17-25), то смогли бы переконфигурировать любой из модулей, не разбирая связки.


Понял, спасибо.

Никаких проблем. Написанную простыню я оставлю для тех, кто столкнется с подобным вопросом.

Евгений Кислов
15.05.2016, 20:35
Получается, что все модули Mx110 на 485 порту имеют протокол "ОВЕН", а не стандартный "Modbus"?

Когда вы запускаете Конфигуратор Mx110, то он связывается с модулями по протоколу Овен.
В остальных случаях вы сами выбираете протокол, по которому работаете (в данном документе - протокол Modbus).

Т.е. задавать адреса в стиле 1,2,3,4 и т.д., в принципе, можно - все будет работать - но возникнут сложности в случае необходимости переконфигурировать модули.

Эдуард_Н
15.05.2016, 20:40
Ещё раз спасибо, извините за все эти вопросы, просто завтра запускать один из объектов на СПК110 и я волнуюсь.

ALEXSP
17.05.2016, 14:37
Поскольку ошибка в описании input и holding регистров, указанная вчера ASo, является принципиальной, документ обновлен до версии 0.81. Все остальные замечания также были отработаны.

Конфигурация СПК207 (Modbus TCP Slave) <--> Master Scada
Если у нас Codesys v3.5 SP5 Patch5 - будет ли работать?

Евгений Кислов
17.05.2016, 14:45
Конфигурация СПК207 (Modbus TCP Slave) <--> Master Scada
Если у нас Codesys v3.5 SP5 Patch5 - будет ли работать?

Будет, но только функции чтения/записи регистров. Функции работы с битами поддержали в более поздних версиях.

ALEXSP
19.05.2016, 08:27
Будет, но только функции чтения/записи регистров. Функции работы с битами поддержали в более поздних версиях.

По факту: привязка QW работает только по битам, привязанные слова не работают!!!

Евгений Кислов
19.05.2016, 08:56
По факту: привязка QW работает только по битам, привязанные слова не работают!!!

По всей видимости, вы что-то делаете не так. Если вы детально сформулируете проблему, а также выложите проект для СПК и скриншоты настроек вашего OPC-сервера (как я понимаю, данные в скаду вы передаете с помощью него), то постараюсь помочь .

ALEXSP
19.05.2016, 13:31
По всей видимости, вы что-то делаете не так. Если вы детально сформулируете проблему, а также выложите проект для СПК и скриншоты настроек вашего OPC-сервера (как я понимаю, данные в скаду вы передаете с помощью него), то постараюсь помочь .

Я думаю все делаем правильно. Проверяли программой Modscan. Запросы делались 4-й функцией. При этом то что в СПК было привязано к QW битами - читалось правильно, то что в СПК было привязано к QW словами - читались 0. Грешим на версию CodeSys - v3.5 SP5 Patch5. Я просто направил это сообщение, чтобы Вы проверили не осталась ли эта ошибка в новой версии.24514

Евгений Кислов
19.05.2016, 13:54
Я думаю все делаем правильно. Проверяли программой Modscan. Запросы делались 4-й функцией. При этом то что в СПК было привязано к QW битами - читалось правильно, то что в СПК было привязано к QW словами - читались 0. Грешим на версию CodeSys - v3.5 SP5 Patch5. Я просто направил это сообщение, чтобы Вы проверили не осталась ли эта ошибка в новой версии.24514

Есть возможность проверить не Modscan'ом, а чем-то еще? Мне доводилось опрашивать input registers СПК через ворды по TCP различным устройствами (другими СПК, панелями оператора, виртуальным контроллером CODESYS, OPC-серверами), и проблем никогда не возникало.

Если возможности нет, я могу проверить у себя - но тогда прошу прислать архив проекта (на e.kislov@owen.ru) и подробную инструкцию в скриншотах, что вы делаете в утилите Modscan (еще лучше - саму утилиту тоже, чтобы избежать ситуации разных версий).

Upd. - ну, собственно, у меня получилось:

24515

Моя версия компонента Ethernet: 3.4.2.0
Моя версия компонента Modbus TCP Slave Device: 3.5.2.0

ALEXSP
19.05.2016, 15:11
Есть возможность проверить не Modscan'ом, а чем-то еще? Мне доводилось опрашивать input registers СПК через ворды по TCP различным устройствами (другими СПК, панелями оператора, виртуальным контроллером CODESYS, OPC-серверами), и проблем никогда не возникало.

Если возможности нет, я могу проверить у себя - но тогда прошу прислать архив проекта (на e.kislov@owen.ru) и подробную инструкцию в скриншотах, что вы делаете в утилите Modscan (еще лучше - саму утилиту тоже, чтобы избежать ситуации разных версий).

Upd. - ну, собственно, у меня получилось:

24515

Моя версия компонента Ethernet: 3.4.2.0
Моя версия компонента Modbus TCP Slave Device: 3.5.2.0

У нас те же версии, к сожалению то что не работает мы уже стерли, а вместо этого есть работающий вариант: union (real, 2 word), затем word раскладываем на 16 булевских переменных, и затем эти булевские переменные привязываем к битам QW - все работает!
В предыдущей версии программы было: union (real, 2 word), затем word привязываем к слову QW - читаются нули!

Евгений Кислов
19.05.2016, 15:40
Понятно. Но, как видите, у меня работает и привязка WORD к QW - с той же Modscan. Чтобы локализовать проблему, нужны эксперименты именно с вашим проектом и версией утилиты. Если это вам интересно, пишите на мою почту.

Эдуард_Н
19.05.2016, 16:15
Посмотрите так надо увеличивать количество входов и выходов

ALEXSP
19.05.2016, 16:41
У нас те же версии, к сожалению то что не работает мы уже стерли, а вместо этого есть работающий вариант: union (real, 2 word), затем word раскладываем на 16 булевских переменных, и затем эти булевские переменные привязываем к битам QW - все работает!
В предыдущей версии программы было: union (real, 2 word), затем word привязываем к слову QW - читаются нули!

Отправил ссылку на проект по почте

Евгений Кислов
19.05.2016, 17:35
Посмотрите так надо увеличивать количество входов и выходов

Да, в таком стиле. Хочу заметить, у вас порядок выполнения блоков вообще не соблюдается - так быть не должно.

Евгений Кислов
19.05.2016, 17:37
Отправил ссылку на проект по почте

Спасибо, завтра займусь экспериментами. Скриншоты настроек Modscan тоже отправьте, пожалуйста (если этого не сделали) - все, которые посчитаете нужными. Версия утилиты тоже интересует. У вас 32bit или 64?

Эдуард_Н
19.05.2016, 17:39
Да, в таком стиле. Хочу заметить, у вас порядок выполнения блоков вообще не соблюдается - так быть не должно.

Да я так, спеша накидал.

ALEXSP
20.05.2016, 11:06
Спасибо, завтра займусь экспериментами. Скриншоты настроек Modscan тоже отправьте, пожалуйста (если этого не сделали) - все, которые посчитаете нужными. Версия утилиты тоже интересует. У вас 32bit или 64?

Я думаю дело не в Modscan, у нас Modscan32 скриншот примерно такой же. Когда мы привязываем в СПК регистры по битам, то все работает - читается 4-й функцией и в Modscan и в Master Scada. Но в отличие от Вашего скрина (где значение 123) у нас в онлайне значения переменных на этой вкладке не отображались, мы могли посмотреть значения только на других вкладках. У меня 2 версии этого - 1) В новой версии Codesys это исправлено (это хорошо); 2) В Вашем примере привязка начинается с слова, а в нашем с битов, а слова идут дальше (а это уже могло остаться и в новой версии, что очень плохо)

Евгений Кислов
20.05.2016, 11:31
Я думаю дело не в Modscan, у нас Modscan32 скриншот примерно такой же. Когда мы привязываем в СПК регистры по битам, то все работает - читается 4-й функцией и в Modscan и в Master Scada. Но в отличие от Вашего скрина (где значение 123) у нас в онлайне значения переменных на этой вкладке не отображались, мы могли посмотреть значения только на других вкладках. У меня 2 версии этого - 1) В новой версии Codesys это исправлено (это хорошо); 2) В Вашем примере привязка начинается с слова, а в нашем с битов, а слова идут дальше (а это уже могло остаться и в новой версии, что очень плохо)

Вы попробовали рекомендацию из моего письма? (Всегда обновлять переменные: Вкл. 2 (в задаче цикла шины))

ALEXSP
20.05.2016, 11:53
Вы попробовали рекомендацию из моего письма? (Всегда обновлять переменные: Вкл. 2 (в задаче цикла шины))

Евгений! К сожалению у нас СПК на объекте и мы не можем это попробовать (у нас стоит наследовать от родительского устройства), если у Вас есть возможность проверить - будем очень признательны.

Евгений Кислов
20.05.2016, 12:04
Евгений! К сожалению у нас СПК на объекте и мы не можем это попробовать (у нас стоит наследовать от родительского устройства), если у Вас есть возможность проверить - будем очень признательны.

Дело в том, что эта настройка всегда должно быть в состоянии Вкл. 2 (всегда в задаче цикла шины), это неоднократно упомянуто в документе. С такой настройкой я без проблем считывал значения из привязанных вордов без дополнительных манипуляций с помощью Modscan (и не только ее). Без этой настройки у меня вообще не получилось считать данные, даже при привязке отдельных битов.

ALEXSP
20.05.2016, 12:29
Дело в том, что эта настройка всегда должно быть в состоянии Вкл. 2 (всегда в задаче цикла шины), это неоднократно упомянуто в документе. С такой настройкой я без проблем считывал значения из привязанных вордов без дополнительных манипуляций с помощью Modscan (и не только ее). Без этой настройки у меня вообще не получилось считать данные, даже при привязке отдельных битов.

У нас биты (привязанные) заработали как только мы поняли что такое QW и IW, но все же если есть возможность проверьте: привяжите в Outputs[0..1] несколько бит, а дальше несколько слов.

Евгений Кислов
20.05.2016, 12:37
У нас биты (привязанные) заработали как только мы поняли что такое QW и IW, но все же если есть возможность проверьте: привяжите в Outputs[0..1] несколько бит, а дальше несколько слов.

Привязал - работает нормально.

Эдуард_Н
24.05.2016, 17:37
Ещё один вопрос:
В КДС3 в Modbus_Master_COM_Port какие лучше в моём случае поставить значения параметров "Таймаут отклика(мс)" и "Время между фреймами(мс)"

Евгений Кислов
24.05.2016, 18:13
Ещё один вопрос:
В КДС3 в Modbus_Master_COM_Port какие лучше в моём случае поставить значения параметров "Таймаут отклика(мс)" и "Время между фреймами(мс)"

Едва ли можно составить какую-то формулу расчета оптимальных значений этих настроек. В целом, если проблем со связью нет, то лучше оставить значения по умолчанию.

Эдуард_Н
24.05.2016, 18:25
Едва ли можно составить какую-то формулу расчета оптимальных значений этих настроек. В целом, если проблем со связью нет, то лучше оставить значения по умолчанию.

Да, наверное Вы правы. Второй день проблем со связью не наблюдаю. Посмотрим, что будет дальше.:)

alexx751
25.05.2016, 15:17
abyMY110_16R_buffer[1].0:=xMV110_16D_input1;
abyMY110_16R_buffer[1].4:=TRUE;

abyMY110_16R_buffer[2].0:=TRUE;// следующие строки - правильные?
abyMY110_16R_buffer[2].1:=TRUE;
abyMY110_16R_buffer[2].2:=FALSE;
abyMY110_16R_buffer[2].3:=TRUE;
abyMY110_16R_buffer[2].4:=FALSE;
abyMY110_16R_buffer[2].5:=TRUE;
abyMY110_16R_buffer[2].6:=FALSE;
abyMY110_16R_buffer[2].7:=TRUE;



// [3.1.2] запускаем ФБ опроса модуля МУ110-16Р
MY110_16R
(
Enable:=COM_SERVICE_COM3.Ready,
Mode:=MB_RTU,
DevAddr:=48,
FirstAddr:=50,
Quantity:=1,
ComHandle:=COM_SERVICE_COM3.handle,
TimeOut:=T#500MS,
Buffer:=abyMY110_16R_buffer
&nbsp;);
sss := MY110_16R.RegCnt;
zzz := MY110_16R.Exception;

Как записать выходы с 9 по 16? Первые 8 работают.

Евгений Кислов
25.05.2016, 15:47
abyMY110_16R_buffer[1].0:=xMV110_16D_input1;
abyMY110_16R_buffer[1].4:=TRUE;

abyMY110_16R_buffer[2].0:=TRUE;// следующие строки - правильные?
abyMY110_16R_buffer[2].1:=TRUE;
abyMY110_16R_buffer[2].2:=FALSE;
abyMY110_16R_buffer[2].3:=TRUE;
abyMY110_16R_buffer[2].4:=FALSE;
abyMY110_16R_buffer[2].5:=TRUE;
abyMY110_16R_buffer[2].6:=FALSE;
abyMY110_16R_buffer[2].7:=TRUE;



// [3.1.2] запускаем ФБ опроса модуля МУ110-16Р
MY110_16R
(
Enable:=COM_SERVICE_COM3.Ready,
Mode:=MB_RTU,
DevAddr:=48,
FirstAddr:=50,
Quantity:=1,
ComHandle:=COM_SERVICE_COM3.handle,
TimeOut:=T#500MS,
Buffer:=abyMY110_16R_buffer
*);
sss := MY110_16R.RegCnt;
zzz := MY110_16R.Exception;

Как записать выходы с 9 по 16? Первые 8 работают.

Пишите в нулевой байт буфера:

abyMY110_16R_buffer[0].0:=TRUE; // выход 9
abyMY110_16R_buffer[0].1:=TRUE; // выход 10

и т.д.

alexx751
25.05.2016, 15:54
Спасибо, заработало.
То есть младший-старший байты местами поменяны?
Надо бы в доке указать.

Евгений Кислов
25.05.2016, 15:57
Спасибо, заработало.
То есть младший-старший байты местами поменяны?
Надо бы в доке указать.

Да, поменяны. Спасибо, действительно, стоит уточнить этот вопрос в документе.

жекон
09.06.2016, 18:24
Опрос через биб-ку ModbasOwenLib:МК110-4ДН4Р--МК110-4К4Р--МВ110-8А--МВ110-8ДФ--МУ110-8Р--ТРМ202--ATV312--МК110-4ДН4Р скорость 19200.Опрос идет безумно медленно, можно наблюдать в программе как переключаются шаги в case,на модуле МВ110-8А происходит вообще зависание на несколько секунд, на модулях постоянно загорается ошибка таим-ауты в модулях 5 сек, при этом на аварийных выходах Фб ноль, выкинул из 8а все переменные кроме real то-же самое, как бы все это дело разогнать и провалы убрать

Евгений Кислов
09.06.2016, 18:32
Опрос через биб-ку ModbasOwenLib:МК110-4ДН4Р--МК110-4К4Р--МВ110-8А--МВ110-8ДФ--МУ110-8Р--ТРМ202--ATV312--МК110-4ДН4Р скорость 19200.Опрос идет безумно медленно, можно наблюдать в программе как переключаются шаги в case,на модуле МВ110-8А происходит вообще зависание на несколько секунд, на модулях постоянно загорается ошибка таим-ауты в модулях 5 сек, при этом на аварийных выходах Фб ноль, выкинул из 8а все переменные кроме real то-же самое, как бы все это дело разогнать и провалы убрать

Библиотека ModulsOwenLib построена на использовании групповых запросов, т.е. в любом случае с модуля будут считаны все переменные. В данном случае лучше перейти на библиотеку Modbus Master и опрашивать только те регистры, которые реально нужны. Если с какого-то модуля нужны все регистры, то лучше считывать в несколько заходов (по ~20 регистров за раз). По возможности рекомендуется увеличить скорость обмена до 115200.

жекон
09.06.2016, 19:06
Хорошо попробую, скорость поднять не получиться частотник не даст

жекон
10.06.2016, 16:13
Дак а какой смысл писать заново Ваши блоки собраны на этой бибке, я же не просто отключил выхода 8А. а пересобрал ФБ, всего 16 регистров
CASE marker OF


0: get_modbus(
Enable:=trig.Q1 , (* разрешение работы блока *)
Mode:=Modd , (*режим передачи*)
DevAddr:=Addr , (*адрес*)
FirstAddr:=RegAddr1 , (*номер регистра*)
Quantity:=2, (*количество регистров*)
ComHandle:=handle ,(*номер COM-порта*)
TimeOut:=TimeOut , (*Таймаут T#50ms*)
Buffer:=Buffer , (* буфер данных *)
Complete=>cmpl , (* скопировать признак завершения операции *)
Exception=>Err , (* скопировать регистр ошибок *)
ByteCnt=>DataSize ); (*кол-во считанных байтов *)




IF cmpl THEN
IF Err=0 THEN (*Если нет ошибок, то получаем данные из буфера*)
inp1:=0;

ptr_x:=ADR(inp1);
ptr_x^:=buffer[7];
ptr_x:=ptr_x+1;
ptr_x^:=buffer[6];
ptr_x:=ptr_x+1;
ptr_x^:=buffer[5];
ptr_x:=ptr_x+1;
ptr_x^:=buffer[4];

marker:=1;
ErrCount:=0;
ELSE
IF (ErrCount >= ErCL) THEN
marker:=1;
ErrCount:=0;

Евгений Кислов
10.06.2016, 18:06
Т.е. вы все же используете библиотеку Modbus?

Т.к. раньше вы писали "ModbasOwenLib" - я подумал, что вы используете "ModulsOwenLib" (как наиболее похожую по названию).

В вашем случае я бы порекомендовал связаться с техподдержкой. На стр. 171 документа перечислены материалы, которые желательно предоставить при обращении.

vyachko
28.06.2016, 16:31
Все примеры в документе иллюстрируют чтение одного канала с каждого устройства. Можно в документе как-то описать момент опроса нескольких каналов с одного устройства?

Евгений Кислов
28.06.2016, 17:43
Все примеры в документе иллюстрируют чтение одного канала с каждого устройства. Можно в документе как-то описать момент опроса нескольких каналов с одного устройства?

Я так понимаю, речь о примере с библиотекой Modbus - потому что при опросе через конфигуратор процесс опроса нескольких каналов не должен вызывать вопросов, а библиотека ModulsOwenLib опрашивает модули целиком.

В том случае, если нужно опросить несколько каналов модуля через библиотеку Modbus, у вас есть два варианта:

1. Считать групповым запросом все нужные данные (при условии, что нет "дырок" в карте регистров) и дальше в программе разобрать их;
2. Считывать каждый канал по отдельности. В этом случае просто посмотрите, как реализован последовательный опрос двух модулей (например, рис. 6.12) - вам необходимо сделать то же самое, только вместо опроса двух модулей у вас будет два раза опрос разных регистров одного и того же модуля.

vyachko
29.06.2016, 09:06
Я так понимаю, речь о примере с библиотекой Modbus - потому что при опросе через конфигуратор процесс опроса нескольких каналов не должен вызывать вопросов, а библиотека ModulsOwenLib опрашивает модули целиком
Да, всё правильно, извиняюсь, что не уточнил.
Поясню почему возникает некоторая неоднозначность в части ModulsOwenLib. В тексте документе отражена особенность нумерации устройств (с учётом конфигурации по протоколу OWEN), и помня об этом при переработке примера 5.9 под чтение двух каналов первое, что приходит в голову, это необходимость последовательно изменять номер адреса (Addr), так же в тексте не увидел, что библиотека ModulsOwenLib опрашивает модули целиком. Это касается и описания библиотеки Modbus (в примерах тоже адреса начальные и не нашёл про групповое чтение).

1. Считать групповым запросом все нужные данные (при условии, что нет "дырок" в карте регистров) и дальше в программе разобрать их;
Я и стал прорабатывать этот вариант для МВ110-8А (читаем 10 регистров начиная со 2-го для получения данных с 1-го и 2-го канала), но возник ламерский вопрос: Как правильнее сделать преобразование WORD_TO_REAL для двух каналов одного устройства в этом случае?
Спрашиваю, так, как в железе пока проверить не могу (в закупке).

Евгений Кислов
29.06.2016, 09:27
Да, всё правильно, извиняюсь, что не уточнил.
Поясню почему возникает некоторая неоднозначность в части ModulsOwenLib. В тексте документе отражена особенность нумерации устройств (с учётом конфигурации по протоколу OWEN), и помня об этом при переработке примера 5.9 под чтение двух каналов первое, что приходит в голову, это необходимость последовательно изменять номер адреса (Addr), так же в тексте не увидел, что библиотека ModulsOwenLib опрашивает модули целиком. Это касается и описания библиотеки Modbus (в примерах тоже адреса начальные и не нашёл про групповое чтение).

Я и стал прорабатывать этот вариант для МВ110-8А (читаем 10 регистров начиная со 2-го для получения данных с 1-го и 2-го канала), но возник ламерский вопрос: Как правильнее сделать преобразование WORD_TO_REAL для двух каналов одного устройства в этом случае?
Спрашиваю, так, как в железе пока проверить не могу (в закупке).

1. Нет, адреса изменять не надо. Вы сейчас как раз описали методику опроса по протоколу Овен - но этот документ о Modbus, а в Модбасе устройство определяется одним адресом. По поводу принципа работы ModulsOwenLib - спасибо за замечание, в следующей версии опишем это в явном виде. По поводу группового опроса через библиотеку Modbus - в принципе, в примере как раз показан групповой опрос модуля 8А (считываются 4 регистра, с 2 по 5).

2. В принципе, точно также, как и для одного. После чтения данных вы получаете массив байт. Вы знаете, в каких байтах лежат ваши REAL. Если вы читаете 10 регистров, начиная со второго - то это байты 4-7 (первый REAL, как в примере) и 16-19 (второй REAL). Записываете байты первого REAL в объединение, меняя их порядок - опять же, как в примере. Забираете из объединения значение с плавающей точкой в нужную переменную. Теперь точно также записываете в объединение байты второго REAL, поменяв их порядок - и забираете из объединения второе значение.

Т.е. в случае увеличения числа опрашиваемых каналов и модулей примеры концептуально не изменятся - просто увеличится кол-во типовых кусков кода.

vyachko
29.06.2016, 11:45
2. В принципе, точно также, как и для одного. После чтения данных вы получаете массив байт. Вы знаете, в каких байтах лежат ваши REAL. Если вы читаете 10 регистров, начиная со второго - то это байты 4-7 (первый REAL, как в примере) и 16-19 (второй REAL). Записываете байты первого REAL в объединение, меняя их порядок - опять же, как в примере. Забираете из объединения значение с плавающей точкой в нужную переменную. Теперь точно также записываете в объединение байты второго REAL, поменяв их порядок - и забираете из объединения второе значение.
Концептуально это всё понятно, но вот механически...(потому и назвал вопрос ламерским).
Так можно?
25184

Евгений Кислов
29.06.2016, 12:14
Концептуально это всё понятно, но вот механически...(потому и назвал вопрос ламерским).
Так можно?
25184

Да, совершенно верно.

vyachko
29.06.2016, 14:58
Да, совершенно верно.
Спасибо за помощь.

Drahtor
25.07.2016, 23:18
Не думаю, что открою что-то новое, но тем не менее...
Имеются: СПК-107, МВ1100-8А, МВ110-16Д и МУ110-16Р. Первая попытка вязать их через шаблоны провалилась: связь не устойчивая, отклики на изменения входов несколько секунд. Перепробованы всевозможные варианты скоростей обмена, тайм-аутов и т.д. Попытка вторая - через ModulsOwenLib.Результат такой же. Далее МВ110-8А был посажен на один порт, остальные на другой и о, чудо! все заработало. Однако у дискретных модулей тайм-аут должен быть 45 мс, а иначе почему то не работает (скорость обмена 115200)... Что еще было подмечено: если в конфигураторе любого из модулей задержку ответа установить 1000мс (ну кроме МВ110-16Д, у него почему то дурацкое ограничение в те самые 45мс), то модуль зависает и становится недоступным ни для СПК, ни для конфигуратора. Решается подключением по заводским настройкам и изменением того самого тайм-аута в меньшую сторону.
Теперь про модуль вывода. В данный момент связь идет, лампочки моргают, физически выхода срабатывают с минимальной задержкой, но код ошибки 255. Как так?
Почему? Как теперь контролировать наличие связи? Мне, как нормальному человеку надо, чтобы при потери связи выходы сбрасывались, а сейчас этого не происходит. Почему этого нельзя сделать на уровне самой библиотеки? Как это красиво оформить в программе? Упаковывать в ворд и если код ошибки не ноль (а у меня, напоминаю, почему-то 255), отправлять ноль в этот ворд или же проделывать тоже самое с каждым битом отдельно?
И последнее: в мыслях посадить на шину еще два ПЧВ. Как это лучше сделать и на какой порт?

Эдуард_Н
26.07.2016, 04:03
Далее МВ110-8А был посажен на один порт, остальные на другой и о, чудо! все заработало.
Но это же не нормально! К примеру у меня на одном порту модули, а к другому прицеплен модем, и как тогда выкручиваться?

Евгений Кислов
26.07.2016, 07:23
Теперь про модуль вывода. В данный момент связь идет, лампочки моргают, физически выхода срабатывают с минимальной задержкой, но код ошибки 255. Как так?
Почему?

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

Чтобы создать архив: Файл - Архив проекта - Сохранить архив.

Drahtor
26.07.2016, 08:30
Без архива проекта трудно сказать что-то конкретное. Пожалуйста, выложите его или отправьте мне на почту.

Архив проекта
Появилась, конечно, мысль, что опрос одного слэйва надо начинать только после завершения опроса другого....

zamnarzanom
26.07.2016, 09:48
не получается скачать документ из первого поста!!

Евгений Кислов
26.07.2016, 10:25
не получается скачать документ из первого поста!!

Нажмите на него левой кнопкой мыши.

Евгений Кислов
26.07.2016, 11:44
Архив проекта
Появилась, конечно, мысль, что опрос одного слэйва надо начинать только после завершения опроса другого....

Да, совершенно верно - посмотрите внимательнее пример в документе.

Кроме того, желательно все же установить корректный порядок выполнения блоков.

zamnarzanom
26.07.2016, 11:53
зАГРУЖАЕТСЯ несколько страниц первых и всё.

Евгений Кислов
26.07.2016, 11:56
зАГРУЖАЕТСЯ несколько страниц первых и всё.

Какой браузер вы используете?

Drahtor
26.07.2016, 13:04
Да, совершенно верно - посмотрите внимательнее пример в документе.

Кроме того, желательно все же установить корректный порядок выполнения блоков.

"Порядок выполнения - Упорядочить в соответствие с потоком данных" - этого будет достаточно?

И почему все-таки все три модуля отказались работать на одном порту? И хотелось бы услышать совет, куда и как лучше вешать ПЧВ.

Евгений Кислов
26.07.2016, 13:30
"Порядок выполнения - Упорядочить в соответствие с потоком данных" будет достаточно?
И почему все-таки все три модуля отказались работать на одном порту? И хотелось бы услышать совет, куда и как лучше вешать ПЧВ.

В большинстве случаев - да, будет достаточно.

Если я правильно понял, у вас не модули не отказались работать, а работали с периодической потерей связей и большим временем отклика. Сходу сложно назвать причину. Вы можете обратиться в техподдержку, предоставив материалы, упомянутые в п. 9 данного документа.

ПЧВ обычно вешаются на отдельный порт, поскольку в значительном числе случаев у них жестко заданы сетевые настройки.

zamnarzanom
27.07.2016, 08:31
Какой браузер вы используете?

пробовал все яндекс опера хром
можно на ЯД залить?

Евгений Кислов
27.07.2016, 09:11
пробовал все яндекс опера хром
можно на ЯД залить?

Залил на файлообменник.
http://file.karelia.ru/d7jq62/

zamnarzanom
27.07.2016, 10:31
ерунда какая то...
на 27% останавливается и всё...
дома попробую, возможно мыгафон так чудит.

zamnarzanom
02.08.2016, 09:01
А для owen logic нет таких документов?

Евгений Кислов
15.08.2016, 13:56
Доступна релизная версия документа (1.0). Исправлены ошибки предыдущей версии. Спасибо всем, кто сообщал об ошибках.

vniko
15.08.2016, 16:51
Евгений, забыли исправить описку на стр.28:
Одна и та же переменная в тексте - MV110_16В_DN.rEAd_1, а на рис. 3.26 - MV110_16D_DN.rInput1.

Евгений Кислов
16.08.2016, 07:27
Евгений, забыли исправить описку на стр.28:
Одна и та же переменная в тексте - MV110_16В_DN.rEAd_1, а на рис. 3.26 - MV110_16D_DN.rInput1.

Спасибо, исправил.

Эдуард_Н
01.09.2016, 06:35
Что за ошибка, что не правильно делаю?

Евгений Кислов
01.09.2016, 07:16
Покажите строку объявления переменной abyMV110_16D_data.

Эдуард_Н
01.09.2016, 07:19
Покажите строку объявления переменной abyMV110_16D_data.

abyMV110_16D_data: ARRAY [0..255] OF BYTE; // Буфер данных, считанных с модуля МВ110-16Д

Евгений Кислов
01.09.2016, 07:22
abyMV110_16D_data: ARRAY [0..255] OF BYTE; // Буфер данных, считанных с модуля МВ110-16Д

В байте 8 бит. Так что данные от модуля размещены в двух байтах - в нашем случае, первом и нулевом. Первый вы разобрали правильно. Делайте то же самое с нулевым:

abyMV110_16D_data[0].0---->MOVE----->xMV110_16D_input9

и так далее.

Эдуард_Н
01.09.2016, 07:29
Спасибо.
Это конечно всё хорошо, но сделали бы Вы пример когда 16Д, 16Р и 8А находятся на одном порту.

Евгений Кислов
01.09.2016, 07:36
Спасибо.
Это конечно всё хорошо, но сделали бы Вы пример когда 16Д, 16Р и 8А находятся на одном порту.

К сожалению, в рамках документа невозможно охватить все сочетания slave-устройств - их бесчисленное множество. Но гораздо важнее, по-моему, показать саму концепцию настройки обмена. В документе показано, как опросить два модуля на одной шине - точно также можно опросить 3, 5, 10 модулей - принципиальных отличий не будет.

Эдуард_Н
01.09.2016, 07:44
Все примеры у Вас сделаны в СП7 до которого похоже мы не дойдём.
Поэтому ещё один вопрос, ещё одна ошибка, как исправить?

Евгений Кислов
01.09.2016, 07:52
Все примеры у Вас сделаны в СП7 до которого похоже мы не дойдём.
Поэтому ещё один вопрос, ещё одна ошибка, как исправить?

Необходимо добавить в проект библиотеку Mx110Assistant.

Эдуард_Н
01.09.2016, 07:57
Она там есть, я Ваш пример ковыряю если что.

Евгений Кислов
01.09.2016, 08:00
Она там есть, я Ваш пример ковыряю если что.

Тогда покажите ее содержимое, пожалуйста.

Эдуард_Н
01.09.2016, 08:06
Вот архив, поправьте пожалуйста мои ошибки. Делал в СП5.

Евгений Кислов
01.09.2016, 08:17
Вот архив, поправьте пожалуйста мои ошибки. Делал в СП5.

У вас в проект подтянулась устаревшая версия библиотеки Mx110Assistant. В вашем случаем функция будет называться MB_110_8A_StatusToString.

Эдуард_Н
01.09.2016, 08:24
А всё остальное как, нормально? Поправьте и выложите пожалуйста.
Интересует правильность формирования значений входов.

Эдуард_Н
01.09.2016, 08:50
Подскажите, а в КДС2 тоже есть библиотека Mx110Assistant?

Евгений Кислов
01.09.2016, 08:55
А всё остальное как, нормально? Поправьте и выложите пожалуйста.
Интересует правильность формирования значений входов.

К сожалению, у меня сейчас нет возможности "править и выкладывать" - но я могу проконсультировать вас по skype.

В целом, пробежавшись по проекту, вижу две явных ошибки:

1. По дискретным модулям - входы 1-8 лежат в 1 байте, 9-16 - в нулевом (у вас же - наоборот).
2. С аналоговым модулем что-то странное, вы считываете 1 канал и потом пытаетесь получить данные по 3 каналам.

Нет, библиотека Mx110Assistant существует только для CODESYS 3.5.

Эдуард_Н
01.09.2016, 09:04
2. С аналоговым модулем что-то странное, вы считываете 1 канал и потом пытаетесь получить данные по 3 каналам.
Какие данные надо поправить, что бы получилось нормально?

Евгений Кислов
01.09.2016, 09:14
Какие данные надо поправить, что бы получилось нормально?

Вы можете для ФБ MB_RD_HOLD_REGS задать FirstAddr:=0, Quantity:=48.

Соответственно, в буфере ответа окажутся 96 (от 0 до 95) байт.

Значение с плавающей точкой для канала 1 будет лежать в 8-11 байте, для канала 2 - в 20-23 байте и т.д.

жекон
06.09.2016, 07:54
Делаю опрос частотника через бибку, вроде и опрос идет но значения все одинаковые, понимаю что где-то скосячил , но не вижу ошибку:
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

жекон
07.09.2016, 17:24
да какой то мертвый сезон 2 день

жекон
07.09.2016, 18:49
СТР. 123 РИС 6.18, ОПРОС ТО ВРОДЕ И ИДЕТ НО ЛЕЗЕТ ХРЕНЬ ВСЯКАЯ И ПРИ ЧЕМ ОДИНАКОВАЯ ПО ВСЕМ РЕГИСТРАМ

Евгений Кислов
07.09.2016, 21:54
СТР. 123 РИС 6.18, ОПРОС ТО ВРОДЕ И ИДЕТ НО ЛЕЗЕТ ХРЕНЬ ВСЯКАЯ И ПРИ ЧЕМ ОДИНАКОВАЯ ПО ВСЕМ РЕГИСТРАМ

Это позволяет предположить, что ПЧВ отвечает на запрос сообщением об ошибке. Вы уверены, что опрашиваете корректные регистры и корректной функцией?

жекон
08.09.2016, 13:51
Пересобрал на UniRead UniWrite заработало, что то не срослось у меня с бибкой Modbas))), разбираться сейчас времени нет, да не подскажите ТРМ202 сеть удерживает после запроса

Евгений Кислов
08.09.2016, 14:03
не подскажите ТРМ202 сеть удерживает после запроса

Лучше уточнить это в разделе Эксплуатация или у техподдержки.

жекон
08.09.2016, 14:08
Не подскажите кому написать в техподдержку

Евгений Кислов
08.09.2016, 14:14
Не подскажите кому написать в техподдержку

Можно просто написать на support@owen.ru

жекон
08.09.2016, 14:55
Спасибо за информацию

slonegd
12.10.2016, 11:58
Всё читать не стал, может кто-то уже заметил и написал, но на стр 9 с таблицей функций перепутаны описании функций 03 и 04 (я целый день потратил, пытаясь прочитать входные регистры не той функцией).

Евгений Кислов
12.10.2016, 12:06
Всё читать не стал, может кто-то уже заметил и написал, но на стр 9 с таблицей функций перепутаны описании функций 03 и 04 (я целый день потратил, пытаясь прочитать входные регистры не той функцией).

Cпасибо за замечание - сегодня обновлю документ на сайте.

Эдуард_Н
23.10.2016, 11:37
Необходимо добавить в проект библиотеку Mx110Assistant.

Где её можно скачать?

Евгений Кислов
23.10.2016, 12:03
Где её можно скачать?

http://www.owen.ru/catalog/codesys_v3/80224381

Пакет "Модули Мx110".

Эдуард_Н
23.10.2016, 12:18
http://www.owen.ru/catalog/codesys_v3/80224381

Пакет "Модули Мx110".

Спасибо, уже всё понял.

Number17
07.11.2016, 23:10
Модуль МВ110-16Д + СПК105. Работаю через шаблоны. MV110_16D_DN.rCounterX не хочет перезаписывать счётчик. Чтение входов и значений регистров счётчика проходит без проблем. В чём может быть дело?

Евгений Кислов
08.11.2016, 07:27
Модуль МВ110-16Д + СПК105. Работаю через шаблоны. MV110_16D_DN.rCounterX не хочет перезаписывать счётчик. Чтение входов и значений регистров счётчика проходит без проблем. В чём может быть дело?

Используйте MV110_16D_DN.wCounterX

r - read - чтение, w - write - запись.

Number17
08.11.2016, 09:23
Используйте MV110_16D_DN.wCounterX

r - read - чтение, w - write - запись.

Именно эту функцию и использую - w. Выше в вопросе просто опечатался. Именно MV110_16D_DN.wCounterX и не желает перезаписывать счётчик.

Евгений Кислов
08.11.2016, 09:50
Эта функция используется для обнуления счетчика. Вы пытаетесь записать какое-то отличное от нуля значение?

Number17
08.11.2016, 10:09
Эта функция используется для обнуления счетчика. Вы пытаетесь записать какое-то отличное от нуля значение?

Пытался и нулевое значение записывать и отличное от нуля: MV110_16D_DN.wCounterX := 0; или MV110_16D_DN.wCounterX := x_var;

Евгений Кислов
08.11.2016, 11:53
Для обнуления счетчика необходимо записать в wCounterX любое значение, отличное от текущего, а на следующем цикле - записать в него 0.

Чернов Павел
11.11.2016, 21:54
Здравствуйте, уважаемые форумчане!
Меня зовут Павел.
У меня к Вам вопрос: как мне программно связать датчики ПВТ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


Жду ответа.

Заранее, большое спасибо за помощь и пояснение сложным моментов!

Евгений Кислов
11.11.2016, 22:14
1. 16 - это не адрес, а система счисления, в которой записывается номер регистра. Адрес задается на вкладке Общее. Один компонент Modbus_Slave_COM_Port соответствует одному устройству (в вашем случае датчику) - так что вам потребуется добавить 5 экземпляров с разными адресами и одинаковой настройкой опрашиваемых регистров. Не забывайте про Вкл. 2 для параметра Всегда обновлять переменные (вкладка соотнесения входов-выходов). И поменяйте функцию Modbus на 03 (см. инструкцию на датчик).

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

3. В текущих прошивках СПК тренды не поддерживаются и работать не будут.

Чернов Павел
11.11.2016, 23:46
Спасибо за ответ, Евгений!
И ещё сразу Вам один вопрос: какую прошивку мне нужно будет использовать для СПК110 для того чтобы в СПК110 работали тренды?

Евгений Кислов
11.11.2016, 23:47
Спасибо за ответ, Евгений!
И ещё сразу Вам один вопрос: какую прошивку мне нужно будет использовать для СПК110 для того чтобы в СПК110 работали тренды?

Такая прошивка еще не выпущена - она в разработке.

Чернов Павел
11.11.2016, 23:51
И ещё один момент, Евгений:
получается, что мне, для моего случая, вообще не нужно писать программу в PLC_PRG, скрин которой я прикрепил к своему первому вопросу?

Чернов Павел
11.11.2016, 23:53
А для каких-либо других панелей ОВЕН такая прошивка уже существует?

Евгений Кислов
12.11.2016, 00:09
Не уверен, что получится обойтись вообще без программы - как уже упоминал, надо будет конвертировать считанные значения в REAL и делить на 100. Но то присвоение, которое на вашем скрине - не нужно.

Официальной прошивки с трендами не существует, есть экспериментальные версии для СПК207 - но только для тестирования, на объектах ее использовать нельзя.
http://www.owen.ru/forum/showthread.php?t=22175

Чернов Павел
12.11.2016, 00:18
Евгений, странно как-то получается: target-файлы на СПК110 с "Трендами" на панели управления есть, а рабочих заводских прошивок на СПК110 что-бы тренды работали ещё нет?

Евгений Кислов
12.11.2016, 08:45
Евгений, странно как-то получается: target-файлы на СПК110 с "Трендами" на панели управления есть, а рабочих заводских прошивок на СПК110 что-бы тренды работали ещё нет?

Таргет-файлы не определяют набор доступных компонентов для создания проекта. Точно также вы можете добавить Modbus TCP, несмотря на то, что у СПК110 нет Ethernet-порта.

Поскольку обсуждаемые вопросы уже вышли за рамки Modbus, прошу при необходимости задавать их в соответствующих темах.

Евгений Кислов
12.11.2016, 11:18
Хотел за утренним кофием почитать самый первый документ с первого поста. "Не удается отобразить страницу.."

У меня проблема не повторяется. Возможно, были кратковременные проблемы с фтп в момент вашего обращения к ссылке.

Number17
12.11.2016, 17:36
СПК105 +M110. Пытаюсь освоить библиотеку Modbus руководствуясь документом СПК.Модбас (пример стр. 123). Возникли следующие вопросы:

1. Судя по коду примера инициализация настроек и открытие порта происходит каждый раз при вызове программы задачей. Разве нельзя один раз порт открыть?

2. Почему у меня порт открывается и начинается обмен тогда когда параметр порта Delay достигает значения 200? Что это за параметр? См.Картинку.27555

Сначала запустил код и подумал что ничего не работает. Потом смотрю, щёлкнули релюхи в модуле. В итоге обнаружил такое дело. Ни описания этого параметра в библиотеке ни доступа к нему не обнаружил (((.

Number17
12.11.2016, 18:06
чтоб так не подумать, нужно открыть данную библиотеку и посмотреть из чего она состоит, она написано форумчанином, кто хочет обходится без неё, кто не желает сам думать над этим вопросом просто её использует, кто всё же задумался редактирует эту бибку под себя

Перед использование библиотеку изучал, как по мануалу, так и смотрел её состав в Менеджере библиотек. Параметра Delay не нашёл. О нём ничего не сказано в и документе.
Для COM_Service описаны параметры Enabled, settings, sets_ex, task, ready, handle. Параметры Delay, Opened, res не нашёл где описаны.

Евгений Кислов
12.11.2016, 18:10
Это локальные переменные ФБ. Вполне логично, что они не описываются - пользователь все равно не может с ними работать и для него они не должны представлять интерес.

Порт открывается только один раз, т.к. открытие происходит по фронту Enable.

Number17
12.11.2016, 18:17
Это локальные переменные ФБ. Вполне логично, что они не описываются - пользователь все равно не может с ними работать и для него они не должны представлять интерес.

Порт открывается только один раз, т.к. открытие происходит по фронту Enable.

Хорошо, с открытием разобрались. Но всё же смысл задержки можно узнать? Почему COM_Service. Ready принимает значение TRUE после того как Dalay дотикает до 200? ( в моём случае).

Евгений Кислов
12.11.2016, 18:29
Я не могу достоверно прокомментировать причину наличия задержки - мне известно только то, что изначально библиотека была написана под ПЛК для CDS V2.3 и потом портировалась в третий CODESYS. Но если задача выполняется с циклом 10 мс (что характерно для задач, связанных с обменом), то задержка составляет 2 с. Если это является критичным, то придется написать свой блок, выполняющий схожие функции.

Поднятый вопрос известен и уже зафиксирован в списке пожеланий по доработке библиотек.

Number17
12.11.2016, 18:50
Я не могу достоверно прокомментировать причину наличия задержки - мне известно только то, что изначально библиотека была написана под ПЛК для CDS V2.3 и потом портировалась в третий CODESYS. Но если задача выполняется с циклом 10 мс (что характерно для задач, связанных с обменом), то задержка составляет 2 с. Если это является критичным, то придется написать свой блок, выполняющий схожие функции.

Поднятый вопрос известен и уже зафиксирован в списке пожеланий по доработке библиотек.

В моём случае задержка длиться чуть более 3-х минут. Но и цикл исполнения задачи = 500мс. Попробую уменьшить цикл задачи, посмотрю что получится. Спасибо за ответ.

Дополню: изменил цикл задачи на 20 мс. Задержка исчезла, практически не наблюдается. Delay практически после запуска принимает значение 200.

Number17
13.11.2016, 10:40
Заседание продолжается ))). В продолжение вчерашней темы - обмен с использование библиотеки Modbus.
СПК105+МУ110-8Р. Столкнулся сегодня с такой штукой: после открытия порта и запуска ФБ MB_WR_REGS данные установки состояния портов записываются в модуль, порты устанавливаются в соответствии с установленными значениями. В последующих циклах ничего не происходит, хотя данные установки портов меняются, в буфер данных записываются, на модуле мигает светодиод "RS-485", ошибок нет т.е. MB_WR_REGS.Exception = 0. Цикл задачи обмена 20 мс. В чём дело? Чего не хватает?

Number17
13.11.2016, 11:24
не понятно, Вы чего ожидаете то? Вроде пишите, чтоесли под портами понимаются выхода модуля, получается всё правильно работает

Выхода устанавливаются только в самом первом цикле обмена после запуска программы и открытия порта. Далее, когда мне надо записать другое значение, то модуль не меняет состояния порта. Я меняю данные в буфере, выкидываю их в линию с помощью MB_WR_REGS, но модуль не меняет состояния входов.

Number17
13.11.2016, 11:42
Выкладываю:
Данные которые нужно вывести на выхода модуля содержаться в глобальной переменной MY110_8R_out, в эту переменную они вводятся из текстового поля.
Ещё мне не понятен смысл 35 строка кода. Делал как в примере, там выполняется это действие. Но без этой строки вылетает ошибка MB_WR_REGS.Exception = 255.

Number17
13.11.2016, 12:42
ну во первых массив MY110_8R_buf у вас начинается с нулевого индекса, глобальную переменную Вы пытаетесь записать в первый индекс,т.е. во второй регистр для отправки, но в самой отправке количество посылаемых регистров равно одному. Другими словами записывать надо в MY110_8R_buf[0]:=MY110_8R_out;


Вот чем собственно руководствовался:27562. Хотя в примере рассматривается работают с модулем МУ110_16р, а я с МУ110-8р работаю. Но предполагаю описанное в примере верно и для МУ110-8р.

Number17
13.11.2016, 12:46
третье, что Вы записываете в текстовое поле, работаете Вы с маской, это означает что за выход отвечает какой то бит регистра, если запишите в него 255, то включатся все выхода

Это всё понятно. Записывая в текстовое я получу на выходах модуля это значение в двоичном представлении. Для тестовой программы пойдёт.

Number17
13.11.2016, 13:23
возможно верно написано, тогда какой тип данных имеет MY110_8R_out. А так если для теста, то из КДС в режиме онлайн задайте какое нибудь значение в этот байт

MY110_8R_out имеет тип данных BYTE. Переменная пишется в массив ARRAY OF BYTE, поэтому типы данных вроде как должны совпадать, как мне кажется.
Для теста значения MY110_8R_buf[1] задавал и через чикбоксы для каждого бита отдельно. Как этой переменной значения задавать наверное не критично.
Похожую ситуацию я наблюдал когда использовал встроенные в КДС средства модбас. Но тогда дело было вот в этом http://www.owen.ru/forum/showthread.php?t=25514&p=226419&viewfull=1#post226419.

Number17
13.11.2016, 14:01
ну как не критично, может оно из визуализации не доходит до буфера, покажите скрин в режиме онлайн состояния кода, когда с визуализации задали какое то значение

Переменную отслеживал c помощью WATCH. Переменная изменяется.

Number17
13.11.2016, 14:03
По поводу самого документачетвертый пункт, вот вроде раскрывает суть, но в примерах при записи эта связка не используется, возможно ситуация когда Complete срабатывает по таймауту, а пользователь считает что запись прошла успешно
И еще в примерах документа, во всех функциях после последнего аргумента идет запятая, как бы не на что не влияет и тем неменее создает лишнюю работу компилятору

Проверю предположения.
Спасибо за ответы.

Number17
14.11.2016, 09:16
вобще, это относилось к разработчику документа, в Вашем коде присутствует присвоение ошибки отдельной переменной, возможно Вы даже её обрабатываете. А запятая точно не относится к правильной записи, чтоб понять что у Вас, мне кажется нужно поставить на ПК сдейв и смотреть что передает панель в него, когда всё пойдет как нужно можно и модулем заниматься

Уже задумался о том что нужен сниффер шины.

nia5
23.11.2016, 15:50
Добрый день!
А есть ли пример реализации Modbus Slave ASCII? Или ткните носом куда смотреть, потому что поиск результатов не дал.
В библиотеке Modbus-slave вижу функции MB_SL_ASCII_RX и MB_ASCII_TX, но как их применить не понимаю.
Заранее спасибо!

Евгений Кислов
24.11.2016, 08:01
Добрый день!
А есть ли пример реализации Modbus Slave ASCII? Или ткните носом куда смотреть, потому что поиск результатов не дал.
В библиотеке Modbus-slave вижу функции MB_SL_ASCII_RX и MB_ASCII_TX, но как их применить не понимаю.
Заранее спасибо!

Добрый день.

MB_SL_ASCII_RX и MB_ASCII_TX - внутренние функции, с которыми пользователь не должен работать напрямую.

ФБ MB_SLAVE способен работать как по RTU, так и по ASCII. Выбора протокола не требуется - блок универсален. Вы можете взять пример из документа (приложение Slave) и опросить его вашим Modbus ASCII Master'ом.

27750

СергейНовосиб
19.07.2017, 05:53
Здравствуйте!
При компиляции проекта выходит ошибка
C0040: Для функции "FINDNEXTACTIVECHANNEL" ТРЕБУЕТСЯ РОВНО '0' ВХОДОВ
Удалял и заводил заново, не помогает. Где ошибка??

32121

Евгений Кислов
19.07.2017, 07:04
Здравствуйте!
При компиляции проекта выходит ошибка
C0040: Для функции "FINDNEXTACTIVECHANNEL" ТРЕБУЕТСЯ РОВНО '0' ВХОДОВ
Удалял и заводил заново, не помогает. Где ошибка??

32121

У вас версия Modbus Master - 3.5.7.0.
Попробуйте выбрать 3.5.5.0 (ПКМ - Обновить устройство - Показывать устаревшие версии).

СергейНовосиб
19.07.2017, 07:50
Спасибо! Вроде заработало.
Я еще здесь писал: http://www.owen.ru/forum/showthread.php?t=25756&p=252786&viewfull=1#post252786
пока ответа нет. Может сможете подсказать?

Евгений Кислов
19.07.2017, 08:19
Спасибо! Вроде заработало.
Я еще здесь писал: http://www.owen.ru/forum/showthread.php?t=25756&p=252786&viewfull=1#post252786
пока ответа нет. Может сможете подсказать?

Если у вас был выбран мастер версии 3.5.7.0 - то там галочка Автореконнект не работает. Попробуйте с 3.5.5.0 - проблема должна исчезнуть.

СергейНовосиб
19.07.2017, 13:12
Я пытаюсь это сделать, а программа все равно ставит 3.5.7.0. Что не так?

Нашел, где смотреть текущую версию.

Евгений Кислов
19.07.2017, 17:28
Я пытаюсь это сделать, а программа все равно ставит 3.5.7.0. Что не так?

Нашел, где смотреть текущую версию.

Я не понял, у вас получилось изменить версию?
Если нет - покажите в скриншотах, как вы это делаете.

Фирст
19.07.2017, 20:11
Здравствуйте! Вопрос по ОРС.
На прошлой неделе я тестировал подключение CODESIS SP5 к МастерСКАДе. Взял программу из "первого старта", прописал в "Символьной конфигурации" две переменных и залил в Эмулятор.
Настроил ОРС в МастерСКАДе по их демо примерам, и все срослось. Меняю в отладчике - вижу в СКАДе, и наоборот.
32143
Потом выяснил, что SP5 устарел для встроенной визуализации, и проект контроллера написал под SP7.
Сам контроллер уже уехал в шкафу к Заказчику, отлаживаю на эмуляторе.
Пробую подключить через ОРС к СКАДе - не получается.
Взял демо пример по ОРС - тоже не идет. МастерСкада не видит переменные из "Символьной конфигурации"
32144
Полдня с бубном скакал, все что нашел - прочитал, ничего не выходит. Помогите, пожалуйста.

Фирст
19.07.2017, 20:15
Кстати, на последней картинке видно, что в символьной конфигурации параметр "Атрибут" не установлен. И никак он не устанавливается. (Но в первый раз я его и не трогал).

Евгений Кислов
19.07.2017, 20:42
В эмуляции OPC вряд ли будет работать. Вообще, эмуляция - крайне примитивный инструмент, не стоит ее использовать.
На прошлой неделе вы, видимо, запускали виртуальный контроллер и загружали в него проект - в этом случае все получится. Рекомендую вернуться к этому варианту.

Фирст
19.07.2017, 22:28
Спасибо!
В проекте вместо СПК поставил виртуальный контроллер. На программу это никак не повлияло, не использую входов-выходов СПК. А в МастерСкаде появились все тэги. Можно отлаживать СКАДу без контроллера.
32147
CODESYS SP7

СергейНовосиб
20.07.2017, 05:10
Разделил слейв устройства на разные порты. МВ110-8А на сом3, а ПР200 на сом4. С МВ110 связь не теряется, а вот с ПР минут через 5 начинает периодически пропадать, через минуту полный отвал. В начале данные передаются нормально. Модуль RS485 менял на другой, не помогло. Версия Modbus 3.5.5.0, пробовал 3.5.4.0- тоже самое.

Ничего не перегружаешь, только делаешь "Онлайн-Сброс" опять какое то время работает.
А может это происходить из-за СПК207 М04, а не М05?

Евгений Кислов
20.07.2017, 06:51
Разделил слейв устройства на разные порты. МВ110-8А на сом3, а ПР200 на сом4. С МВ110 связь не теряется, а вот с ПР минут через 5 начинает периодически пропадать, через минуту полный отвал. В начале данные передаются нормально. Модуль RS485 менял на другой, не помогло. Версия Modbus 3.5.5.0, пробовал 3.5.4.0- тоже самое.

Ничего не перегружаешь, только делаешь "Онлайн-Сброс" опять какое то время работает.
А может это происходить из-за СПК207 М04, а не М05?

Выложите, пожалуйста, проекты (для СПК - архив проекта) на какой-нибудь файлообменник и напишите на support@owen.ru, приложив к письму ссылки на них.

У М04 могли возникать ошибки при обмене, но "полного отвала" мы не наблюдали.

СергейНовосиб
20.07.2017, 07:10
Хорошо. У меня на столе СПК М04, а заказчику уезжает М05. Снял со шкафа и залил тот-же проект - 2 часа ни одного падения шины. Где то на форуме мне попалось сообщение об обмене М04 на М05. Какая процедура обмена?

Евгений Кислов
20.07.2017, 07:16
Хорошо. У меня на столе СПК М04, а заказчику уезжает М05. Снял со шкафа и залил тот-же проект - 2 часа ни одного падения шины. Где то на форуме мне попалось сообщение об обмене М04 на М05. Какая процедура обмена?

Обратитесь в сервисный центр, чтобы получить информацию по этому вопросу:
http://www.owen.ru/78507995

Hoblin
20.07.2017, 14:37
Добрый день,
Пытаюсь соединить овен спк207 с частотником mitsubishi fr-a800 по протоколу Modbus-rtu rs-485.
Настройки порта на частотнике и спк идентичные.
Частотник подключен к отдельному com порту спк.
Настройки:
Номер устройства - 1
Скорость - 38400
Контроль четности - 0
Стоповые биты - 1
Расстояние между устройствами - 2 метра, витая пара
Com порт на спк - 3 физический / 4 программный

Частотник подключенный напрямую к компьютеру по rs-485 по протоколу Modbus опрашивается (указаны выше настройки). Программа Modbus Poll. Подключение через автоматический преобразователь интерфейсов USB/RS-485 ОВЕН АС4. Параметры опрашивались нормально.

Если же частотник подключаем к спк - на частотнике сразу выскакивает ошибка связи.

Во вложении наш проект - подключение через FB Mitsubishi (аналогичное подключение скоростного модуля ввода овен в другом проекте работает).

Вопрос что сделано не так? Частотник однозначно корректно работает по протоколу Modbus.

Мастеренко Иван
20.07.2017, 15:35
Добрый день,
Пытаюсь соединить овен спк207 с частотником mitsubishi fr-a800 по протоколу Modbus-rtu rs-485.
Настройки порта на частотнике и спк идентичные.
Частотник подключен к отдельному com порту спк.
Настройки:
Номер устройства - 1
Скорость - 38400
Контроль четности - 0
Стоповые биты - 1
Расстояние между устройствами - 2 метра, витая пара
Com порт на спк - 3 физический / 4 программный

Частотник подключенный напрямую к компьютеру по rs-485 по протоколу Modbus опрашивается (указаны выше настройки). Программа Modbus Poll. Подключение через автоматический преобразователь интерфейсов USB/RS-485 ОВЕН АС4. Параметры опрашивались нормально.

Если же частотник подключаем к спк - на частотнике сразу выскакивает ошибка связи.

Во вложении наш проект - подключение через FB Mitsubishi (аналогичное подключение скоростного модуля ввода овен в другом проекте работает).

Вопрос что сделано не так? Частотник однозначно корректно работает по протоколу Modbus.

1. Рекомендую начать с чтения одного регистра.
2. Проверьте тип переменных (word, float..), которые соответствуют регистрам 9-14. Quantity "1", а обрабатываете 4 байта.

Фирст
24.07.2017, 20:44
Здравствуйте!
На объекте заказчика не смог подключиться к СПК. Контроллер подключен напрямую к компьютеру по "перепутанному" патчкорду. Со стороны компьютера контроллер пингуется.
При попытке в CDS "Устройство/Установка соединений" найти контроллер, или ввести его ip адрес возникает окно с четырьмя полями (к сожалению не могу привести скан).
Имя устройства (пустое), номер - цифр двадцать, далее два поля для ввода имени пользователя и пароля. Дальше не пропускает.
Об этом окне ни в какой инструкции я не нашел.
В проекте и на компьютере никакие пароли не вводились. Панель новая (должна быть), на ней ничего не менялось. Стандартный пароль позволяет войти в конфигурацию на экране контроллера, но не походит в CDS.

Евгений Кислов
24.07.2017, 20:51
Вы случаем не пытаетесь подключиться к контроллеру, пока запущен конфигуратор?

Snakeaiz
26.09.2017, 18:38
Здравствуйте. Кто-нибудь нашел решение чтобы связать по UDP СПК и ПЛК110(160)?

Евгений Кислов
26.09.2017, 20:05
Здравствуйте. Кто-нибудь нашел решение чтобы связать по UDP СПК и ПЛК110(160)?

Добрый вечер. Есть как минимум два варианта решения этой задачи:

1. Использование сетевых переменных
2. Работа с сокетами через библиотеки

Если напишите на support@owen.ru более развернутую версию вашего вопроса - то наши специалисты помогут вам с ним разобраться.

Snakeaiz
26.09.2017, 20:17
Пытаюсь связать с помощью библиотек через сетевые глобальные переменные. Вся загвоздка в том, что в codesys 2.3 порт UDP должен быть один, как на прием так и на передачу. А codesys 3.5 ругается на то, что порты должны быть разные на прием и передачу.

Евгений Кислов
26.09.2017, 20:31
Пытаюсь связать с помощью библиотек через сетевые глобальные переменные. Вся загвоздка в том, что в codesys 2.3 порт UDP должен быть один, как на прием так и на передачу. А codesys 3.5 ругается на то, что порты должны быть разные на прием и передачу.

Как упоминал выше - отправьте, пожалуйста, заявку на support@owen.ru, укажите в ней свой контактный телефон, обеспечьте возможность удаленного доступа по TeamViewer - тогда будет возможность вам помочь.

VA87
05.12.2017, 12:43
Не могу скачать руководство по модбасу с данной страници.
фтп сервер не работает.

Евгений Кислов
05.12.2017, 12:44
Не могу скачать руководство по модбасу с данной страници.
фтп сервер не работает.

Да, к сожалению, с ним сейчас проблемы. Вот зеркало:
https://yadi.sk/d/7byrC_E73QAQhC

Евгений Кислов
13.12.2017, 13:57
Состоялся релиз новой версии шаблонов модулей Mx110 - 3.5.4.12.
Документ СПК. Modbus обновлен до версии 1.1.

Более подробная информация - в этой теме (http://www.owen.ru/forum/showthread.php?t=27889).

Эдуард_Н
13.12.2017, 18:57
Так будет работать 34667 или нужно изменить то, что обведено красным?

Евгений Кислов
13.12.2017, 19:18
Нужно изменить - флаг ошибки вынесен на вкладку соотнесения переменных.
Кусок с SEL тоже можно убрать - при отсутствии связи в wsStatus автоматически появится подобное сообщение.
И у вас, как обычно, порядок выполнения блоков поехал.

Эдуард_Н
13.12.2017, 19:57
И у вас, как обычно, порядок выполнения блоков поехал.
Это я так быстро накидал для вопроса.

Эдуард_Н
14.12.2017, 15:49
А на сайте когда выложите новые шаблоны?

Евгений Кислов
14.12.2017, 15:56
А на сайте когда выложите новые шаблоны?

Планируем в январе.

alexx751
14.12.2017, 16:19
А 3.5.4.12 это что? А в январе что планируете?

Евгений Кислов
14.12.2017, 18:29
А 3.5.4.12 это что? А в январе что планируете?

3.5.4.12 - это новая версия шаблонов, которая сейчас доступна на форуме.
В январе ее же выложим на сайте.
Именно об этом, как я понимаю, спросил Эдуард.

Эдуард_Н
14.12.2017, 19:04
Интересные модули получились. Не хватает в описании примера работы модулей ПЧВ, или это относится к другой теме?

Евгений Кислов
14.12.2017, 19:11
Интересные модули получились. Не хватает в описании примера работы модулей ПЧВ, или это относится к другой теме?

Принцип добавления и настройки шаблонов модулей и ПЧВ в CODESYS идентичен.
Остальное относится непосредственно к принципу работы ПЧВ и описано в его РП.

Эдуард_Н
31.01.2018, 08:33
Планируем в январе.

Январь заканчивается.

Евгений Кислов
31.01.2018, 08:37
Спасибо, что не забываете про нас.
В данный момент занимаюсь подготовкой новости.

Евгений Кислов
05.02.2018, 08:10
Состоялся релиз компонента OwenCloud TCP Slave.

Новый компонент позволяет настроить обмен между контроллерами СПК207 (требуется прошивка 5.480) и облачным сервисом OwenCloud (http://www.owen.ru/owencloud) – достаточно подключить контроллер к локальной сети с доступом в Интернет. Настройка компонента аналогична стандартному Modbus TCP Slave в CODESYS.

Скачать компонент:
http://www.owen.ru/catalog/codesys_v3/80224381

Пример работы с компонентом приведен в документе СПК. Настройка обмена с верхним уровнем (1.1):
https://ftp.owen.ru/CoDeSys3/11_Documentation/01_SPK/SPK_OPC_SCADA_v.1.1.pdf?_ga=2.206516563.139075733. 1517803191-1198217673.1499069592

Andrew_Stranger
06.02.2018, 18:36
Евгений, скажите почему нет шаблонов на МВА8, приборы сняты с производства, но все же?

Евгений Кислов
06.02.2018, 19:39
Евгений, скажите почему нет шаблонов на МВА8, приборы сняты с производства, но все же?

Собственно, вы сами озвучили причину - прибор снят с производства и его не закладывают в новые проекты.
Но карта регистров МВА8 совпадает с МВ110-8А - так что вы можете использовать этот шаблон.

Andrew_Stranger
06.02.2018, 19:56
Собственно, вы сами озвучили причину - прибор снят с производства и его не закладывают в новые проекты.
Но карта регистров МВА8 совпадает с МВ110-8А - так что вы можете использовать этот шаблон.
Спасибо, тоже такая мысль проскальзывала.

Евгений Кислов
15.02.2018, 15:57
Опубликован документ СПК. Реализация обмена через сокеты (https://ftp.owen.ru/CoDeSys3/11_Documentation/01_SPK/SPK_Sockets_v.1.0.pdf).

В документе приведено описание библиотеки CAA Net Base Services и рассмотрены простые примеры реализации UDP сервера/клиента и TCP сервера/клиента.

Дополнительно выкладываю пример запроса к NTP серверу (создан в 3.5 SP7 Patch4): Example_SNTP (https://ftp.owen.ru/CoDeSys3/99_ForumFiles/Example_SNTP.projectarchive)

fantom732
23.02.2018, 10:59
Не подскажете, может ли в новых драйверах быть неправильной адресация портов? Моё железо: СПК 207+МСД200+МВ110-32ДН+МВ110-32Р+МВ110-8АС+МВ110-8АС. Версия codesys 3.5.7.4. Версия ModBus Master 3.5.5.0.
Суть проблемы: корректно работают все приборы кроме МВ110-32ДН. Сигнал физически подается на 24 и 28 входы, лампочки на МВ110 моргают возле соответствующих портов при подаче сигнала, а в Сodesys отображается изменение сигнала на портах 21 и 26.
30,31,32 входы отрабатывают нормально, а на 2 почему то висит "неверное выражение". Стойкое ощущение что ошибка в драйвере МВ110-32ДН, в частности неправильно прописаны адреса регистров

Upd: Проблема проявляется после второго входа, первый отрабатывает нормально, второй в Codesys уже отображается на третьем и так далее

Евгений Кислов
23.02.2018, 11:29
Не подскажете, может ли в новых драйверах быть неправильной адресация портов? Моё железо: СПК 207+МСД200+МВ110-32ДН+МВ110-32Р+МВ110-8АС+МВ110-8АС. Версия codesys 3.5.7.4. Версия ModBus Master 3.5.5.0.
Суть проблемы: корректно работают все приборы кроме МВ110-32ДН. Сигнал физически подается на 24 и 28 входы, лампочки на МВ110 моргают возле соответствующих портов при подаче сигнала, а в Сodesys отображается изменение сигнала на портах 21 и 26.
30,31,32 входы отрабатывают нормально, а на 2 почему то висит "неверное выражение". Стойкое ощущение что ошибка в драйвере МВ110-32ДН, в частности неправильно прописаны адреса регистров

Upd: Проблема проявляется после второго входа, первый отрабатывает нормально, второй в Codesys уже отображается на третьем и так далее

Отправьте архив вашего проекта на support@owen.ru, пожалуйста - попробуем воспроизвести проблему.

Если привязывать переменную типа DWORD к маске и не привязывать переменные к отдельным BOOL каналам - проблема повторяется?

fantom732
23.02.2018, 11:42
Уже связался с поддержкой, буду пробовать привязку к маске

Евгений Кислов
24.02.2018, 08:57
Уже связался с поддержкой, буду пробовать привязку к маске

Еще вопрос - вы создавали проект с нуля или в существующем проекте обновили шаблон предыдущей версии до 3.5.4.12 с помощью команды Обновить устройство?

Bigcrash
27.02.2018, 10:30
Добрый день.
Начал разбираться с обменом по ModBus (СПК110) по приведенному мануалу СПК. Протокол Modbus_v.1.1. Сразу возникли нестыковки.
В мануале
http://www.imageup.ru/img234/3001801/1.png (http://www.imageup.ru/img234/3001801/1.png.html)

У меня в программе
http://www.imageup.ru/img234/3001802/2.png (http://www.imageup.ru/img234/3001802/2.png.html)

Евгений Кислов
27.02.2018, 10:35
Вы используете предыдущую версию шаблонов. Вам следует установить новую - 3.5.4.12.

Bigcrash
28.02.2018, 17:50
Через менеджер пакетов обновление не устанавливается? Там у меня пишет, что обновления не найдены. Only hand?

Евгений Кислов
28.02.2018, 17:54
Через менеджер пакетов обновление не устанавливается? Там у меня пишет, что обновления не найдены. Only hand?

Да - только вручную, у нас нет своего сервера обновлений.

Bigcrash
01.03.2018, 09:33
В старых шаблонах был такой параметр для модуля MV110_8A как Stat, куда записывался код ошибки. Можно было спокойно использовать Имя_модуля.Stat.... и получить состояние.
Сейчас в библиотеке Mx110 Assistant появился такой параметр MV_SENSOR_ERROR. Согласно документации, чтобы получить состояние канала


1. Объявить в проекте переменную типа Mx110Assistant.MV_SENSOR_ERROR;
2. Привязать эту переменную к каналу Код статуса нужного входа шаблона модуля;
3. В программе вызвать нужную функцию библиотеки.

Возникло 2 вопроса.
1. Я привязываю переменную к КОНКРЕТНОМУ КАНАЛУ КОНКРЕТНОГО МОДУЛЯ. А как использовать ее на несколько каналов (другой модуль). Объявлять несколько переменных?
2. Что за тип Enumeration of UNIT , указанный при привязке переменной к каналу Статуса измерения входа

Евгений Кислов
01.03.2018, 09:45
В старых шаблонах был такой параметр для модуля MV110_8A как Stat, куда записывался код ошибки. Можно было спокойно использовать Имя_модуля.Stat.... и получить состояние.
Сейчас в библиотеке Mx110 Assistant появился такой параметр MV_SENSOR_ERROR. Согласно документации, чтобы получить состояние канала


Возникло 2 вопроса.
1. Я привязываю переменную к КОНКРЕТНОМУ КАНАЛУ КОНКРЕТНОГО МОДУЛЯ. А как использовать ее на несколько каналов (другой модуль). Объявлять несколько переменных?
2. Что за тип Enumeration of UNIT , указанный при привязке переменной к каналу Статуса измерения входа

1. Да.
2. Enumeration of UINT - это и есть MV_SENSOR_ERROR.

Посмотрите видео (нужная часть - с 13:30):
https://www.youtube.com/watch?v=0m5vbe7z6Ek

Bigcrash
02.03.2018, 10:13
Опять возникли проблемы с новым пакетом для модулей, со старыми все было хорошо.
Суть в следующем, модуль МВ110-8А, опрос датчиков температуры (ОВЕН) PT1000. Через конфигуратор все видится, значения адекватные, в программе датчики видны, но значения отсутствуют.

Евгений Кислов
02.03.2018, 10:15
Опять возникли проблемы с новым пакетом для модулей, со старыми все было хорошо.
Суть в следующем, модуль МВ110-8А, опрос датчиков температуры (ОВЕН) PT1000. Через конфигуратор все видится, значения адекватные, в программе датчики видны, но значения отсутствуют.

Отправьте ваш проект на support@owen.ru, пожалуйста.
Вы создавали его с нуля или редактировали существующий?

Евгений Кислов
07.03.2018, 12:18
Шаблоны модулей Mx110 обновлены до версии 3.5.4.13.
Устранена ошибка смещения значений между каналами, проявлявшаяся при отсутствии привязки переменных ко всем каналам шаблона.
Крайне рекомендуется удалить предыдущую версию шаблонов и установить новую.

http://www.owen.ru/forum/showthread.php?t=27889

Timpus
13.03.2018, 15:32
Есть СПК207 (М04).WEB 2017 года выпуска с самыми последними рекомендованными прошивками, СПК по MODBUS ведет обмен информацией с шестью модулями ввода/вывода ООО «КомпанииАКОН» (https://www.akon.com.ua/), есть верхний уровень на TRACE MODE 6. есть рабочий проект, который в данной конфигурации без проблем непрерывно работал несколько последних месяцев. Но три недели тому начались проблемы с обменом СПК207 и вышеназванными периферийными модулями ввода/вывода. Внешне прекращение обмена информацией невидимо. Все светодиоды как на СПК так и на модулях ввода/вывода светятся в штатном режиме. Обмен с ТМ6 не прерывается, но при этом все параметры не изменяются. И только подключившись к СПК207 через CODESYS видим полную остановку обмена со всеми модулями ввода/вывода. Замена СПК207 на аналогичный резервный проблему не решает. Проходят сутки, двое…. а то и несколько часов и связь прекращается. После перезапуска СПК все восстанавливается и работает до непериодически повторяемого прекращения обмена с модулями. В чем может быть причина? Как обеспечить автоматический перезапуск обмена СПК207 с модулями при прекращении обмена?

Евгений Кислов
13.03.2018, 15:35
После перезапуска СПК все восстанавливается и работает до непериодически повторяемого прекращения обмена с модулями. В чем может быть причина? Как обеспечить автоматический перезапуск обмена СПК207 с модулями при прекращении обмена?

См. рекомендации из этого поста:
http://www.owen.ru/forum/showthread.php?t=28167&page=4&p=272286&viewfull=1#post272286

Kostic77
20.03.2018, 13:28
Добрый день.
Не компилируется проект. Библиотека ModBUS дает 20 ошибок. Версия Codesys 3.5 sp7. Четвертое SP не годится, потому что там нет VisuStructPoint. Найти библиотеку Modbus с версией выше 3.5.4.8 не могу. Использовать готовое Modbus_COM не могу, потому что ПЛК постоянно перестает принимать данные и шина останавливается. Опрос двух разных слейвов на одном порту просто не работает:mad:
Хотел наладить обмен вручную, и опять затык...
Что можно сделать?
36134

Евгений Кислов
20.03.2018, 14:08
Добрый день.
Не компилируется проект. Библиотека ModBUS дает 20 ошибок. Версия Codesys 3.5 sp7. Четвертое SP не годится, потому что там нет VisuStructPoint. Найти библиотеку Modbus с версией выше 3.5.4.8 не могу. Использовать готовое Modbus_COM не могу, потому что ПЛК постоянно перестает принимать данные и шина останавливается. Опрос двух разных слейвов на одном порту просто не работает:mad:
Хотел наладить обмен вручную, и опять затык...
Что можно сделать?
36134

Добрый день.
Вам следует установить архив репозитория.
Ссылка в подписи.

Но на самом деле достаточно настроить обмен через конфигурацию, указав для Modbus Master версию 3.5.5.0 (а не 3.5.7.0). В версии 3.5.7.0 действительно переподключение не работает.

И, честно говоря, VisuStructPoint есть во всех версиях CODESYS 3.5.

Kostic77
21.03.2018, 06:36
Добрый день, спасибо за помощь. Всё заработало. Просьба включить данный архив на образ диска с сервисным ПО http://www.owen.ru/catalog/codesys_v3/25545068.
Диск который шел в комплекте с ПЛК не читался в ноутбуке, прочитал в стационарном компе, но все файлы оказались испорченными. Скачал диск с сайта, но там этого репозитория нет. Не всегда есть возможность рыться на форумах.

Евгений Кислов
21.03.2018, 06:53
Добрый день, спасибо за помощь. Всё заработало. Просьба включить данный архив на образ диска с сервисным ПО http://www.owen.ru/catalog/codesys_v3/25545068.
Диск который шел в комплекте с ПЛК не читался в ноутбуке, прочитал в стационарном компе, но все файлы оказались испорченными. Скачал диск с сайта, но там этого репозитория нет. Не всегда есть возможность рыться на форумах.

Хм, в принципе, должен был подойти и сокращенный репозиторий (SPK Repository Archive 3.5.4.20), который есть на диске.
И, по идее, на диске должен быть и "большой". Если его нет - то, конечно, добавим.

Kostic77
21.03.2018, 17:28
На диске есть только 26мБ. Я его ставил, не помог. Через библиотеку modbus связь стабильная получилась, бывают правда пропуски в приеме ответов, хоть и по осциллографу и по подключенному параллельно терминалу в винде - на каждый запрос следует корректный ответ (в том числе и от мв110), но уже работать можно. А системное устройство при коммутации лампочки на 75 Вт тупо пишет, что шина не запущена и ничто кроме физической перезагрузки ПЛК не помогает.

service
23.03.2018, 15:58
Извините за глупый вопрос. зачем создавать программу и функциональные блоки для открытия порта, опроса модуля по модбасу, проверки на ошибки, переходу к следующему опросу и т.д. К примеру подключили к СПК 2 модуля, настроили, проверили - все работает.

service
23.03.2018, 16:07
в драйверах на 110-е модули, в закладке "Соотнесение входов/выходов" в столбце "Канал" есть Флаг ошибки. Если присвоить переменную и вывести ее в визуализацию аварий(чтоб оператор увидел и/или услышал), то сработает ли она, если произошла беда с модулем?

Ильнур Гибадуллин
23.03.2018, 16:11
в драйверах на 110-е модули, в закладке "Соотнесение входов/выходов" в столбце "Канал" есть Флаг ошибки. Если присвоить переменную и вывести ее в визуализацию аварий(чтоб оператор увидел и/или услышал), то сработает ли она, если произошла беда с модулем?

Сработает. Этот канал для этого и создавался.

service
23.03.2018, 16:31
то есть возможно обойтись без функциональных блоков (ComConn, MV110_8A_inputs и т.д) из библиотеки ModulsOwenLib и их обработки?

Ильнур Гибадуллин
23.03.2018, 16:37
то есть возможно обойтись без функциональных блоков (ComConn, MV110_8A_inputs и т.д) из библиотеки ModulsOwenLib и их обработки?

Все верно. В тоже время библиотеки позволяют более глубже и гибче настроить процесс обмена с периферийными устройствами.

Евгентий
20.04.2018, 08:32
День добрый!
Кто-нибудь, подскажите или укажите, где можно посмотреть пример связи датчика влажности ПВТ-100 и СПК110? Может кто сталкивался с данным вопросом?
Предстоит писать проект, который будет состоять из 5 модулей МВ110-224-8А, одного МУ110-224-8Р и четырех ПВТ-100.
Модули четко считываются и работают, а вот с ПВТ-100 загвоздка. Его опрос идет но, показания считанных регистров по нулям.
Пробовал делать пробную конфигурацию с одним только ПВТ ситуация такая же, опрос есть - горит зелененький кружок возле устройства в дереве проекта в онлайне.
В качестве устройства для опроса ПВТ 100 добавляю стандартный Modbus Slave COM Port.
Прилагаю пробный пример.
36766

Евгений Кислов
20.04.2018, 08:36
День добрый!
Кто-нибудь, подскажите или укажите, где можно посмотреть пример связи датчика влажности ПВТ-100 и СПК110? Может кто сталкивался с данным вопросом?
Предстоит писать проект, который будет состоять из 5 модулей МВ110-224-8А, одного МУ110-224-8Р и четырех ПВТ-100.
Модули четко считываются и работают, а вот с ПВТ-100 загвоздка. Его опрос идет но, показания считанных регистров по нулям.
Пробовал делать пробную конфигурацию с одним только ПВТ ситуация такая же, опрос есть - горит зелененький кружок возле устройства в дереве проекта в онлайне.
В качестве устройства для опроса ПВТ 100 добавляю стандартный Modbus Slave COM Port.

Добрый день.

Сделайте вот так:

36767

Евгентий
20.04.2018, 09:09
Вот как!
Спасибо Евгений!
Попробую.
А все остальное, как я понял, правильно?

Евгений Кислов
20.04.2018, 09:18
Вот как!
Спасибо Евгений!
Попробую.
А все остальное, как я понял, правильно?

Если речь о проекте - то в нем правильные номера регистров, да.

Dmitro
19.05.2018, 16:58
У меня СПК110 и скорость обмена с 5 модулями 19200.
В CODESYS ставлю частоту циклов основной программы 200 мс: I, II модули работают, III помигивает "аварией", а на IV "авария" светится постоянно.
Таймауты 1 секунда.

Методом тыка уменьшил частоту циклов основной программы до 90 мс, "аварии" исчезли.

Объясните пожалуйста, в какой задаче "сидит" подзадача обмена данными по RS485? В одном потоке с основным циклом?
Как правильно подобрать время цикла, кроме метода тыка?

Ведь может быть ситуация, когда циклу надо не менее 200 мс, а этого не хватает для полноценного обмена с модулями, который требует например не более 100 мс. Как тогда?
Спасибо.

Евгений Кислов
19.05.2018, 17:02
По умолчанию обмен происходит в задаче с наименьшим временем цикла. Если в проекте одна задача (у вас, видимо, так) - то, соответственно, обмен происходит в ней.
Можно создать отдельную задачу и привязать обмен к ней (см. настройки Modbus Master).

Но зачем? По умолчанию задача MainTask имеет время цикла 20 мс. Поднимать его выше я, честно говоря, не вижу смысла. Если вам необходимо выполнять какие-то операции раз в 200 мс - то лучше для этого использовать таймер в программе.

Dmitro
19.05.2018, 21:00
По умолчанию обмен происходит в задаче с наименьшим временем цикла. Если в проекте одна задача (у вас, видимо, так) - то, соответственно, обмен происходит в ней.
Можно создать отдельную задачу и привязать обмен к ней (см. настройки Modbus Master).

Но зачем? По умолчанию задача MainTask имеет время цикла 20 мс. Поднимать его выше я, честно говоря, не вижу смысла. Если вам необходимо выполнять какие-то операции раз в 200 мс - то лучше для этого использовать таймер в программе.

Евгений, спасибо за оперативный ответ.
В разделе "Конфигурация задач/монитор" можно увидеть "среднее время цикла (нс)". Можно ли его использовать
для выбора времени цикла? Или использовать "максимальное время цикла"? Оно бывает на порядок больше.
Если выбрать маленькое время цикла возможны же сбои, когда один цикл не завершился, а уже вызывается другой. Процессор будет забит под завязку и его может "кому-то" не хватить. или это не критично?
Буду очень благодарен, если разъясните.