Показано с 1 по 10 из 16

Тема: Не могу подружить 2 устройства через modbus.lib

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию Не могу подружить 2 устройства через modbus.lib

    На столе ПЛК100+расходомер взлет + ОВЕН мк110.8дн.4р

    Тестовая программа:
    Код:
    (*Устанавливаем настройки COM-порта*)
    IF port_opened=0 THEN
    		Settings.Port:=com_num;               (*номер COM-порта*)
    		Settings.dwBaudRate:= 115200;    (*скорость*)
    		Settings.byParity:=0;
    		Settings.dwTimeout:=0;
    		Settings.byStopBits:=0;
    		Settings.dwBufferSize:=0;
    		Settings.dwScan:=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 (*Удачно проинициализировали*)
    
    CASE master1 OF
    
    0: 
    get1_modbus(
    	Enable:=Enable:= NOT get1_modbus.Complete,		(* разрешение работы блока *)
    	Mode:=MB_RTU,		(*режим передачи*)
    	DevAddr:=8 ,				(*адрес*)
    	FirstAddr:=2 ,				(*номер регистра*)
    	Quantity:=1,				(*количество регистров*)
    	ComHandle:=Settings.Port , (*номер COM-порта*)
    	TimeOut:=TimeOut , 		(*Таймаут T#50ms*)
    	Buffer:=Buffer_out,			(* буфер данных *)
    	Complete=>cmpl ,		(* скопировать признак завершения операции *)
    	Exception=>err ,			(* скопировать регистр ошибок *)
    	ByteCnt=>DataSize );		(*кол-во считанных байтов *)
    (*если установлен признак завершения операции, то *)
    IF cmpl THEN
    	IF err=0 THEN (*Если нет ошибок, то получаем данные из буфера типа INT*)
    		x:=BYTE_TO_WORD(BUFFER_out[1]) OR SHL(BYTE_TO_WORD(BUFFER_out[0]),8);
    	ELSE
    		errcount:=errcount +1;
    	END_IF
    	master1 := 3;
    END_IF
    
    
    2:  get1_modbus(
    	Enable:= NOT get1_modbus.Complete ,			(* разрешение работы блока *)
    	Mode:=MB_RTU,		(*режим передачи*)
    	DevAddr:=48 ,				(*адрес*)
    	FirstAddr:=50 ,				(*номер регистра*)
    	Quantity:=1,				(*количество регистров*)
    	ComHandle:=Settings.Port , (*номер COM-порта*)
    	TimeOut:=TimeOut , 		(*Таймаут T#50ms*)
    	Buffer:=Buffer_out,			(* буфер данных *)
    	Complete=>cmpl ,		(* скопировать признак завершения операции *)
    	Exception=>err ,			(* скопировать регистр ошибок *)
    	ByteCnt=>DataSize );		(*кол-во считанных байтов *)
    (*если установлен признак завершения операции, то *)
    IF cmpl THEN
    	IF err=0 THEN (*Если нет ошибок, то получаем данные из буфера типа INT*)
    		x:=BYTE_TO_WORD(BUFFER_out[1]) OR SHL(BYTE_TO_WORD(BUFFER_out[0]),8);
    	ELSE
    		errcount:=errcount +1;
    	END_IF
    	master1 := 3;
    END_IF
    
    
    3:
     TimeOut2(IN :=TRUE,PT:=T#50ms);
     TimeOut2;
     IF TimeOut2.Q THEN
    	g:=g+1;
    	master1 := 0;
     	(*IF g/2 = TRUNC(g/2) THEN
    		 master1 := 2; 
    	END_IF*)
    	TimeOut2.IN := FALSE;
    	TimeOut;
    END_IF
    
    END_CASE
    
    END_IF
    В таком виде программа работает, опрашивается Взлет, ошибок 0. Убираю комментирование в 3м кейсе (подключаю второй модуль ОВЕН) и у Взлета каждая вторая ошибка 255. Что я делаю не так? Через конфигуратор оба работают нормально с редкими ошибками.
    Последний раз редактировалось Атаман; 03.03.2017 в 10:38.

Похожие темы

  1. Ответов: 23
    Последнее сообщение: 19.08.2016, 11:49
  2. Как узнать базовый ModBus адрес устройства для ModBus ASCII?
    от Александр Подыман в разделе Сервисное ПО
    Ответов: 3
    Последнее сообщение: 03.03.2016, 12:49
  3. Ответов: 2
    Последнее сообщение: 08.12.2015, 10:33
  4. Ответов: 3
    Последнее сообщение: 26.11.2014, 15:18
  5. Не могу подружить ДТС и НПТ-2
    от _Rookie_ в разделе Эксплуатация
    Ответов: 5
    Последнее сообщение: 14.11.2014, 13:39

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •