Страница 2 из 9 ПерваяПервая 1234 ... ПоследняяПоследняя
Показано с 11 по 20 из 83

Тема: ПЛК63 Modbus Master

  1. #11

    По умолчанию

    однако я буфер совершенно не трогаю, и точно в нем ничего не меняю. более того, функция отлично работает при чтении с мв110, частотника Delta Vfd, но только не с плк63. см. предидущий пост.

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

    Ответ от слэйва ПЛК63 имеется, такой как надо, но почему-то возникает ошибка таймаута у мастера, хоть лоб разбей, словно биты, посылаемые в ответ слэйвом ПЛК63, чем-то отличаются от битов, посылаемых в ответ другими устройствами. И уж совсем непонятно, что при опросе слэйва через программу терринг модбас слэйв опрашивается без ошибки таймаута (ответ всегда был нормальный).

    Может быть это связано с диапазоном адресов регисторов? Например при обращении к МВ110 регист 51, к частотнику 8449, 8448, а при обращении к ПЛК63 - 332-511??
    Последний раз редактировалось Доренский Алексей; 09.10.2010 в 14:00.

  2. #12

    По умолчанию

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

  3. #13

    По умолчанию

    Дело в том, что частотник отвечает вообще без задержки. Для этого я его посадил на порт ПЛК63 (1 - 232) через АС3-М-220. Даже если устройства имеют задержку 1 мс, ответ читается нормально.
    В программе ненужные места позакомментировал (рабочий вариант, прошу прощения за нагромождение всякой всячины), чтение происходит при значении в CASE ukazatel=2; при ukazatel=1 ничего не делается.

    CASE_MAX=3, поэтому досчитав до трех программа натыкается на пустую строку для ukazatel=3, этим обеспечивается псылка запроса только один раз, чтобы я мог проследить на компьютере запрос/ответ. Для примера программа производит единожды опрос МВ110 с адресом 01, маски входов - регистр 51. Все отлично. Но стоит поставить адрес 08, регистр 333 - это ПЛК63 слэйв - как возникает ошибка таймаута.

    При чтении МВ110:
    000001 17:26:42.800 3A :
    000002 17:26:42.800 30 0
    000003 17:26:42.816 31 1
    000004 17:26:42.816 30 0
    000005 17:26:42.816 33 3
    000006 17:26:42.816 30 0
    000007 17:26:42.816 30 0
    000008 17:26:42.816 33 3
    000009 17:26:42.816 33 3
    000010 17:26:42.816 30 0
    000011 17:26:42.816 30 0
    000012 17:26:42.816 30 0
    000013 17:26:42.816 31 1
    000014 17:26:42.816 43 C
    000015 17:26:42.816 38 8
    000016 17:26:42.832 0D .
    000017 17:26:42.832 0A .
    000018 17:26:42.832 3A :
    000019 17:26:42.832 30 0
    000020 17:26:42.832 31 1
    000021 17:26:42.832 30 0
    000022 17:26:42.832 33 30 30
    000023 17:26:42.832 32 2
    000024 17:26:42.832 32 2
    000025 17:26:42.832 30 0
    000026 17:26:42.832 34 4
    000027 17:26:42.832 30 0
    000028 17:26:42.832 39 9
    000029 17:26:42.847 41 A
    000030 17:26:42.847 0D .
    000031 17:26:42.847 0A .

    запрос-ответ нормальные, все работает.
    Подставляю адрес 08, регистр 333 - это ПЛК63 слэйв
    2:
    IF enabl=FALSE AND enabl2=FALSE
    THEN
    adres:=08;
    registr:=333 ;
    colreg:=1;
    COM_Port_NUM:=1;
    enabl:=TRUE;
    END_IF
    Получаю:
    000001 17:31:42.751 3A :
    000002 17:31:42.751 30 0
    000003 17:31:42.751 38 8
    000004 17:31:42.751 30 0
    000005 17:31:42.751 33 3
    000006 17:31:42.751 30 0
    000007 17:31:42.751 31 1
    000008 17:31:42.751 34 4
    000009 17:31:42.751 44 D
    000010 17:31:42.751 30 0
    000011 17:31:42.767 30 0
    000012 17:31:42.767 30 0
    000013 17:31:42.767 31 1
    000014 17:31:42.767 41 A
    000015 17:31:42.767 36 6
    000016 17:31:42.767 0D .
    000017 17:31:42.767 0A .
    000018 17:31:42.798 3A :
    000019 17:31:42.798 30 0
    000020 17:31:42.798 38 8
    000021 17:31:42.798 30 0
    000022 17:31:42.798 33 3
    000023 17:31:42.798 30 0
    000024 17:31:42.814 32 2
    000025 17:31:42.814 30 0
    000026 17:31:42.814 30 0
    000027 17:31:42.814 30 0
    000028 17:31:42.814 31 1
    000029 17:31:42.814 46 F
    000030 17:31:42.814 33 3
    000031 17:31:42.814 0D .
    000032 17:31:42.814 0A .
    В итоге функция выдала ошибку таймаута.

    14D - это 333 в десятичной


    Через терринг модбас спрашиваю:
    Request
    :0803014D0001A6

    Response
    :0803020001F3

    Все нормально, ошибки нет.

    И в том и в другом случае - ответы верные, но терринг модбас не дает ошибки таймауте, а функция ПЛК - дает.
    Голову сломал уже, не пойму почему?
    Последний раз редактировалось Доренский Алексей; 09.10.2010 в 14:40.

  4. #14

    По умолчанию

    код в приложении:
    Вложения Вложения
    • Тип файла: zip v1_1.zip (74.3 Кб, Просмотров: 42)

  5. #15

    По умолчанию

    Привожу работающий пример записи (чтение не делал) 63 -> 63

    Код:
    PROGRAM SendOutdoor
    VAR
    	SendModbus1: MB_WR_REGS;
    	SendModbus2: MB_WR_SNG_REG;
    	ES: BOOL:= TRUE;
    	TimeOut: TIME:= T#50ms;
    	Buffer: ARRAY[0..255] OF BYTE;
    	OutdoorPtr: POINTER TO BYTE;
    	ErrorSend1: ARRAY[2..5] OF BYTE;
    	ErrorSend2: ARRAY[2..5] OF BYTE;
    	Temp: BOOL:= TRUE;
    	Addr: BYTE:= 2;
    	EndSendStored: BOOL;
    	HavePause:TON;
    END_VAR
    
    IF ComPortState = 2 THEN
    	IF Temp THEN
    		IF ES THEN
    			OutdoorPtr:= ADR(Outdoor);
    			Buffer[1]:= OutdoorPtr^;
    			OutdoorPtr:= OutdoorPtr+1;
    			Buffer[0]:= OutdoorPtr^;
    			OutdoorPtr:= OutdoorPtr+1;
    			Buffer[3]:= OutdoorPtr^;
    			OutdoorPtr:= OutdoorPtr+1;
    			Buffer[2]:= OutdoorPtr^;
    		END_IF
    		SendModbus1(
    			Enable:= ES,
    			Mode:= MB_RTU,
    			DevAddr:= Addr,
    			FirstAddr:= 148,
    			Quantity:= 2,
    			ComHandle:= Settings.Port,
    			TimeOut:= Timeout,
    			Buffer:= Buffer);
    		ES:= FALSE;
    		IF SendModbus1.Complete THEN
    			EndSendStored:=TRUE;
    			ErrorSend1[Addr]:= SendModbus1.Exception;
    		END_IF
    		HavePause(IN:= EndSendStored,PT:=T#250ms);
    		IF HavePause.Q THEN
    			ES:= TRUE;
    			EndSendStored:= FALSE;
    			Addr:= Addr+1;
    		END_IF
    		IF Addr = 6 THEN
    			Addr:= 2;
    			Temp:= FALSE;
    		END_IF
    	ELSE
    		SendModbus2(
    			Enable:= ES,
    			Mode:= MB_RTU,
    			DevAddr:= Addr,
    			RegAddr:= 346,
    			Value:= BOOL_TO_WORD(Summer)+1,
    			ComHandle:= Settings.Port,
    			TimeOut:= Timeout);
    			ES:= FALSE;
    		IF SendModbus2.Complete THEN
    			EndSendStored:=TRUE;
    			ErrorSend2[Addr]:= SendModbus2.Exception;
    		END_IF
    		HavePause(IN:= EndSendStored,PT:=T#250ms);
    		IF HavePause.Q THEN
    			ES:= TRUE;
    			EndSendStored:= FALSE;
    			Addr:= Addr+1;
    		END_IF
    		IF Addr = 6 THEN
    			Addr:= 2;
    			Temp:= TRUE;
    		END_IF
    	END_IF
    END_IF
    После вызова ф-ии надо сбросить Enable, чтобы тать ей работать.
    Проверку выходных переменных стОит делать так, иначе у меня были проблемы.

  6. #16

    По умолчанию

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

  7. #17

    По умолчанию

    тем не менее снимите - чтобы начать отсчет тайм-аута(?).

  8. #18

    По умолчанию

    Итак 798-767=31. Уже 31 миллисекунда между последним байтом запроса и 1-м байтом ответа.
    А общая пауза между концом запроса и концом ответа составляет
    814-767=47 мс.
    + задержки в мастере.
    Соответственно повторяю вопрос, какая задержка между запросом и ответом выставлена в slave? В ПЛК63, который работает как slave!

  9. #19

    По умолчанию

    Прошу прощения что сразу не ответил на ваш вопрос. 30ms.
    Последний раз редактировалось Доренский Алексей; 11.10.2010 в 05:31.

  10. #20

    По умолчанию

    программа для слэйва в приложении. слэйв общается как мастер с двумя модулями мв110 и частотником через порт 232 и преобразователь ас3-м (внутренний интерфейс шкафа автоматизации). через 485 - с мастером (внешний интерфейс).
    пробовал уменьшать/увеличивать задержку слэйва, и время таймаута мастера. результат тотже.
    Вложения Вложения
    Последний раз редактировалось Доренский Алексей; 11.10.2010 в 05:51.

Страница 2 из 9 ПерваяПервая 1234 ... ПоследняяПоследняя

Ваши права

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