PDA

Просмотр полной версии : СПК107+ТРМ138+протокол овен



Инженер23
16.02.2016, 19:41
В общем в настройках ТРМ который у меня нет возможности выбора протокола передачи, полагаю это значит он умеет только по протоколу ОВЕН
Нашел описание работы протокола с примером, насколько я понял библиотека siscomlib устарела и ей на смену пришла syscom - библиотеки в проект добавил все равно не компилируется не понимаю что не так и не могу найти примера. Компиятор ругается на Settings:=Settings что на мой взгляд вообще бред. Подскажите правильный пример, мануал или что у меня не так.
Что эта строчка вообще делает COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK );

Трофимов Артем
18.02.2016, 10:31
у Вас в COM_service подгружена уже определённая версия библиотеки syscom.
удалите отдельно добавленную syscom , а две переменные - settings и Com_num измените как тип переменных на :
Settings: ComSerice.COM_Settings; (* настройки последова-тельного порта*)
com_num: ComSerice.COM_PORTS:=1; (*0 - RS-485, 1 - RS-232*)

Инженер23
18.02.2016, 13:24
Спасибо за ответ но все равно чего то не хватает, похоже порт не открывается. Светодиод ком порта на СПК не мигает.

PROGRAM PLC_PRG
VAR
get_fl_owen:OWEN_GET_REAL; (*Чтение параметра типа Real*)
send_fl_owen:OWEN_SET_REAL; (*Запись параметра типаRe al*)
COM_SERVICE1: COM_SERVICE; (*открытиеCOM-порта*)
cmpl: BOOL; (* признак завершения операции*)
err: INT; (*номер ошибки*)
port_opened: BYTE := 0; (*состояние порта*)
com_num: ComSerice.COM_PORTS:=1; (*0 - RS-485, 1 - RS-232*)
Settings:ComSerice.COM_Settings; (* настройки последова-тельного порта*)
TimeOut: TIME:=T#50MS; (*таймаут*)
Enabl: BOOL:=TRUE; (*состояние работы блока*)
wTime: WORD; (*значение времени для измери-теля*)
master1: BYTE := 0;
A: REAL; (*считанное значение из ТРМ201*)
b: REAL:=30;
END_VAR


*Устанавливаем настройкиCOM-порта*)
IF port_opened=0 THEN
COM_SERVICE1.Settings.SPort:=com_num; (*номерCOM-порта*)
COM_SERVICE1.Settings.ulBaudrate:=9600; (*скорость*)
COM_SERVICE1.Settings.byParity:=0;
COM_SERVICE1.Settings.ulTimeout:=0;
COM_SERVICE1.Settings.byStopBits:=1;
COM_SERVICE1.Settings.ulBufferSize:=0;
//COM_SERVICE1.Settings.ulScan:=0;
END_IF
COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK );
(*ЕслиCOM-порт открыт, то переходим к приему и передачи данных*)
IF COM_SERVICE1.ready THEN
port_opened:=2;
END_IF

IF port_opened=2 THEN (*Удачно проинициализировали*)
(*чтение параметра типаReal из прибора ТРМ201 с адресом8 из параметр с именемPV и индексом0*)
get_fl_owen(
Enable:=Enabl , (* разрешение работы блока*)
Addr:=8 , (*адрес прибора*)
AddrLen:=A8BIT , (*длина адреса*)
Name:='pv' , (*имя параметра, значение которого считываем*)
Index:=65535 , (*индекс параметра*)
RealType:=FLOAT24 , (*тип параметра, значение которого считываем*)
ComHandle:= COM_SERVICE1.Settings.SPort, (*номерCOM-порта*)
TimeOut:=TimeOut , (*ТаймаутT#50ms*)
Complete=>cmpl , (* скопировать признак готовности результата*)
Value=>a , (*считанное значение*)
wTime=>wTime , (*значение времени для измерителя*)
Error=> err ); (* скопировать регистр ошибок*)
(*если установлен признак завершения операции, то*)

IF Enabl = FALSE THEN
Enabl := TRUE;
END_IF
IF err <> 0 THEN
Enabl := FALSE;
END_IF
END_IF

dr_alf
05.10.2017, 15:29
Тоже не работает с этим кодом. Прибор ТРМ 210, пробовал так же ТРМ 101. Принудительно порт открываю, значение 65535 на выходе Error появляется с периодичностью в пол секунды, а Value не удается увидеть.
Сделал аналогичный проект на CFC, открытие порта при помощи ComConn, - все работает.