PDA

Просмотр полной версии : СПК1хх и Модбас



жекон
21.08.2013, 16:48
Делаю проект на СПК110 ,необходимо подключить МДВВ,МВ-110АС и МВУ-8 добавляю Modbus Com,Modbus Master и на тебе 9670
ладно делаем как написано в документации через библиотеки ОВЕН МДВВ вроде работает хорошо, а с МВ-110АС какие странные показания лезут, вот тут собственно и вопрос в каком направлении дальше капать?

Александр Приходько
21.08.2013, 18:00
Добрый день.
1) При работе через конфигурацию. Есть небольшая особенность, которая к сожалению ни где не описана.
При добавлении девайсов (порт, модбас мастер или модбас слейв) они добавляются самой последней версии, которые есть в системе.
А должны добавляться версии точно такой же как таргет или младше!

Т.е. если вы говорите об СПК1хх, сейчас в сети выложен один единственный таргет с версией 3,5,2,0. А девайсы добавляются у вас 3,5,3,0. Это вызывает конфликт. Когда вы добавляете эти компоненты, ставьте галку отображать все версии, и выбирайте версии девайсов 3,5,2,0 или ниже.

Смотрите пример видео, как это настраивается:

http://youtu.be/9rkYyV48uy0



2) Какого типа данные снимаете REAL или WORD? Возможно проблема в том, что надо регистры переворачивать, если в формате REAL.

жекон
22.08.2013, 03:11
REAl снимаю, про переворот регистров я где-то читал просто подумал раз ваши библиотеки то там всё должно быть реализовано, за разъяснение спасибо.

Александр Приходько
22.08.2013, 10:54
REAl снимаю, про переворот регистров я где-то читал просто подумал раз ваши библиотеки то там всё должно быть реализовано, за разъяснение спасибо.

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

жекон
22.08.2013, 17:39
Сделал как вы написали, прописал по одной переменной ,а опрос не идет даже индикатор Com-порт не мигает, может что ещё добавить надо?

capzap
22.08.2013, 17:44
Сделал как вы написали, прописал по одной переменной ,а опрос не идет даже индикатор Com-порт не мигает, может что ещё добавить надо?

хоть одна из переменных модбас участвует в проекте?

жекон
22.08.2013, 18:38
Да вставлял одну в визуализацию другую в программму

Александр Приходько
22.08.2013, 22:32
А номера портов как задавали? COM1 = 2, COM2 = 3
Прошивка контроллера какая?

жекон
23.08.2013, 03:55
С портами пробовал и так и так , насчет версии прошивки у она по моему одна для СПК110

Александр Приходько
23.08.2013, 11:15
Версий прошивок для СПК1ХХ было выпущено много, и не факт, что к вам попала актуальная.
Загрузитесь в режиме конфигуратора и посмотрите, номер прошивки.

Также в режиме конфигуратора проверьте какие настройки портов у Вас заданы. Возможно, что порт работает в режиме RS232.

жекон
23.08.2013, 14:45
Версию прошивки теперь только на следующей недели, а порт через ваши библиотеки он же работал, и опрашивал модули, да и переключал я оба порта В RS-485.

ValeriyVK
26.08.2013, 10:22
Лучше делать программный опрос через библиотеки ModulesOwenLib, Syscom, ComConn, RSMode library
К тому-же можно обрабатывать коды ошибок с модулей ввода, у меня реализовано отдельной процедурой.
Пример программы
(AI_Err_Codes - моя функция, по сути равнозначна стандартной DWORD_TO_INT)


PROGRAM PLC_PRG_RS485
VAR

CurrentModule:INT:=1;
CNT:INT:=0; //счетчик, исп-ся для выявления задержек в опросе

//установки порта RS485, у СПК110 сдвиг номера на 1: на приборе 1-й, в программе 2-й
start:BOOL:=FALSE;
AllowWrite:BOOL:=TRUE;
settings:SysCom.COM_Settings;
settings2:SysCom.COM_SettingsEx;
ComHandle:SysCom.RTS_IEC_HANDLE;
res:SysCom.RTS_IEC_RESULT;
ret_res: INT;

conn:ComConn;
PortMode:RS_mode;

//Модули ввода/вывода
Mod1:MV110_8A_inputs;
Mod2:MV110_8A_inputs;
Mod3:MV110_8A_inputs;
Mod4:MY110_8R_outs;
Mod5:MY110_8R_outs;
Mod6:MK110_8dn_4R_outs; //МУ 8Д4Р, 4 выхода
Mod7:MK110_8dn_4R_inputs; //МУ 8Д4Р, 8 входов

Mod1_Enabl, Mod2_Enabl, Mod3_Enabl, Mod4_Enabl, Mod5_Enabl, Mod6_Enabl, Mod7_Enabl:BOOL:=FALSE;

END_VAR

IF Start = FALSE THEN
conn.PortNum:=2; //установки порта RS485, у СПК110 сдвиг номера на 1, 2-й ком-порт на приборе соответсвует 3-му программному.
conn.PortBaudrate:=115200;
conn.Port_ModeOn:=TRUE;
conn.Port_Mode:=RS_mode.RS_485; // режим RS485
conn.Port_CloseOn:=false;
conn(enable:= TRUE);
IF conn.Done=TRUE THEN
ComHandle:=conn.Handle;
Start:=TRUE;
CurrentModule:=1;
CNT:=0;

mod1.Addr:=1;
mod1.TimeOut:=T#500MS;
mod1.Handle:=ComHandle;

mod2.TimeOut:=T#500MS;
mod2.Handle:=ComHandle;
mod2.Addr:=2;

mod3.TimeOut:=T#500MS;
mod3.Handle:=ComHandle;
mod3.Addr:=3;

mod4.TimeOut:=T#500MS;
mod4.Handle:=ComHandle;
mod4.Addr:=4;

mod5.TimeOut:=T#500MS;
mod5.Handle:=ComHandle;
mod5.Addr:=5;

mod6.TimeOut:=T#500MS;
mod6.Handle:=ComHandle;
mod6.Addr:=6;

mod7.TimeOut:=T#500MS;
mod7.Handle:=ComHandle;
mod7.Addr:=6;
END_IF
END_IF

CASE CurrentModule OF
1:
//Опрашиваем модуль МВ8А по адресу 1

IF Mod1_Enabl=FALSE THEN
Mod1_Enabl:=TRUE;
END_IF
mod1(Enabl:=Mod1_Enabl);
IF mod1.done THEN
Mod1_Enabl:=FALSE;
mod1(Enabl:=Mod1_Enabl);
CurrentModule:=CurrentModule+1;

charr[1].ErrCode:=AI_Err_Codes(mod1.inpExcSCode1);
charr[2].ErrCode:=AI_Err_Codes(mod1.inpExcSCode2);
charr[3].ErrCode:=AI_Err_Codes(mod1.inpExcSCode3);
charr[4].ErrCode:=AI_Err_Codes(mod1.inpExcSCode4);
charr[5].ErrCode:=AI_Err_Codes(mod1.inpExcSCode5);
charr[6].ErrCode:=AI_Err_Codes(mod1.inpExcSCode6);
charr[7].ErrCode:=AI_Err_Codes(mod1.inpExcSCode7);
charr[8].ErrCode:=AI_Err_Codes(mod1.inpExcSCode8);

IF charr[1].ErrCode=0 THEN
charr[1].Value:=mod1.inp1;
ELSE
charr[1].Value:=0;
END_IF

IF charr[2].ErrCode=0 THEN
charr[2].Value:=mod1.inp2;
ELSE
charr[2].Value:=0;
END_IF

IF charr[3].ErrCode=0 THEN
charr[3].Value:=mod1.inp3;
ELSE
charr[3].Value:=0;
END_IF

IF charr[4].ErrCode=0 THEN
charr[4].Value:=mod1.inp4;
ELSE
charr[4].Value:=0;
END_IF

IF charr[5].ErrCode=0 THEN
charr[5].Value:=mod1.inp5;
ELSE
charr[5].Value:=0;
END_IF

IF charr[6].ErrCode=0 THEN
charr[6].Value:=mod1.inp6;
ELSE
charr[6].Value:=0;
END_IF

IF charr[7].ErrCode=0 THEN
charr[7].Value:=mod1.inp7;
ELSE
charr[7].Value:=0;
END_IF

IF charr[8].ErrCode=0 THEN
charr[8].Value:=mod1.inp8;
ELSE
charr[8].Value:=0;
END_IF

CNT:=0;
ELSE
CNT:=CNT+1;
END_IF
2:
//Опрашиваем модуль МВ8А по адресу 2

IF Mod2_Enabl=FALSE THEN
Mod2_Enabl:=TRUE;
END_IF
mod2(Enabl:=Mod2_Enabl);
IF mod2.done THEN
Mod2_Enabl:=FALSE;
mod2(Enabl:=Mod2_Enabl);
CurrentModule:=CurrentModule+1;

charr[9].ErrCode:=AI_Err_Codes(mod2.inpExcSCode1);
charr[10].ErrCode:=AI_Err_Codes(mod2.inpExcSCode2);
charr[11].ErrCode:=AI_Err_Codes(mod2.inpExcSCode3);
charr[12].ErrCode:=AI_Err_Codes(mod2.inpExcSCode4);
charr[13].ErrCode:=AI_Err_Codes(mod2.inpExcSCode5);
charr[14].ErrCode:=AI_Err_Codes(mod2.inpExcSCode6);
charr[15].ErrCode:=AI_Err_Codes(mod2.inpExcSCode7);
charr[16].ErrCode:=AI_Err_Codes(mod2.inpExcSCode8);

IF charr[9].ErrCode=0 THEN
charr[9].Value:=mod2.inp1;
ELSE
charr[9].Value:=0;
END_IF

IF charr[10].ErrCode=0 THEN
charr[10].Value:=mod2.inp2;
ELSE
charr[10].Value:=0;
END_IF

IF charr[11].ErrCode=0 THEN
charr[11].Value:=mod2.inp3;
ELSE
charr[11].Value:=0;
END_IF

IF charr[12].ErrCode=0 THEN
charr[12].Value:=mod2.inp4;
ELSE
charr[12].Value:=0;
END_IF

IF charr[13].ErrCode=0 THEN
charr[13].Value:=mod2.inp5;
ELSE
charr[13].Value:=0;
END_IF

IF charr[14].ErrCode=0 THEN
charr[14].Value:=mod2.inp6;
ELSE
charr[14].Value:=0;
END_IF

IF charr[15].ErrCode=0 THEN
charr[15].Value:=mod2.inp7;
ELSE
charr[15].Value:=0;
END_IF

IF charr[16].ErrCode=0 THEN
charr[16].Value:=mod2.inp8;
ELSE
charr[16].Value:=0;
END_IF

CNT:=0;
ELSE
CNT:=CNT+1;
END_IF
3:
//Опрашиваем модуль МВ8А по адресу 3

IF Mod3_Enabl=FALSE THEN
Mod3_Enabl:=TRUE;
END_IF
mod3(Enabl:=Mod3_Enabl);
IF mod3.done THEN
Mod3_Enabl:=FALSE;
mod3(Enabl:=Mod3_Enabl);
CurrentModule:=CurrentModule+1;
charr[17].ErrCode:=AI_Err_Codes(mod3.inpExcSCode1);
charr[18].ErrCode:=AI_Err_Codes(mod3.inpExcSCode2);
charr[19].ErrCode:=AI_Err_Codes(mod3.inpExcSCode3);
charr[20].ErrCode:=AI_Err_Codes(mod3.inpExcSCode4);
charr[21].ErrCode:=AI_Err_Codes(mod3.inpExcSCode5);
charr[22].ErrCode:=AI_Err_Codes(mod3.inpExcSCode6);
charr[23].ErrCode:=AI_Err_Codes(mod3.inpExcSCode7);
charr[24].ErrCode:=AI_Err_Codes(mod3.inpExcSCode8);

IF charr[17].ErrCode=0 THEN
charr[17].Value:=mod3.inp1;
ELSE
charr[17].Value:=0;
END_IF

IF charr[18].ErrCode=0 THEN
charr[18].Value:=mod3.inp2;
ELSE
charr[18].Value:=0;
END_IF

IF charr[19].ErrCode=0 THEN
charr[19].Value:=mod3.inp3;
ELSE
charr[19].Value:=0;
END_IF

IF charr[20].ErrCode=0 THEN
charr[20].Value:=mod3.inp4;
ELSE
charr[20].Value:=0;
END_IF

IF charr[21].ErrCode=0 THEN
charr[21].Value:=mod3.inp5;
ELSE
charr[21].Value:=0;
END_IF

IF charr[22].ErrCode=0 THEN
charr[22].Value:=mod3.inp6;
ELSE
charr[22].Value:=0;
END_IF

IF charr[23].ErrCode=0 THEN
charr[23].Value:=mod3.inp7;
ELSE
charr[23].Value:=0;
END_IF

IF charr[24].ErrCode=0 THEN
charr[24].Value:=mod3.inp8;
ELSE
charr[24].Value:=0;
END_IF

CNT:=0;
ELSE
CNT:=CNT+1;
END_IF
4:
//Опрашиваем модуль МУ8Р по адресу 3 - управление дискретными выходами

IF Mod4_Enabl=FALSE THEN
Mod4_Enabl:=TRUE;
END_IF
mod4(Enabl:=Mod4_Enabl, out1:=ChArrBit[1], out2:=ChArrBit[2], out3:=ChArrBit[3], out4:=ChArrBit[4],
out5:=ChArrBit[5], out6:=ChArrBit[6], out7:=ChArrBit[7], out8:=ChArrBit[8]);
IF mod4.done THEN
Mod4_Enabl:=FALSE;
mod4(Enabl:=Mod4_Enabl);
CurrentModule:=CurrentModule+1;
CNT:=0;
ELSE
CNT:=CNT+1;
END_IF
5:
//Опрашиваем модуль МУ8Р по адресу 5 - управление дискретными выходами

IF Mod5_Enabl=FALSE THEN
Mod5_Enabl:=TRUE;
END_IF
mod5(Enabl:=Mod5_Enabl, out1:=ChArrBit[9], out2:=ChArrBit[10], out3:=ChArrBit[11], out4:=ChArrBit[12],
out5:=ChArrBit[13], out6:=ChArrBit[14], out7:=ChArrBit[15], out8:=ChArrBit[16]);
IF mod5.done THEN
Mod5_Enabl:=FALSE;
mod5(Enabl:=Mod5_Enabl);
CurrentModule:=CurrentModule+1;
CNT:=0;
ELSE
CNT:=CNT+1;
END_IF
6:
//Опрашиваем модуль МУ8Д4Р по адресу 6 - управление 4 дискретными выходами

IF Mod6_Enabl=FALSE THEN
Mod6_Enabl:=TRUE;
END_IF
mod6(Enabl:=Mod6_Enabl, out1:=ChArrBit[17], out2:=ChArrBit[18], out3:=ChArrBit[19], out4:=ChArrBit[20]);
IF mod6.done THEN
Mod6_Enabl:=FALSE;
mod6(Enabl:=Mod6_Enabl);
CurrentModule:=CurrentModule+1;
END_IF
7:
//Опрашиваем модуль МУ8Д4Р по адресу 6 - 8 дискретных входов

IF Mod7_Enabl=FALSE THEN
Mod7_Enabl:=TRUE;
END_IF
mod7(Enabl:=Mod7_Enabl);
IF mod7.done THEN
Mod7_Enabl:=FALSE;
mod7(Enabl:=Mod7_Enabl);
CurrentModule:=CurrentModule+1;

ChArrDI[1].Value:=mod7.inp1;
ChArrDI[2].Value:=mod7.inp2;
ChArrDI[3].Value:=mod7.inp3;
ChArrDI[4].Value:=mod7.inp4;
ChArrDI[5].Value:=mod7.inp5;
ChArrDI[6].Value:=mod7.inp6;
ChArrDI[7].Value:=mod7.inp7;
ChArrDI[8].Value:=mod7.inp8;
CNT:=0;
ELSE
CNT:=CNT+1;
END_IF

ELSE
CurrentModule:=1;
END_CASE

IF CNT>100 THEN
CNT:=0;
CurrentModule:=CurrentModule+1;
END_IF



Девайсы добавлять конечно просто и удобно, но я сам не понял, что за ограничение на 10 опрашиваемых параметров в одном модбас-девайсе? Получается можно опросить 8 аналоговых входов и допустим еще считать всего 2 состояния канала, а как состояния остальных 6 каналов ? При этом еще один девайс с тем-же адресом добавить не получится (чтобы доопросить нехватающие параметры).... не айс.
А программно - как хочу так и ворочу, ограничений меньше.

Александр Приходько
27.08.2013, 00:17
Лучше делать программный опрос через библиотеки ModulesOwenLib, Syscom, ComConn, RSMode library
К тому-же можно обрабатывать коды ошибок с модулей ввода, у меня реализовано отдельной процедурой.
Пример программы
(AI_Err_Codes - моя функция, по сути равнозначна стандартной DWORD_TO_INT)

Девайсы добавлять конечно просто и удобно, но я сам не понял, что за ограничение на 10 опрашиваемых параметров в одном модбас-девайсе? Получается можно опросить 8 аналоговых входов и допустим еще считать всего 2 состояния канала, а как состояния остальных 6 каналов ? При этом еще один девайс с тем-же адресом добавить не получится (чтобы доопросить нехватающие параметры).... не айс.
А программно - как хочу так и ворочу, ограничений меньше.


При работе с CDS3.5 надо немного по другому смотреть на вещи.
Да, есть ограничение на число каналов.
НО!!!!
Все привыкли делать опрос по одному решистру. Но зачем? Не проще ли и не быстрее ли использовать групповой опрос?

Пример с МВ110-8A.

У вас 8 каналов (8 аналоговых входов). Каждый канал использует по 6 регистров

0-Положение десятичной точки в целом значении
1-Целое значение измерение со смещением точки
2-Статус измерения - код исключительной ситуации
3-Циклическое время измерения
4,5-Измерение в представлении с плавающей точкой

Вы создаете каналы длиной по 6 регистров:
9734
Далее эти каналы привязываете к переменным и обрабатываете в программе.

В моем примере с 8А опрашиваются абсолютно все регистры. Для большинства достаточно опрашивать по 3 регистра (ошибку + Float).
И поверьте, так опрос будет работать намного быстрее, чем каждый регистр опрашивать отдельно.

CODESYS 3.5 - это в первую очередь групповые запросы!

На днях выложу полноценную инструкцию по настройке Modbus в CDS3.5!

ValeriyVK
27.08.2013, 05:47
Спасибо, интересный подход )

Lam-Ka
27.08.2013, 09:21
А в CdS 2.4 подобное можно организовать?

жекон
28.08.2013, 15:02
Добрался наконец до контроллера версия OWEN-20130612-3180

Александр Приходько
28.08.2013, 17:18
А в CdS 2.4 подобное можно организовать?
Есть CDS2.3. Если вы делаете обмен через конфигурацию, то нельзя. К сожалению.
Но если вы делаете обмен посредством библиотеки Modbus? то она работает по подобному принципу.


Добрался наконец до контроллера версия OWEN-20130612-3180
Прошивка у Вас актуальная. Давайте поступим так.
Опишите,что вы пытаетесь делать и выложите архив вашего проекта.

Для того чтобы сделать архив проекта, необходимо открыть ваш проект. И в самом CODESYS сделать: Файл -> Архив проекта -> Сохранить отправить.
Галочки оставляете, только те, что стоят по умолчанию. После этого вы получите файл с расширением ProjectArchive. Его и выкладывайте.

Lam-Ka
28.08.2013, 17:35
Есть CDS2.3. Если вы делаете обмен через конфигурацию, то нельзя. К сожалению.
Но если вы делаете обмен посредством библиотеки Modbus? то она работает по подобному принципу.

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

Александр Приходько
28.08.2013, 20:53
Вы правы, я опечатался. То есть средствами библиотеки я могу организовать некий массив регистров и прочитать его одной командой?
Абсолютно верно.

Lam-Ka
28.08.2013, 20:59
Абсолютно верно.

А можно пример попросить?:rolleyes:

Александр Приходько
28.08.2013, 22:38
А можно пример попросить?:rolleyes:
Тут посмотрите:
http://www.owen.ru/forum/showthread.php?t=13588

Lam-Ka
28.08.2013, 22:55
Тут посмотрите:
http://www.owen.ru/forum/showthread.php?t=13588 Спасибо, а разницы в применении библиотеки Modbus.lib для разных линеек ПЛК нет?

Александр Приходько
29.08.2013, 03:12
Спасибо, а разницы в применении библиотеки Modbus.lib для разных линеек ПЛК нет?
Разница в нумерации портов. Все остальное абсолютно одинаковое.

Я очень рекомендую пользоваться поиском по форуму. На форуме очень много примеров и решенных вопросов. Если у Вас есть вопрос, поищите, возможно уже есть ответ. Если есть вопрос, задавайте его в соответствующей ветке. Данная тема предназначена для СПК и CODESYS 3.5.

Александр Приходько
29.08.2013, 03:46
Приветствую всех еще раз.

Выкладываю свое "Чудовище" по настройке Modbus в CODESYS 3,5.
Во вложении документ Adobe PDF. Для его просмотра необходима версия Adobe Reader 10 или 11.
В инструкции уже встроены обучающие видео материалы и написана пошаговая инструкция. Документ пока не финальный, но вполне читабельный. Прошу Вас ознакомиться и дать обратную связь по новому типу обучающих материалов.
9781

жекон
29.08.2013, 18:33
В принципе всё так и делал только почему-то опрос не идет, индикатор обмена не мигает посмотрите может что-то упустил по неопытности, да не по разумению 9793

Александр Приходько
29.08.2013, 20:21
В принципе всё так и делал только почему-то опрос не идет, индикатор обмена не мигает посмотрите может что-то упустил по неопытности, да не по разумению 9793Проект бегло просмотрел. Значит вот на что обратил внимание:
1) Каналы не привязаны к переменным. Соответственно они не опрашиваются.
Либо привязывайте их к переменным или в каждом слейв устройстве выставьте галку "Всегда обновлять переменные".
Если канал не связан с переменной и при этом не активна галка "Всегда обновлять переменные" обмена просто напросто не будет .
Такая вот военная хитрость.
9794
2) Для МВ1108АС вы не корректно сделали привязку переменной. Чуть позже я выложу пример по настройке модулей вода /вывода.
Как минимум там надо менять местами байты. Это стандартная фишка при работе с форматом REAL.
3) У модуля МДВВ вы читаете значения входов и выходов. А надо входы читать выходы писать. Для записи используйте функцию 16.
4) с мву Вы данные тоже читаете, хотя их надо писать.

Для начала на всякий случай первым делом проставьте везде галки.
Потом сделайте какие нибудь временные переменные и привяжите их к каналам.
Потом добейтесь обмена с МДВВ или МВУ - это самые простые модули в настройке. Только сделайте регистры выходных масок на запись а не на чтение.
Потом по примеру обмена с МВ1108А переделаете пример для 8АС.

жекон
30.08.2013, 03:46
Спасибо сейчас буду пробовать вечером отпишусь

жекон
30.08.2013, 14:39
Всё получилось, с МВ1108АС то-же разобралься взял за пример СПК207 поменял местами байты, жалко что в МВУ нет маски выходов, всем спасибо тему можно закрывать.

XopHeT
30.08.2013, 18:12
Вы на 7й странице забыли картинку вставить

Александр Приходько
03.09.2013, 08:37
Вы на 7й странице забыли картинку вставить
Спасибо. Правда не забыл, это просто не конечная версия. Это руководятво я еще немного дополню и выложу в раздел примеров.

жекон
03.09.2013, 15:41
Сегодня обнаружил такую штуку, как упоминал я раньше опрашиваются три модуля 8АС, МДВВ и МВУ сегодня заметил серьезное запаздывание по входам МДВВ, поставил обработку ошибки "Установить в Zero" и получил не задержку а перебои связи именно со входами, выхода работают нормально,8АС опрашивается без перебоев985598569854

Александр Приходько
06.09.2013, 13:20
Щас проверить возможности нет. На следующей неделе будет новая прошивка, которая работает с последними версиями девайсов. Возможно это исправит проблему.

arlyn
11.09.2013, 14:06
Здравствуйте. Я хочу попробовать связать спк207 и МДВВ (для примера) по модбасу RS485, с библиотеками овен это легко получается, но через конфигурацию ни как. В примере я хочу лишь прочитать регистр 0х0033, но и это ни как не выходит :(

Александр Приходько
11.09.2013, 17:20
Здравствуйте. Я хочу попробовать связать спк207 и МДВВ (для примера) по модбасу RS485, с библиотеками овен это легко получается, но через конфигурацию ни как. В примере я хочу лишь прочитать регистр 0х0033, но и это ни как не выходит :(

1. Рекомендую прошить СПК на прошивку с сайта: 2,531
http://www.owen.ru/catalog/32050189

2. Установить новый таргет и обновить версию таргета в проекте

3. Обновить версии Com порта, мастера и слейва как минимум до 3.4.0.0

4. Почитайте этот документ:
http://www.owen.ru/forum/showthread.php?t=15674&p=117771&viewfull=1#post117771

arlyn
12.09.2013, 09:40
1. Рекомендую прошить СПК на прошивку с сайта: 2,531
http://www.owen.ru/catalog/32050189

2. Установить новый таргет и обновить версию таргета в проекте

3. Обновить версии Com порта, мастера и слейва как минимум до 3.4.0.0

4. Почитайте этот документ:
http://www.owen.ru/forum/showthread.php?t=15674&p=117771&viewfull=1#post117771

Все четыре пункта проверил, прошивка была 2,531. Теперь и с овеновской библиотекой связь не идет, предпологаю это из за ошибки число 255. Что случилось. Может быть такое что com порт сгорел?

capzap
12.09.2013, 09:45
Все четыре пункта проверил, прошивка была 2,531. Теперь и с овеновской библиотекой связь не идет, предпологаю это из за ошибки число 255. Что случилось. Может быть такое что com порт сгорел?

у Вас весьма странный порядок выполнения ПОУ, не удивительно что могут быть проблемы

Александр Приходько
12.09.2013, 10:27
И еще в режиме конфигурации выставьте настройки порта в нужный режим.
Только учтите, что при загрузке конфигуратора немного не корректно считываются режимы работы портов.

Сейчас собираем новую прошивку с заново переписанным конфигуратором, там эта проблема исправлена.
Поэтому загрузите конфигуратор. Несколько раз нажмите на поле нужного интерфейса. Выберите нужный режим, нажмите настроить интерфейсы и после этого кнопку перезагрузка.

arlyn
12.09.2013, 11:07
Не знаю что сделал. но все так же неожиданно заработало, как и перестало работать до этого. Как то все странно.. Всеравно всем спасибо.

capzap
12.09.2013, 11:25
Не знаю что сделал. но все так же неожиданно заработало, как и перестало работать до этого. Как то все странно.. Всеравно всем спасибо.

ну это значит мое предположение верно, какой то ПОУ завис ожидая нужных сигналов, а весь остальной проект остановил работу ожидая от него управляющий сигнал

arlyn
16.09.2013, 15:07
Скажите пожалуйста при включении модбаса в конфигураторе можно ли смотреть возникающие ошибки, или потерявшиеся значения? При большой загрузке сети, часто некоторые данные не успевают записаться в регистр. Сначала записать регистр, а потом прочитать его чтобы посмотреть записалось ли значение мне кажется плохим решением. Наверно есть решения получше, подскажите пожалуйста.

Александр Приходько
16.09.2013, 15:21
Скажите пожалуйста при включении модбаса в конфигураторе можно ли смотреть возникающие ошибки, или потерявшиеся значения? При большой загрузке сети, часто некоторые данные не успевают записаться в регистр. Сначала записать регистр, а потом прочитать его чтобы посмотреть записалось ли значение мне кажется плохим решением. Наверно есть решения получше, подскажите пожалуйста.

Ошибки смотреть можно.
Для этого скопируйте название слейв-устройства.
Далее поместите его в Вашу программу PLC_PRG
Потом поставьте точку и Вам будут доступны переменные этого элемента. Одним из них является последняя ошибка Modbus.

Пример есть тут (начиная с 9-й минуты):

http://youtu.be/GHUrbkP-gU4

arlyn
16.09.2013, 16:02
Ошибки смотреть можно.
Для этого скопируйте название слейв-устройства.
Далее поместите его в Вашу программу PLC_PRG
Потом поставьте точку и Вам будут доступны переменные этого элемента. Одним из них является последняя ошибка Modbus.

Пример есть тут (начиная с 9-й минуты):
http://youtu.be/GHUrbkP-gU4

видео интересное спасибо, а есть где коды ошибок byModbusError

Александр Приходько
16.09.2013, 18:35
видео интересное спасибо, а есть где коды ошибок byModbusError
Поищите по менеджеру библиотек. Когда вы добавляете модбас, в менеджер библиотек добавляется соответствующая библиотека.
В ней есть расписанные ошибки. По крайней мере я их там находил.

arlyn
17.09.2013, 08:25
Поищите по менеджеру библиотек. Когда вы добавляете модбас, в менеджер библиотек добавляется соответствующая библиотека.
В ней есть расписанные ошибки. По крайней мере я их там находил.

В библиотеке iodrvmodbus.ModbusSlaveComport.byModbusError в описании нет кодов ошибок. А если заглянуть в iodrvmodbus.CmpErrors есть глобальные переменные
Errors неужели они будут соответствовать ошибкам в библиотеке ModbusSlaveComport.byModbusError ?:confused:

Александр Приходько
18.09.2013, 17:38
В библиотеке iodrvmodbus.ModbusSlaveComport.byModbusError в описании нет кодов ошибок. А если заглянуть в iodrvmodbus.CmpErrors есть глобальные переменные
Errors неужели они будут соответствовать ошибкам в библиотеке ModbusSlaveComport.byModbusError ?:confused:

Уверены, что смотрели? )
Попробуем еще раз:

http://www.youtube.com/watch?v=CSwB2l7DM9M

arlyn
28.10.2013, 11:13
Скажите пожалуйста чем вызванно ограничение на 10 опрашиваемых каналов в одном модбас-девайсе, в конфигураторе.
У меня есть прибор УБЗ-302 он максимум за раз может дать прочитать 12регистров. И я могу прочитать только 12*10=120регистров (там именно 120 регистров параметров). А мне необходимо еще иметь возможность половину из этих регистров редактировать из программы. И таким образом мне не хватает 10каналов на один девайс.
Как это ограничение можно обойти?

Александр Приходько
28.10.2013, 13:28
Скажите пожалуйста чем вызванно ограничение на 10 опрашиваемых каналов в одном модбас-девайсе, в конфигураторе.
У меня есть прибор УБЗ-302 он максимум за раз может дать прочитать 12регистров. И я могу прочитать только 12*10=120регистров (там именно 120 регистров параметров). А мне необходимо еще иметь возможность половину из этих регистров редактировать из программы. И таким образом мне не хватает 10каналов на один девайс.
Как это ограничение можно обойти?

Это ограничение компания 3S снимет в CODESYS 3.5 SP4 - он выйдет 5 декабря 2013.
Сейчас могу предложить добавить еще одно устройство и внести в него не влезающие регистры.

vlalys
27.01.2014, 08:36
Добрый день, Александр! Не получается считать информацию в СПК107 с модуля МВ110-32ДН по Модбас. Для отладки связи составил простенький проект. При попытке обращения к модулю ввода выдается сообщение "ошибка шины". Попробовал разные версии Modbus Master и Modbus Slave, результат тот же. Возможно что-то напутано с адресацией, или какая-то другая причина? Помогите, пожалуйста, разобраться. Архив проекта во вложении.

Мурат Ахриев
27.01.2014, 10:32
Добрый день, Александр! Не получается считать информацию в СПК107 с модуля МВ110-32ДН по Модбас. Для отладки связи составил простенький проект. При попытке обращения к модулю ввода выдается сообщение "ошибка шины". Попробовал разные версии Modbus Master и Modbus Slave, результат тот же. Возможно что-то напутано с адресацией, или какая-то другая причина? Помогите, пожалуйста, разобраться. Архив проекта во вложении.

Поставьте галочку в поле "Всегда обновлять переменные" и привяжите переменные 11568

Проверьте распайку кабеля 11567

Проверьте конфигурацию последовательного порта модуля ввода через конфигуратор.

Проверьте не стоит ли перемычка заводских настроек на модуле ввода.

vlalys
27.01.2014, 12:19
Мурат, спасибо. Все проверил - распайка кабеля соответствует, привязал ВСЕ переменные, галочку поставил, конфигурацию проверил, перемычки нет... Эффект тот же - дает ошибку шины.

Мурат Ахриев
27.01.2014, 13:17
Зайдите в конфигуратор на самой панели и проверьте правильно ли выставлен порт(должен стоять RS485).
Что бы войти в конфигуратор, тапните на экране в момент появления белой надписи на черном фоне(в момент загрузки).
Пароль: owen

vlalys
27.01.2014, 13:36
Мурат, СПАСИБО!!!!! Всё заработало! Действительно настройка порта.

Drahtor
31.01.2014, 14:27
Не получается опросить МДВВ через конфигурацию, с МВА проблем нет. Подскажите, что я делаю не так? 11643

Мурат Ахриев
31.01.2014, 15:23
В конфигурации вы привязываете переменную типа REAL, к читаемому регистру, для считывания битовой маски состояния входов следует использовать тип WORD.

Ошибки вот здесь 11647 , 11648

Drahtor
31.01.2014, 15:33
[QUOTE=Мурат Ахриев;129533]В конфигурации вы привязываете переменную типа REAL, к читаемому регистру, для считывания битовой маски состояния входов следует использовать тип WORD.
По инструкции, которую скачал отсюда же, для привязки входов создается переменная типа INT. Попробовал и INT, и Word - не помогает

Мурат Ахриев
31.01.2014, 16:02
Одинаковые ли настройки интерфейса СПК и МДВВ, а в частности настроен ли контроль четности в МДВВ как EVEN? 11651

Drahtor
03.02.2014, 11:52
Спасибо, создал все заново и заработало. Вывел на экран окно с показаниями с первого входа МВ110-8А. Дабы не переставлять байты местами в REAL нельзя ли использовать INT и прямо в свойствах визуализации выставить масштабирование, допустим делить на 10, как, например в TraceMode (пример, согласен, не очень)? И почему в свойствах Rectangle, в котором я наблюдаю переменную INT со входа, надо добавлять текст "%d", иначе ничего и не отображается?

Мурат Ахриев
03.02.2014, 12:03
1.%d это идентификатор который сообщает, что данные находящиеся в Word'e нужно выводить как целочисленное десятичное число.
2.Сразу выводить int и делить не получиться, сначала нужно произвести конвертацию в тип REAL затем разделить на 10, а уже затем выводить на визуализацию при помощи идентификатора %*.*f(где *.* количество выводимых на экран знаков до запятой и после).

Drahtor
03.02.2014, 15:39
Все получилось, даже прикольно. Остался вопрос по написанию самой программы: для изменения байтов в REAL с выхода МВ110-8А создал FB, далее его вызываю PLC_PRG, где входу присваиваю значение с входа МВ110-8А, а на выходе получаю нужную переменную. Все работает, но для 8 входов МВ110-8А надо 8 раз вызывать этот FB. Можно ли сделать проще? Читал здесь про групповой опрос регистров,понял не совсем, а может и совсем не... Допустим первой группе регистров (первому каналу ) я присваиваю переменную СH_1:ARRAY [0..5] OF WORD; мне нужно значение 3-го регистра. как мне к нему обратиться из программы: СH_1.0:WORD? Тогда компилятор ругается... 11708 11709

Мурат Ахриев
03.02.2014, 16:07
Групповой запрос регистров удобен для МВ110-8АС т.к. в нем регистры расположены по порядку. В случае с МВ110-8А регистры расположены не по порядку, соответственно каждый канал нужно отдельно читать и отдельно менять местами байты в REAL.

gladkiynikita
11.04.2014, 01:44
Здравствуйте. Никак не могу установить связь с модулями. Пишет Bus Error.

capzap
11.04.2014, 07:26
Здравствуйте. Никак не могу установить связь с модулями. Пишет Bus Error.

Если Вы открываете для себя какие то новые направления, начинайте с простых вещей. Нужно установить соединение по модбас, через конфигуратор, создайте пустой проект, добавте через конфигурацию устройства модбас, именуйте каналы какие хотите увидеть в программе и добавте в PLC_PRG какое нибудь действие с созданной переменной модбаса. А использовать и конфигуратор и одновременно библиотечный модбас, даже для разных портов больше проблем создаст, чем поможет освоить в кратчайшие сроки.
ЗЫ при открытии проекта у меня девайс неотобразился, видимо есть проблемы с версией КДС, таргетами и прошивкой

gladkiynikita
11.04.2014, 09:21
Версия Кдс - 3.5.4, таргет такой же версии. Прошивку я поменял на последнюю, тестовую 3.6.5.3. Девайс у меня отображается нормально, проект компилируется. Вопрос - в примерах почти везде скорость 115200, а у меня сконфигурировано на 9600. Мне не понять, почему он bus error пишет? Com порт 3, на спк105 он единственный для rs485. Сетевые параметры одинаковые для модулей и в настройках модбаса в Кдс.

capzap
11.04.2014, 09:44
по настройкам не знаю, кроме того что Вы ставите в плк, надо чтоб и в модуле они были идентичны, а по самой программе должно быть примерно так как на видео http://www.owen.ru/forum/showthread.php?t=11797&p=88181&viewfull=1#post88181

Мурат Ахриев
11.04.2014, 11:44
Версия таргет файла для прошивки 3.653 должна быть 3.5.4 v19.
Для последовательного порта СПК105 в среде Codesys нужно указывать номер порта -2, также установите в конфигураторе на самой панели режим работы порта как RS485.

gladkiynikita
11.04.2014, 11:45
Сделал попроще. Удалил модуль аналоговых входов, оставил только дискретный. удалил как вы и говорили библиотечный блок открытия COM-порта и опроса модуля. оставил только конфигурацию modbus c чтением регистра. Все компилируется, грузится, но.. bus failure. Причем при старте ПЛК на СПК моргает светодиод COM в течение примерно секунд 3, потом прекращает - видимо он пытается открыть порт. А на модуле тишина. Я уже подумал, может я припаял к разъему DB9 провода неправильно - но вроде как в инструкции. Куда дальше копать, кто подскажет? Спасибо.1257312574
Скриншот разъема из мануала на спк105 - так я и припаял.

gladkiynikita
11.04.2014, 12:50
Версия таргет файла для прошивки 3.653 должна быть 3.5.4 v19.
Для последовательного порта СПК105 в среде Codesys нужно указывать номер порта -2, также установите в конфигураторе на самой панели режим работы порта как RS485.
С версией таргет все правильно. В конфигураторе вообще нет выбора режима для порта, ибо там написано, что только на СПК 105 один COM порт работает и в режиме RS-232, и в RS-485. 12575В мануале по настройке указан номер порта 3, а не 2. С номером 2 заработало. Спасибо, Мурат Ахриев и Capzap.

Мурат Ахриев
11.04.2014, 13:07
Спасибо за найденную ошибку в руководстве, исправим.

tabolt
25.06.2014, 10:23
Добрый день. Прочитал ветку. Тут в основном СПК используется, как мастер. У меня проблема с СПК107 в режиме слэйв. В проекте описал модбас устройство, два Inputs канал и два Outputs. Мастером в сети выступает ноутбук с сетевым преобразователем и программой модбастеста. Судя по тому что считывать из СПК107 значения outputs-каналов получается, настроил все верно. Правда я немного запутался в терминологии. Канал outputs, а в комментарии написано что регистры входные. Вообщем опытным путем установил, что командой 4 читаются outputs каналы, командой 3 inputs каналы. Также есть необходимость записи значений в СПК. Попробовал, в ноутбуке программа теста модбус пишет что запись прошла успешно. Логи обмена подтверждают, что от СПК107 пришел соответствующий ответ на команду записи. А в отладчике Кодесиса значения привязанных переменных остаются нулевыми. Помогите разобраться в чем может быть проблема. Проект приложил, он смысловой нагрузки мало несет, там попытка наработать навыки с СПК.

tabolt
25.06.2014, 12:11
Еще обратил внимание, что при соотнесении переменной к каналу, значение в столбце "адресс" становится зачеркнутым. В видеопримере из инструкции такого не было.

tabolt
25.06.2014, 12:44
Все, кажется, сам разобрался. При описании модбус-слэйв устройства не снял галочку с опции таймаут. И по истечении этого таймаута данные сбрасывались в нули.

serj885588
21.07.2014, 16:51
Добрый день, пытаюсь освоить СПК107 с подключенным к нему I7041 дискретный модуль ввода, связь организовываю через протокол modbus, подключил к ком порту№1 (настроил как 2), при попытки залогиниться выдается ошибка "Ошибка шины" в slave устройстве, направьте пожалуйста на путь истинный=)

Nts
22.07.2014, 09:40
Сам не пользовался данным модулем, однако 5 минут в гугле дало свой результат:
серия I7000-работают по протоколу DCON
серия M7000-работают по протоколу Modbas RTU
я так понимаю,что он у вас и не должен работать

serj885588
22.07.2014, 12:18
Да все верно но codesys вроде как работает же с dcon, не могли бы вы мне подсказать, как я понял чтоб появилось универсальное устройство dcon нужно подгрузить какие то библиотеки

Nts
22.07.2014, 13:46
кодесис много чего поддерживает, а вот это нет:
http://www.owen.ru/catalog/panelnij_programmiruemij_logicheskij_kontroller_ov en_spk107/50292523

Andrei Z
01.08.2014, 21:56
а как выбрать какой протокол лучше использовать? напиример СПК и Мх110? это просто у каждого свои удобства или познания?

Адлан
28.10.2014, 14:41
В руководстве написано, что записать в канал можно по фронту логической переменной. Где найти эту самую логическую? Спасибо

Nts
28.10.2014, 15:31
логическая переменная-любая булевая переменная проекта,желательно глобальная(локальные не пробовал)

Адлан
28.10.2014, 16:05
Спасибо. Слона не приметил. А мне казалось, везде посмотрел -))

_VvvV_
30.10.2014, 22:33
Помогите с проблемой уже неделю борюсь:
http://www.owen.ru/forum/showthread.php?t=18699

_VvvV_
31.10.2014, 09:01
Все - ночь усилий и нашел проблему: физически сзади на спк110 com-порты подписаны как com1 и com2, а программно надо задавать со смещением +1, т.е. если мы подключились к com1 панели спк110, то в программе надо задавать обращение к com-2, а если физически подключились к спк110 по com2, то в программе надо обращаться к com3.

capzap
31.10.2014, 09:20
Все - ночь усилий и нашел проблему: физически сзади на спк110 com-порты подписаны как com1 и com2, а программно надо задавать со смещением +1, т.е. если мы подключились к com1 панели спк110, то в программе надо задавать обращение к com-2, а если физически подключились к спк110 по com2, то в программе надо обращаться к com3.

эта информация для тех кто умеет пользоваться поиском не актуальна http://www.owen.ru/forum/showthread.php?t=14051&p=99366&viewfull=1#post99366

ASo
31.10.2014, 09:43
Или читает РЭ, приложение Г.5, с.75.

_VvvV_
31.10.2014, 21:27
Почему-то дали давать комментарии и советы, после того как проблема была решена, где вы были до этого???

capzap
31.10.2014, 23:19
Почему-то дали давать комментарии и советы, после того как проблема была решена, где вы были до этого???

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

_VvvV_
01.11.2014, 21:12
потому что предполагается, что человек взявшийся за программирование контроллера читает документацию и таких проколов быть не должно.

Вы знаете я с codesys столкнулся впервые, так я пишу на 1с, Delphi, Java. на ранних этапах, кода только осваивал эти языки, тоже сидел на форумах, и мне всегда подсказывали, помогали, т.к. очень много вопросов и непонимания на первых этапах и все это понимали, что не скажешь такого здесь. ладно проблему я решил.

capzap
01.11.2014, 21:30
Вы знаете я с codesys столкнулся впервые, так я пишу на 1с, Delphi, Java. на ранних этапах, кода только осваивал эти языки, тоже сидел на форумах, и мне всегда подсказывали, помогали, т.к. очень много вопросов и непонимания на первых этапах и все это понимали, что не скажешь такого здесь. ладно проблему я решил.

Ну и как должна была выглядеть наша помощь в такой ситуации? Слабо сказать какого цвета на мне трусы?

Александр Приходько
02.11.2014, 01:30
Все - ночь усилий и нашел проблему: физически сзади на спк110 com-порты подписаны как com1 и com2, а программно надо задавать со смещением +1, т.е. если мы подключились к com1 панели спк110, то в программе надо задавать обращение к com-2, а если физически подключились к спк110 по com2, то в программе надо обращаться к com3.
Об этом написано в руководстве по эксплуатации на устройство.

mak123
14.12.2014, 19:58
Добрый день.
Прошу оказать помощь. Как сменить версию девайса (порт, модбас мастер) на более старую, в системе только одна версия 3.5.5.0 и ни каких устаревших версий нет, не ясно как эти версии установить в систему. Таргет с версией 3,5,4,20.

ASo
14.12.2014, 20:05
Установите галку "отображать все версии".

mak123
14.12.2014, 22:58
Установил галку, но ничего не появилось.

ASo
15.12.2014, 06:55
Репозитарий устанавливали?

techniker357
23.12.2014, 22:34
Здравствуйте. Подключал к СПК110 8 модулей ОВЕН и частотник ПЧВ-3 по Modbus. В Codesys видел все девайсы. Но была проблема - 2 модуля МВ110.8АС вышли из строя, купили 2 новых, подключение и конфигурация входов - один в один. Но их уже не видит. Прикладываю тест-программу для опроса - в ней это модули А3 и А4. В онлайне у них статус Bus Failure. Спустя минуту отваливаются еще один 32-канальный модуль выходов и частотник. Скорость 115200, контроль четности - нет, 8 бит данных, 1 стоп-бит. Пробовал подключать только эти 2 проблемных модуля к СПК110 - один видит, другой - нет. Пробовал отдельно тот , который не видит - так и не видит его даже в одиночку. Через конфигуратор оба модуля (как и все остальные модули и частотник) находятся и все прекрасно работает. Прикладываю также конфигурации этих проблемных модулей. Пожалуйста, помогите, что делать? Где искать?

Upd. Обновил Codesys до 3.5 SP5. Модули стали видны, опрос идет, но... первые 2 минуты. Потом появляется в статусе -> "Not Running". Измененный проект во вложении. Ссылка на видео, где видно, что пропадает связь -> https://yadi.sk/i/qDswZ_Lbdaoz7

Адлан
08.01.2015, 18:35
Здравствуйте. Пытаюсь связать СПК107 и ПЛК100. ТАргет 3.5.4.20, ModbusCOM=3.4.0.0, ModbusMaster: если поставить 3.5.4.0 или ниже - не включается авторестарт. Включается при версии 3.5.5.0, но она выше версии таргета. Что делать?

Ilych
08.01.2015, 23:06
попробуйте 3.5.4.0, но включите в код ручного сброса ошибки связи, в одной из соседних веток он приведен.

Адлан
18.01.2015, 11:56
Использую порт2 (физический - 1). Сначала на ПЛК100, потом решил хоть с МК110 связаться. Картина одинаковая: ошибок связи нет, индикатор COM помигивает, но реально ни чтения, ни записи не происходит. В чем может быть причина?
Спасибо

capzap
18.01.2015, 12:00
Использую порт2 (физический - 1). Сначала на ПЛК100, потом решил хоть с МК110 связаться. Картина одинаковая: ошибок связи нет, индикатор COM помигивает, но реально ни чтения, ни записи не происходит. В чем может быть причина?
Спасибо

типовое предложение: переменные, заданные в модбасе, в приложении только объявлены или используются в каком нибудь ПОУ?

Адлан
18.01.2015, 17:38
Они привязаны к фигуре в визуализации. А это важно?
То есть, в том проекте, который выложил, есть только прямоугольник в визуализации. Но такая же проблема возникла и разрабатываемом проекте - там переменные задействованы в ПОУ...

Как ни странно, элементарно присвоение в ПОУ помогло. СПК предполагается использовать, как панель. Значит, мне придется выполнять в ненужном ПОУ какие-то ненужные операции?

totiljya@mail.ru
28.01.2015, 22:03
Скажите, пожалуйста, решилась ли проблема с добавлением слейв-каналов более 10, как раньше в этой ветке писал Александр Приходько? Решить ее добавлением аналогичного слейв-устройства не получилось т.к. выдавало ошибку о дублирующихся адресах. Все 10 каналов в полном размере забиты под завязку - неужели нельзя добавить еще каналы, помогите кто чем может!?

Трофимов Артем
29.01.2015, 10:32
Использую порт2 (физический - 1). Сначала на ПЛК100, потом решил хоть с МК110 связаться. Картина одинаковая: ошибок связи нет, индикатор COM помигивает, но реально ни чтения, ни записи не происходит. В чем может быть причина?
Спасибо

во вкладке соотнесение справа внизу есть выпадающее меню - сейчас у Вас стоит Use Parent device setting. установите Enable 2 Always in bus cycle.
У Вас сейчас опрос контроллер ведёт, однако кодесис не знает к какой задаче привязать обновление информации для кода. проделав вышесказанное у Вас привязка будет к циклу основной программы ПЛК.

SuperChu
23.04.2015, 17:22
Добрый день. Столкнулся с проблемой на СПК110. При подключении более четырех устройств (МК110 4К 4P -3 шт, МК110 16Д,МУ110-8и) скорость обмена падает так, что входы на блоке 16Д обновляются около 1 сек. На всех блоках регулярно загорается лампа авария (в настройках блоков стоит макс. тайм аут 1 сек). Остальные настройки блоков заводские, кроме номера и скорости (установил 115200).
В настройках модбас для всех устройств в меню соотнесения входов-выходов стоит "Включено2". В программе пока обращений ко входам-выходам устройств нет. Ситуация меняется когда меняю время цикла MainTask, но не сильно (время цикла меняю с 10мс на 100мс). Но даже при 100мс часто вываливается сообщение : "Шина не запущена" и возле устройства в списке слейвов модбаса значок с зеленого круга меняется на желтый треугольник.
Какие есть еще параметры, влияющие на скорость работы?

SuperChu
24.04.2015, 09:12
Провел сегодня еще эксперимент. Загрузил проект с примером работы для СПК105+МВ110-224-16Д. В настройках поменял только скорость с 9600 на 115200. Сигнал на вход подавал перемычкой (тупо рукой закорачивал ком со входом)с периодичностью раз в секунду. Визуализация на панели никак на это не реагировала, светодиод com на панели в это время вообще гас. После того как значение на входе устанавливалось на 2 сек и более, светодиод начинал моргать с нормальной скоростью, загорался соответствующий квадратик на визуализации. Что я таки делаю не так ? Читаю тут про 20-30мс на опрос блока. Как??

Lyohin
27.04.2015, 13:39
Main Task - 5 или 10мс.
Время между фреймами можно задать 10ms
Таймаут отклика - 30мс
В конфигурациях модулей ввода-вывода параметр "Задержка ответа сети RS-485" задать 0 сек.
Скорость 115200 должна быть одинаковая в СПК и модулях в/в.

ol1965
25.09.2015, 14:56
Ошибка IoDrvModbus. SPK107 3.5.4.20, Modbus COM 3.4.0.0, Master 3.5.4.0, Slave 3.5.4.0 или 3.5.5.0 других таргетов нет

Alexmorphy
12.09.2016, 12:16
Добрый день.
Когда вы добавляете эти компоненты, ставьте галку отображать все версии, и выбирайте версии девайсов 3,5,2,0 или ниже.


А если нет версий ниже, откуда их закачивать?

Евгений Кислов
12.09.2016, 12:19
А если нет версий ниже, откуда их закачивать?

Они входят в архив репозитория:
http://www.owen.ru/uploads/txtlic.php?url=http:/owen.ru/upl_files/PO/CODESYS_Repository_Archive_V3.5_SP4.zip

Alexmorphy
12.09.2016, 12:27
Спасибо. Я использую CodeSys 3.5 patch 8. Есть разница в используемой версии среды?

Евгений Кислов
12.09.2016, 12:34
Спасибо. Я использую CodeSys 3.5 patch 8. Есть разница в используемой версии среды?

C точки зрения обмена, роль играют только используемые версии modbus компонентов.

Alexmorphy
12.09.2016, 14:02
А для модуля МВ110-16ДН таргеты старые откуда можно закачать?

Евгений Кислов
12.09.2016, 14:20
А для модуля МВ110-16ДН таргеты старые откуда можно закачать?

Вопрос непонятен, что значит "таргет для модуля"?

Alexmorphy
12.09.2016, 16:53
У меня в Codesys версия данного модуля выше версии СПК

Евгений Кислов
12.09.2016, 17:43
У меня в Codesys версия данного модуля выше версии СПК

А какая версия таргет-файла СПК?

Alexmorphy
12.09.2016, 18:04
Версия используемой среды 3.5.4.20

Alexmorphy
12.09.2016, 18:10
Версия используемой среды 3.5.4.20

Пардон. Таргет панели

Евгений Кислов
12.09.2016, 20:09
Я понял, почему у вас возник вопрос - модули имеют версию 3.5.4.5, но последний разряд - это внутренняя нумерация. Т.е. это можно читать как "разработано для использования в 3.5 SP4 и выше, номер сборки - 5)".

Так что используйте эту версию - проблем совместимости не будет.

НикПавл
20.09.2016, 15:19
Снова вопрос об ограничении количества каналов для slave устройства для протокола Modbus. Среда Codesys V3.5 SP5 Patch 3. При попытке добавить больше 10 каналов в устройство для двух совершенно одинаковых устройств в одно устройство добавляет больше десяти, в другое нет. Так решена ли все-таки проблема с ограничением?

Евгений Кислов
20.09.2016, 15:40
Снова вопрос об ограничении количества каналов для slave устройства для протокола Modbus. Среда Codesys V3.5 SP5 Patch 3. При попытке добавить больше 10 каналов в устройство для двух совершенно одинаковых устройств в одно устройство добавляет больше десяти, в другое нет. Так решена ли все-таки проблема с ограничением?

Проблема решена в CODESYS версии 3.5 SP5 Patch5 и выше - при использовании соответствующих версий modbus компонентов.

НикПавл
20.09.2016, 16:13
Версии modbus компонентов не ниже target, или Вы говорите о каких-то других версиях?

Евгений Кислов
20.09.2016, 17:33
Версии modbus компонентов не ниже target, или Вы говорите о каких-то других версиях?

Конкретно для Modbus Master в данном случае нужно использовать 3.5.5.0, несмотря на то, что она превышает версию таргета.

НикПавл
20.09.2016, 18:03
Спасибо за помощь

НикПавл
21.09.2016, 10:42
Вдогонку еще один вопрос. К ethernet порту необходимо подключить более десяти устройств с различными IP, хотелось бы для каждого сконфигурировать своего мастера-так удобнее и нагляднее работать дальше. В стандартной конфигурации при добавлении TCP мастеров(или любых устройств) снова ограничение не больше десяти. Что это значит, это как-то лечится? Среда Codesys V3.5 SP5 Patch 3.Target: SPK 2xx.03.CS.WEB 3.5.4.20

Евгений Кислов
21.09.2016, 11:18
Вдогонку еще один вопрос. К ethernet порту необходимо подключить более десяти устройств с различными IP, хотелось бы для каждого сконфигурировать своего мастера-так удобнее и нагляднее работать дальше. В стандартной конфигурации при добавлении TCP мастеров(или любых устройств) снова ограничение не больше десяти. Что это значит, это как-то лечится? Среда Codesys V3.5 SP5 Patch 3.Target: SPK 2xx.03.CS.WEB 3.5.4.20

Нет, это ограничение среды программирования.

НикПавл
21.09.2016, 11:30
понятно, спасибо

RA.
10.10.2016, 16:52
Подскажите пожалуйста!

Следующая идея жизнеспособна ли?

С помощью библ Modbus опрашиваю MB-slave. И хочу сделать так: использовать один экземпляр ФБ "MB_RD_HOLD_REGS", но вызывать его как-нибудь поочередно с разными начальными регистрами.
далее содержимое буфера перекладывал бы уже в разные GVL переменные.

т.е. на цикле 1 ФБ "MB_RD_HOLD_REGS" обращается к регистру например 1001,
на цикле 2 ФБ "MB_RD_HOLD_REGS" - к регистру 1002
...
на цикле 10 ФБ "MB_RD_HOLD_REGS" - к регистру 1010
и тд.

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

Ну и вопрос как правильно сделать переход к следующему регистру, какую делать паузу (и надо ли) между опросом регистров?
или задумка вкорне не верна и строго 1 экземпяр ФБ - 1 запрос к slave?

ASo
10.10.2016, 20:59
Дождаться прочтения регистра по флагу и только после этого переходить к следующему регистру.
В руководстве.... это подробно расписано.

RA.
10.10.2016, 21:57
так в том и дело, что как в руководстве с двумя разными экземплярами проблем нет. а тут и буфер один и ...

Спорягин Кирилл
10.10.2016, 23:43
Посмотрите вот тут (http://www.owen.ru/forum/showthread.php?t=25112).
Эта библиотека сделана для v2, но она легко переписывается (и я ее уже переписал для себя) на версию 3.

RA.
14.10.2016, 01:12
Доброго времени суток!
Товарищи, подскажите кто и как делает контроль связи при использовании modbus.lib ??

Я реализовал так:
Вычитываю фиксированную переменную (адрес/slave id) с устройства (все тот же danfoss FC051 он же ПЧВ1), сбрасывая в ноль перед чтением и сравниваю потом с константой (=так же Slave ID)



SlaveID:=0; // Сброс в 0, для каждый цикл

IF enable THEN up:=FALSE; // Проверяем стартовое условие, если FALSE - ничего дальше не делаем
IF Write_Command <> Prev_Command THEN ex:=81; END_IF; // Проверяем наличие команд на запись
CASE ex OF // Последовательный опрос регистров

0: BlockRead ....


50:
BlockRead (Enable:=Enable, Mode:=MB_RTU, DevAddr:=DevAdr, FirstAddr:=8309, Quantity:=1, ComHandle:=CHandle, TimeOut:=TOut, Buffer:=abyRead_buffer);
IF BlockRead.Complete THEN
IF BlockRead.Exception=0 THEN
//B2W.IN2Byte[0]:=abyRead_buffer[1];
//B2W.IN2Byte[1]:=abyRead_buffer[0];
SlaveID:=abyRead_buffer[1]; // передаю в переменную вычитанное значение из буфера
END_IF;


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

Это все работает. Но
большое НО - бывает значение не обновляется до полуминуты (30 секунд) - уже в CFC блоком TON это отслеживаю.
И так как бы по всем переменным. Программа в целом работает, опрашивает, но вот по ходу это самое условие не всегда срабатывает:

IF BlockRead.Complete THEN
IF BlockRead.Exception=0 THEN

Как можно соптимизировать?
- пробовал "играть" временем цикла задачи от 2 до 20 мс (как понимаю это фактически интервал между соседними запросами к устройству, от перехода к след условию CASE)
- делал паузу до 3 сек после завершения всего опроса
- да, с точки зрения минимизации запросов-ответов у меня не правильно: 16 запросов в основном по 1 регистру. но по другому ни как: у устройства не сквозная карта памяти, идет ошибка при попытки считать "соседние" регистры. но даже при этом не также все плохо должно быть...

кардинально изменений можно сказать нет ((

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