PDA

Просмотр полной версии : ПЛК304(308)+4ПЛК110



Alex51
01.04.2012, 14:17
Здравствуйте. Совсем недавно начал знакомиться с CDS и мое знакомство началось :( с 3 версии этого продукта. Сразу возникли трудности. А именно: необходимо через ПЛК 304/308 опрашивать и управлять четырьмя ПЛК 110. Посмотрел примеры подключения модулей (МВ/МУ). Но в библиотеке ModulsOwenLib нет блоков для ПЛК. Прочитал, что блок для ПЛК можно сделать из готовых модулей ввода/вывода. Может кто-то может подсказать что именно нужно изменить в библиотеке (желательно поподробнее, т.к. опыта программирования мало) или укажет другие способы решения данной проблемы :confused: . За ранее спасибо.

lara197a
01.04.2012, 14:19
Если не купили ещё, то лучше соедините 4 ПЛК 110 по UDP и всЁ.
Или пишите опрос через библиотеки самостоятельно.
1 вариант работает быстрее.

capzap
01.04.2012, 14:25
Здравствуйте. Совсем недавно начал знакомиться с CDS и мое знакомство началось :( с 3 версии этого продукта. Сразу возникли трудности. А именно: необходимо через ПЛК 304/308 опрашивать и управлять четырьмя ПЛК 110. Посмотрел примеры подключения модулей (МВ/МУ). Но в библиотеке ModulsOwenLib нет блоков для ПЛК. Прочитал, что блок для ПЛК можно сделать из готовых модулей ввода/вывода. Может кто-то может подсказать что именно нужно изменить в библиотеке (желательно поподробнее, т.к. опыта программирования мало) или укажет другие способы решения данной проблемы :confused: . За ранее спасибо.

мне кажется слишком все усложняете, ПЛК от модулей отличается тем что модбас слейв надо самому создавать, для мастера измениться только адресация регистров и их количество

Alex51
01.04.2012, 14:38
Спасибо за то, что так быстро отвечаете.
Касательно ответа lara197a - да оборудование уже есть, поэтому желательно сделать на нем.
Теперь по поводу ответа от capzap. Если я правильно вас понимаю, то в CDS 2.3 я на ПЛК 110 настраиваю ModBus Slave, а затем в CDS3 настраиваю любой модуль из ModulsOwenLib под эти переменные?

Alex51
01.04.2012, 14:40
Или можно просто взять готовый модуль не изменяя его внутренностей и подовать на его вход эти переменные?

capzap
01.04.2012, 15:00
в CDS 2.3 я на ПЛК 110 настраиваю ModBus Slave, а затем в CDS3 настраиваю любой модуль из ModulsOwenLib под эти переменные?
как то так

Alex51
01.04.2012, 15:03
Спасибо. Буду пробовать

capzap
01.04.2012, 15:19
В КДС3 открываете саму библиотеку ModulsOwenLib и смотрите как она работает, берете её за пример и делаете свой опрос своих слейвов

Alex51
01.04.2012, 16:25
Вот внутренности блока МВ110-х.8Д:
FUNCTION_BLOCK MV110_8D_inputs
VAR_INPUT
(*идентификатор порта*) Handle:SysCom.RTS_IEC_HANDLE;
(*разрешение на работу*) Enabl:BOOL;
(*режим работы ModBus (MB_RTU, MB_Ascii), по умолчанию RTU*) Modd:MB_MODE:=MB_RTU ;
(*адресс прибора, по умолчанию 16*) Addr:BYTE:=16;
(*таймаут, по умолчанию 100мс*) TimeOut: TIME:=T#100MS;
(*число перезапросов, по умолчанию 3*) ErCL:BYTE:=3;

END_VAR
VAR_OUTPUT
(*состояния 1го входа прибора*) inp1:BOOL;
(*состояния 2го входа прибора*) inp2:BOOL;
(*состояния 3го входа прибора*) inp3:BOOL;
(*состояния 4го входа прибора*) inp4:BOOL;
(*состояния 5го входа прибора*) inp5:BOOL;
(*состояния 6го входа прибора*) inp6:BOOL;
(*состояния 7го входа прибора*) inp7:BOOL;
(*состояния 8го входа прибора*) inp8:BOOL;

(*код ошибки*) wErrCode:WORD;
(*флаг завершения*) done:BOOL;
END_VAR
VAR
rtrig:R_TRIG;
trig:rs;
ErrCount:BYTE:=0;
err:WORD;
cmpl:BOOL;
Exception: BYTE;
DataSize: WORD;
RegAddr:WORD:=16#33;
get_modbus:MB_RD_HOLD_REGS;
BUFFER: ARRAY [0..255] OF BYTE;
x: WORD;
END_VAR


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

(*IF SysComRead(handle, ADR(tempBuf), 255, 0, ADR(res)) <> 0 THEN
err:=0;
END_IF*)

IF cmpl THEN
IF err=0 THEN (*Если нет ошибок, то получаем данные из буфера типа INT*)
x:=0;
x:=BYTE_TO_WORD(BUFFER[1]) OR SHL(BYTE_TO_WORD(BUFFER[0]),8);
inp1:=x.0;
inp2:=x.1;
inp3:=x.2;
inp4:=x.3;
inp5:=x.4;
inp6:=x.5;
inp7:=x.6;
inp8:=x.7;

done:=TRUE;
ErrCount:=0;
wErrCode:=Err;
trig(RESET1:=TRUE);

ELSE
IF (ErrCount >= ErCL) THEN
wErrCode:=Err;
ErrCount:=0;
done:=TRUE;
trig(RESET1:=TRUE);
END_IF
ErrCount:=ErrCount+1;
END_IF
END_IF

Мне кажется, что достаточно будет задать начальный регистр и количество регистров опрашиваемого ПЛК? И еще в таком случае необходимо будет использовать два блока: на ввод и вывод или нет? Извините если задаю много глупых вопросов:confused:

capzap
01.04.2012, 17:11
как раз так и надо делать, FirstAddr:= начальный регистр, Quantity:= количество регистров, MB_RD_HOLD_REGS только для чтения нескольких регистров

Alex51
01.04.2012, 17:19
Спасибо за помощь. Пока вроде вопросов больше нет

Barboris
11.07.2012, 13:52
А в чем идея опрашивать модуль через библиотеку вместо того, чтобы создать в конфигурации плк модбас-слейв и через его регистры?

N1ckeL
22.02.2013, 13:44
помогите настроить связь плк 304 с плк 150 (чтение дискретных входов с плк 150) хотелось бы пример программы и описание, т.к. я в этом не разбираюсь. заранее спасибо.

capzap
22.02.2013, 13:52
помогите настроить связь плк 304 с плк 150 (чтение дискретных входов с плк 150) хотелось бы пример программы и описание, т.к. я в этом не разбираюсь. заранее спасибо.
определились по какому каналу связи будете "случаться"?

N1ckeL
25.02.2013, 13:26
RS-232. (сам студент, еще мало опыта в настройке сети)

Николаев Андрей
25.02.2013, 13:32
RS232 не подойдет.
Рекомендую либо RS-485 (если сильно разнесены ПЛК) или Ethernet.
Протокол обмена соответственно ModBus RTU или ModBus TCP.
ПЛК304 будет мастером. ПЛК150 Слэйвом, соответственно.

N1ckeL
25.02.2013, 13:45
к сожалению, на ПЛК 304 есть только один rs-485 (к нему подключен GSM-модем) и 3 порта rs-232. А почему нельзя настроить по 232-му?

Николаев Андрей
25.02.2013, 13:49
Ну если у Вас один ПЛК150 - можно. И то с ограничениями. Порт DBUG на ПЛК150 имеет ограничения по скорости (см. РЭ на прибор).

N1ckeL
25.02.2013, 13:50
планируется подключить плк 150 и плк 63

Николаев Андрей
25.02.2013, 13:58
А как давно Вы ПЛК304 покупали?
Чем занят RS485?

N1ckeL
25.02.2013, 14:33
к rs-485 подключен ПМ-01. когда был куплен плк я не знаю. как я уже написал выше, я студент и разрабатываю лабораторный стенд (для дипломного проекта).

capzap
25.02.2013, 14:44
у 304 же четыре последовательных порта и два из них могут быть rs485

N1ckeL
25.02.2013, 14:55
на моем только один

capzap
25.02.2013, 15:20
ну так для диплома можно и по локалке соединить плк и использовать UDP чтоб меньше проблем было. Даже протокол можно не использовать, просто передавать массив байт

N1ckeL
25.02.2013, 15:34
идея, конечно, заманчивая, но хотелось бы настроить modbus

capzap
25.02.2013, 16:40
мой вариант надежнее :)

Николаев Андрей
26.02.2013, 09:29
Переключить модем на 232 тоже не получится?

N1ckeL
26.02.2013, 11:58
нет, там только rs485. я решил разветвить rs485 посредством шины, думаю так будет правильнее