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

Тема: Однократный опрос модулей Мх210 (через библиотеку)

  1. #1

    По умолчанию Однократный опрос модулей Мх210 (через библиотеку)

    Здравствуйте. Опрашиваю модули МВ210-101, МВ210-212 и запись в модули МУ210-402 с помощью библиотеки OWENCommunication. В чем суть проблемы: при загрузке проекта в контроллер, модули опрашиваются только один раз. Нет циклического опроса. При этом опрос проходит без ошибок, данные получаю. Опрос организовал согласно "CoDeSys V3.5. Настройка обмена по протоколу Modbus. Раздел 5.9.3" при небольших изменениях. Возможно я что-то не учел. Прошу помочь, так как в моем понимании все должно работать. Опрос модулей и запись в модули разделены на 3 POU. Привожу код опроса модулей МВ210-101.
    PHP код:
    PROGRAM Read_AI_All
    VAR
        
    // ФБ Открытие коммуникационного блока
        
    fbTCPClient_AI1        ocl.TCP_Client;
        
    fbTCPClient_AI2        ocl.TCP_Client;
        
    fbTCPClient_AI3        ocl.TCP_Client;
        
    fbTCPClient_AI4        ocl.TCP_Client;
        
    fbTCPClient_AI5        ocl.TCP_Client;
        
    fbTCPClient_AI6        ocl.TCP_Client;
        
    fbTCPClient_AI7        ocl.TCP_Client;
        
    fbTCPClient_AI8        ocl.TCP_Client;
        
    fbTCPClient_AI9        ocl.TCP_Client;
        
    fbTCPClient_AI10        ocl.TCP_Client;
        
    fbTCPClient_AI11        ocl.TCP_Client;
        
    fbTCPClient_AI12        ocl.TCP_Client;
        
        
        
    // ФБ опроса модуля 
        
    fbMV210_101_AI1        ocl.MB_TcpRequest// МВ210-101 AI1 (каналы 1 - 8)
        
    fbMV210_101_AI2        ocl.MB_TcpRequest// МВ210-101 AI2 (каналы 1 - 8)
        
    fbMV210_101_AI3        ocl.MB_TcpRequest// МВ210-101 AI3 (каналы 1 - 8)
        
    fbMV210_101_AI4        ocl.MB_TcpRequest// МВ210-101 AI4 (каналы 1 - 8)
        
    fbMV210_101_AI5        ocl.MB_TcpRequest// МВ210-101 AI5 (каналы 1 - 8)
        
    fbMV210_101_AI6        ocl.MB_TcpRequest// МВ210-101 AI6 (каналы 1 - 8)
        
    fbMV210_101_AI7        ocl.MB_TcpRequest// МВ210-101 AI7 (каналы 1 - 8)
        
    fbMV210_101_AI8        ocl.MB_TcpRequest// МВ210-101 AI8 (каналы 1 - 8)
        
    fbMV210_101_AI9        ocl.MB_TcpRequest// МВ210-101 AI9 (каналы 1 - 8)
        
    fbMV210_101_AI10        ocl.MB_TcpRequest// МВ210-101 AI10 (каналы 1 - 8)
        
    fbMV210_101_AI11        ocl.MB_TcpRequest// МВ210-101 AI11 (каналы 1 - 8)
        
    fbMV210_101_AI12        ocl.MB_TcpRequest// МВ210-101 AI12 (каналы 1 - 8)
        
        // Данные с модулей МВ210-101
        
    Read_AI1    : ARRAY [1..8OF Read_AI;    // Данные с модуля МВ210-101 AI1 (каналы 1 - 8)
        
    Read_AI2    : ARRAY [1..8OF Read_AI;    // Данные с модуля МВ210-101 AI2 (каналы 1 - 8)
        
    Read_AI3    : ARRAY [1..8OF Read_AI;    // Данные с модуля МВ210-101 AI3 (каналы 1 - 8)
        
    Read_AI4    : ARRAY [1..8OF Read_AI;    // Данные с модуля МВ210-101 AI4 (каналы 1 - 8)
        
    Read_AI5    : ARRAY [1..8OF Read_AI;    // Данные с модуля МВ210-101 AI5 (каналы 1 - 8)
        
    Read_AI6    : ARRAY [1..8OF Read_AI;    // Данные с модуля МВ210-101 AI6 (каналы 1 - 8)
        
    Read_AI7    : ARRAY [1..8OF Read_AI;    // Данные с модуля МВ210-101 AI7 (каналы 1 - 8)
        
    Read_AI8    : ARRAY [1..8OF Read_AI;    // Данные с модуля МВ210-101 AI8 (каналы 1 - 8)
        
    Read_AI9    : ARRAY [1..8OF Read_AI;    // Данные с модуля МВ210-101 AI9 (каналы 1 - 8)
        
    Read_AI10    : ARRAY [1..8OF Read_AI;    // Данные с модуля МВ210-101 AI10 (каналы 1 - 8)
        
    Read_AI11    : ARRAY [1..8OF Read_AI;    // Данные с модуля МВ210-101 AI11 (каналы 1 - 8)
        
    Read_AI12    : ARRAY [1..8OF Read_AI;    // Данные с модуля МВ210-101 AI12 (каналы 1 - 8)
        
        
        
    tTimeout_TCPClient    TIME := T#400MS;
        
    tTimeOut_TCPRequest    TIME := T#400MS;
        
    INT;
        
    iAI_Number    INT := 1;
    END_VAR



    ====================================================================

    CASE 
    iAI_Number OF
        
    1
    :    //Опрос модуля AI1


    fbTCPClient_AI1
        
    (
            
    xEnable := TRUE,
            
    tTimeOut := tTimeout_TCPClient,
            
    sIPAddr := '192.168.51.4',
            
    uiPort    := 502
        
    );
        
    IF 
    fbTCPClient_AI1.xActive THEN
        fbMV210_101_AI1
        
    (
            
    xExecute := TRUE,
            
    tTimeOut := tTimeOut_TCPRequest,
            
    usiRetry := 3,
            
    hConnection := fbTCPClient_AI1.hConnection,
            
    xIsRtuOverTcpMode := FALSE,
            
    usiUnitId := 255,
            
    eFuncCode := OCL.MB_FC.READ_HOLDING_REGISTERS,
            
    uiDataAddr := 4000,
            
    uiDataCount := 24,
            
    pData := ADR(Read_AI1),
            
    szSize := SIZEOF(Read_AI1)
        );
        
        IF 
    fbMV210_101_AI1.xDone THEN
                    
            A1_AI1_LT1_1    
    := Read_AI1[1].rValue;
            
    A1_AI1_TT1_1_01    := Read_AI1[2].rValue;
            
    A1_AI1_TT1_1_02    := Read_AI1[3].rValue;
            
    A1_AI1_TT1_1_03    := Read_AI1[4].rValue;
            
    A1_AI1_LT1_2    := Read_AI1[5].rValue;
            
    A1_AI1_TT1_2_01    := Read_AI1[6].rValue;
            
    A1_AI1_TT1_2_02    := Read_AI1[7].rValue;
            
    A1_AI1_TT1_2_03    := Read_AI1[8].rValue;
            
            
    // Сброс блока после выполнения 
            //fbMV210_101_AI1(xExecute := FALSE);
            // Закрытие ТСР-соединения
            //fbTCPClient_AI1(xEnable := FALSE);
            //iAI_Number := 2;
            //iAI_Number := 3;
        
    END_IF
        
    // Сброс блока после выполнения или в случае ошибки
        
    IF     fbMV210_101_AI1.xDone OR fbMV210_101_AI1.xError    THEN
            fbMV210_101_AI1
    .xExecute := FALSE;
            
    //iAI_Number := 2;
            
    iAI_Number := 3;
        
    END_IF
    END_IF    
    IF fbTCPClient_AI1.xError THEN
        
        fbTCPClient_AI1
    (xEnable := FALSE);
        
        
    //iAI_Number := 2;
        
    iAI_Number := 3;
    END_IF

    //iAI_Number := 2;
    //iAI_Number := 3;

    2// Опрос Модуля AI2
            
    fbTCPClient_AI2
        
    (
            
    xEnable := TRUE,
            
    tTimeOut := tTimeout_TCPClient,
            
    sIPAddr := '192.168.51.5',
            
    uiPort    := 502
        
    );
        
    IF 
    fbTCPClient_AI2.xActive THEN
        fbMV210_101_AI2
        
    (
            
    xExecute := TRUE,
            
    tTimeOut := tTimeOut_TCPRequest,
            
    usiRetry := 3,
            
    hConnection := fbTCPClient_AI2.hConnection,
            
    xIsRtuOverTcpMode := FALSE,
            
    usiUnitId := 255,
            
    eFuncCode := OCL.MB_FC.READ_HOLDING_REGISTERS,
            
    uiDataAddr := 4000,
            
    uiDataCount := 24,
            
    pData := ADR(Read_AI2),
            
    szSize := SIZEOF(Read_AI2)
        );
        
        IF 
    fbMV210_101_AI2.xDone THEN
                            
            A1_AI2_LT1_3            
    := Read_AI2[1].rValue;
            
    A1_AI2_TT1_3_01            := Read_AI2[2].rValue;
            
    A1_AI2_TT1_3_02            := Read_AI2[3].rValue;
            
    A1_AI2_TT1_3_03            := Read_AI2[4].rValue;
            
    RGS4.A1_AI2_LT1_4        := Read_AI2[5].rValue;
            
    RGS4.A1_AI2_TT1_4_01    := Read_AI2[6].rValue;
            
            
    // Сброс блока после выполнения 
            //fbMV210_101_AI2(xExecute := FALSE);
            //fbTCPClient_AI2(xEnable := FALSE);
            //iAI_Number := 3;
        
    END_IF
        
    // Сброс блока после выполнения или в случае ошибки
        
    IF fbMV210_101_AI2.xDone OR fbMV210_101_AI2.xError THEN
            fbMV210_101_AI2
    .xExecute := FALSE;
            
    //iAI_Number := 3;
        
    END_IF
    END_IF    
    IF fbTCPClient_AI2.xError THEN
        
        fbTCPClient_AI2
    (xEnable := FALSE);
        
        
    //iAI_Number := 3;
        
    END_IF

    iAI_Number 
    := 3;

    3:

    fbTCPClient_AI3
        
    (
            
    xEnable := TRUE,
            
    tTimeOut := tTimeout_TCPClient,
            
    sIPAddr := '192.168.51.6',
            
    uiPort    := 502
        
    );
        
    IF 
    fbTCPClient_AI3.xActive THEN
        fbMV210_101_AI3
        
    (
            
    xExecute := TRUE,
            
    tTimeOut := tTimeOut_TCPRequest,
            
    usiRetry := 3,
            
    hConnection := fbTCPClient_AI3.hConnection,
            
    xIsRtuOverTcpMode := FALSE,
            
    usiUnitId := 255,
            
    eFuncCode := OCL.MB_FC.READ_HOLDING_REGISTERS,
            
    uiDataAddr := 4000,
            
    uiDataCount := 24,
            
    pData := ADR(Read_AI3),
            
    szSize := SIZEOF(Read_AI3)
        );
        
        IF 
    fbMV210_101_AI3.xDone THEN        
                    
            NS1
    .A1_AI3_PIT_01    := Read_AI3[1].rValue;
            
    NS2.A1_AI3_PIT_02    := Read_AI3[2].rValue;
            
    NS2.A1_AI3_PIT_03    := Read_AI3[3].rValue;
            
    NS2.A1_AI3_PIT_04    := Read_AI3[5].rValue;
            
            
    // Сброс блока после выполнения 
            //fbMV210_101_AI3(xExecute := FALSE);
            //iAI_Number := 4;
            //fbTCPClient_AI3(xEnable := FALSE);
        
    END_IF
        
    // Сброс блока после выполнения или в случае ошибки
        
    IF     fbMV210_101_AI3.xDone OR fbMV210_101_AI3.xError    THEN
            fbMV210_101_AI3
    .xExecute := FALSE;
            
    //iAI_Number := 4;
        
    END_IF
    END_IF    
    IF fbTCPClient_AI3.xError THEN
        
        fbTCPClient_AI3
    (xEnable := FALSE);    
        
    //iAI_Number := 4;
        
    END_IF

    //iAI_Number := 4;
    iAI_Number := 5;

    4:

    fbTCPClient_AI4
        
    (
            
    xEnable := TRUE,
            
    tTimeOut := tTimeout_TCPClient,
            
    sIPAddr := '192.168.51.7',
            
    uiPort    := 502
        
    );
        
    IF 
    fbTCPClient_AI4.xActive THEN
        fbMV210_101_AI4
        
    (
            
    xExecute := TRUE,
            
    tTimeOut := tTimeOut_TCPRequest,
            
    usiRetry := 3,
            
    hConnection := fbTCPClient_AI4.hConnection,
            
    xIsRtuOverTcpMode := FALSE,
            
    usiUnitId := 255,
            
    eFuncCode := OCL.MB_FC.READ_HOLDING_REGISTERS,
            
    uiDataAddr := 4000,
            
    uiDataCount := 24,
            
    pData := ADR(Read_AI4),
            
    szSize := SIZEOF(Read_AI4)
        );
        
        IF 
    fbMV210_101_AI4.xDone THEN        
                    
            NS1
    .A1_AI4_TT1_01        := Read_AI4[1].rValue;
            
    NS1.A1_AI4_TT1_02        := Read_AI4[2].rValue;
            
    NS1.A1_AI4_TT1_03        := Read_AI4[3].rValue;
            
    NS1.A1_AI4_TT1_04        := Read_AI4[4].rValue;
            
    A1_AI4_TT1_05            := Read_AI4[5].rValue;
            
    A1_AI4_TT1_06            := Read_AI4[6].rValue;
            
    A1_AI4_TT1_07            := Read_AI4[7].rValue;
            
    A1_AI4_TT1_08            := Read_AI4[8].rValue;
            
            
    // Сброс блока после выполнения 
            //fbMV210_101_AI4(xExecute := FALSE);
            //iAI_Number := 5;
            //fbTCPClient_AI3(xEnable := FALSE);
        
    END_IF
        
    // Сброс блока после выполнения или в случае ошибки
        
    IF     fbMV210_101_AI4.xDone OR fbMV210_101_AI4.xError THEN    
            fbMV210_101_AI4
    .xExecute := FALSE;
            
    //iAI_Number := 5;
        
    END_IF
    END_IF    
    IF fbTCPClient_AI4.xError THEN
        
        fbTCPClient_AI4
    (xEnable := FALSE);
        
        
    //iAI_Number := 5;
        
    END_IF

    iAI_Number 
    := 5;

    5:

    fbTCPClient_AI5
        
    (
            
    xEnable := TRUE,
            
    tTimeOut := tTimeout_TCPClient,
            
    sIPAddr := '192.168.51.8',
            
    uiPort    := 502
        
    );
        
    IF 
    fbTCPClient_AI5.xActive THEN
        fbMV210_101_AI5
        
    (
            
    xExecute := TRUE,
            
    tTimeOut := tTimeOut_TCPRequest,
            
    usiRetry := 3,
            
    hConnection := fbTCPClient_AI5.hConnection,
            
    xIsRtuOverTcpMode := FALSE,
            
    usiUnitId := 255,
            
    eFuncCode := OCL.MB_FC.READ_HOLDING_REGISTERS,
            
    uiDataAddr := 4000,
            
    uiDataCount := 24,
            
    pData := ADR(Read_AI5),
            
    szSize := SIZEOF(Read_AI5)
        );
        
        IF 
    fbMV210_101_AI5.xDone THEN        
                    
            A1_AI5_TT1_09        
    := Read_AI5[1].rValue;
            
    A1_AI5_TT1_10        := Read_AI5[2].rValue;
            
    NS2.A1_AI5_TT1_11    := Read_AI5[3].rValue;
            
    NS2.A1_AI5_TT1_12    := Read_AI5[4].rValue;
            
    NS2.A1_AI5_TT1_13    := Read_AI5[5].rValue;
            
    NS2.A1_AI5_TT1_14    := Read_AI5[6].rValue;
            
    NS2.A1_AI5_TT1_15    := Read_AI5[7].rValue;
            
    NS2.A1_AI5_TT1_16    := Read_AI5[8].rValue;
            
            
    // Сброс блока после выполнения 
            //fbMV210_101_AI5(xExecute := FALSE);
            //iAI_Number := 6;
            //fbTCPClient_AI3(xEnable := FALSE);
        
    END_IF
        
    // Сброс блока после выполнения или в случае ошибки
        
    IF fbMV210_101_AI5.xDone OR fbMV210_101_AI5.xError THEN    
            fbMV210_101_AI5
    .xExecute := FALSE;
            
    //iAI_Number := 6;
        
    END_IF
    END_IF    
    IF fbTCPClient_AI5.xError THEN
        
        fbTCPClient_AI5
    (xEnable := FALSE);
        
        
    //iAI_Number := 6;
        
    END_IF

    iAI_Number 
    := 6;

    6:

    fbTCPClient_AI6
        
    (
            
    xEnable := TRUE,
            
    tTimeOut := tTimeout_TCPClient,
            
    sIPAddr := '192.168.51.9',
            
    uiPort    := 502
        
    );
        
    IF 
    fbTCPClient_AI6.xActive THEN
        fbMV210_101_AI6
        
    (
            
    xExecute := TRUE,
            
    tTimeOut := tTimeOut_TCPRequest,
            
    usiRetry := 3,
            
    hConnection := fbTCPClient_AI6.hConnection,
            
    xIsRtuOverTcpMode := FALSE,
            
    usiUnitId := 255,
            
    eFuncCode := OCL.MB_FC.READ_HOLDING_REGISTERS,
            
    uiDataAddr := 4000,
            
    uiDataCount := 24,
            
    pData := ADR(Read_AI6),
            
    szSize := SIZEOF(Read_AI6)
        );
        
        IF 
    fbMV210_101_AI6.xDone THEN        
                    
            Other
    .A1_AI6_TT1_18        := Read_AI6[1].rValue;
            
    Other.A1_AI6_TT1_19        := Read_AI6[2].rValue;
            
    //Other.A1_AI6_TT1_20        := Read_AI6[3].rValue;
            
    A1_AI2_LT1_3        := Read_AI6[3].rValue;
            
    A1_AI2_TT1_3_01        := Read_AI6[4].rValue;
            
    A1_AI2_TT1_3_02        := Read_AI6[5].rValue;
            
    A1_AI2_TT1_3_03        := Read_AI6[6].rValue;
            
    A1_AI4_TT1_05        := Read_AI6[7].rValue;
            
    A1_AI4_TT1_06        := Read_AI6[8].rValue;
            
            
    // Сброс блока после выполнения 
            //fbMV210_101_AI6(xExecute := FALSE);        
            //iAI_Number := 7;
            //fbTCPClient_AI3(xEnable := FALSE);
        
    END_IF    
        
    // Сброс блока после выполнения или в случае ошибки
        
    IF fbMV210_101_AI6.xDone OR fbMV210_101_AI6.xError THEN        
            fbMV210_101_AI6
    .xExecute := FALSE;
            
    //iAI_Number := 7;
        
    END_IF
    END_IF    
    IF fbTCPClient_AI6.xError THEN
        
        fbTCPClient_AI6
    (xEnable := FALSE);
        
        
    //iAI_Number := 7;
        
    END_IF

    iAI_Number 
    := 7;

    7:

    fbTCPClient_AI7
        
    (
            
    xEnable := TRUE,
            
    tTimeOut := tTimeout_TCPClient,
            
    sIPAddr := '192.168.51.10',
            
    uiPort    := 502
        
    );
        
    IF 
    fbTCPClient_AI7.xActive THEN
        fbMV210_101_AI7
        
    (
            
    xExecute := TRUE,
            
    tTimeOut := tTimeOut_TCPRequest,
            
    usiRetry := 3,
            
    hConnection := fbTCPClient_AI7.hConnection,
            
    xIsRtuOverTcpMode := FALSE,
            
    usiUnitId := 255,
            
    eFuncCode := OCL.MB_FC.READ_HOLDING_REGISTERS,
            
    uiDataAddr := 4000,
            
    uiDataCount := 24,
            
    pData := ADR(Read_AI7),
            
    szSize := SIZEOF(Read_AI7)
        );
        
        IF 
    fbMV210_101_AI7.xDone THEN        
                    
            Other
    .A1_AI7_TT2_01        := Read_AI7[1].rValue;
            
    A1_AI7_TT2_02            := Read_AI7[2].rValue;
            
    A1_AI7_TT2_03            := Read_AI7[3].rValue;
            
    A1_AI7_TT2_04            := Read_AI7[4].rValue;
            
    A1_AI4_TT1_07            := Read_AI7[5].rValue;
            
    A1_AI4_TT1_08            := Read_AI7[6].rValue;
            
    NS1.A1_AI4_TT1_01            := Read_AI7[7].rValue;
            
    NS1.A1_AI4_TT1_02            := Read_AI7[8].rValue;
            
            
    // Сброс блока после выполнения 
            //fbMV210_101_AI7(xExecute := FALSE);
            //iAI_Number := 8;
            //fbTCPClient_AI3(xEnable := FALSE);
        
    END_IF
        
    // Сброс блока после выполнения или в случае ошибки
        
    IF fbMV210_101_AI7.xDone OR fbMV210_101_AI7.xError THEN    
            fbMV210_101_AI7
    .xExecute := FALSE;
            
    //iAI_Number := 8;
        
    END_IF
    END_IF    
    IF fbTCPClient_AI7.xError THEN
        
        fbTCPClient_AI7
    (xEnable := FALSE);
        
        
    //iAI_Number := 8;
        
    END_IF

    iAI_Number 
    := 8;

    8:

    fbTCPClient_AI8
        
    (
            
    xEnable := TRUE,
            
    tTimeOut := tTimeout_TCPClient,
            
    sIPAddr := '192.168.51.11',
            
    uiPort    := 502
        
    );
        
    IF 
    fbTCPClient_AI8.xActive THEN
        fbMV210_101_AI8
        
    (
            
    xExecute := TRUE,
            
    tTimeOut := tTimeOut_TCPRequest,
            
    usiRetry := 3,
            
    hConnection := fbTCPClient_AI8.hConnection,
            
    xIsRtuOverTcpMode := FALSE,
            
    usiUnitId := 255,
            
    eFuncCode := OCL.MB_FC.READ_HOLDING_REGISTERS,
            
    uiDataAddr := 4000,
            
    uiDataCount := 24,
            
    pData := ADR(Read_AI8),
            
    szSize := SIZEOF(Read_AI8)
        );
        
        IF 
    fbMV210_101_AI8.xDone THEN        
                    
            RGS4
    .A1_AI8_TT3_01        := Read_AI8[1].rValue;
            
    A1_AI8_TT3_02            := Read_AI8[2].rValue;
            
    A1_AI8_TT3_03            := Read_AI8[3].rValue;
            
    A1_AI8_TT3_04            := Read_AI8[4].rValue;
            
    Other.A1_AI8_TT3_05        := Read_AI8[5].rValue;
            
            
    // Сброс блока после выполнения 
            //fbMV210_101_AI8(xExecute := FALSE);
            //iAI_Number := 9;
            //fbTCPClient_AI3(xEnable := FALSE);
        
    END_IF    
        
    // Сброс блока после выполнения или в случае ошибки
        
    IF    fbMV210_101_AI8.xDone OR fbMV210_101_AI8.xError THEN 
            fbMV210_101_AI8
    .xExecute := FALSE;
            
    //iAI_Number := 9;
        
    END_IF
    END_IF    
    IF fbTCPClient_AI8.xError THEN
        
        fbTCPClient_AI8
    (xEnable := FALSE);
        
        
    //iAI_Number := 9;
        
    END_IF

    iAI_Number 
    := 9;

    9:

    fbTCPClient_AI9
        
    (
            
    xEnable := TRUE,
            
    tTimeOut := tTimeout_TCPClient,
            
    sIPAddr := '192.168.51.12',
            
    uiPort    := 502
        
    );
        
    IF 
    fbTCPClient_AI9.xActive THEN
        fbMV210_101_AI9
        
    (
            
    xExecute := TRUE,
            
    tTimeOut := tTimeOut_TCPRequest,
            
    usiRetry := 3,
            
    hConnection := fbTCPClient_AI9.hConnection,
            
    xIsRtuOverTcpMode := FALSE,
            
    usiUnitId := 255,
            
    eFuncCode := OCL.MB_FC.READ_HOLDING_REGISTERS,
            
    uiDataAddr := 4000,
            
    uiDataCount := 24,
            
    pData := ADR(Read_AI9),
            
    szSize := SIZEOF(Read_AI9)
        );
        
        IF 
    fbMV210_101_AI9.xDone THEN        
                    
            Other
    .A1_AI9_TT4_01        := Read_AI9[1].rValue;
            
    Other.A1_AI9_TT4_02        := Read_AI9[2].rValue;
            
    RGS4.A1_AI2_LT1_4        := Read_AI9[6].rValue;
            
            
            
    // Сброс блока после выполнения 
            //fbMV210_101_AI9(xExecute := FALSE);
            //iAI_Number := 10;
            //fbTCPClient_AI3(xEnable := FALSE);
        
    END_IF    
        
    // Сброс блока после выполнения или в случае ошибки
        
    IF     fbMV210_101_AI9.xDone OR fbMV210_101_AI9.xError THEN 
            fbMV210_101_AI9
    .xExecute := FALSE;
            
    //iAI_Number := 10;
        
    END_IF
    END_IF    
    IF fbTCPClient_AI9.xError THEN
        
        fbTCPClient_AI9
    (xEnable := FALSE);
        
        
    //iAI_Number := 10;
        
    END_IF

    iAI_Number 
    := 10;

    10:

    fbTCPClient_AI10
        
    (
            
    xEnable := TRUE,
            
    tTimeOut := tTimeout_TCPClient,
            
    sIPAddr := '192.168.51.13',
            
    uiPort    := 502
        
    );
        
    IF 
    fbTCPClient_AI10.xActive THEN
        fbMV210_101_AI10
        
    (
            
    xExecute := TRUE,
            
    tTimeOut := tTimeOut_TCPRequest,
            
    usiRetry := 3,
            
    hConnection := fbTCPClient_AI10.hConnection,
            
    xIsRtuOverTcpMode := FALSE,
            
    usiUnitId := 255,
            
    eFuncCode := OCL.MB_FC.READ_HOLDING_REGISTERS,
            
    uiDataAddr := 4000,
            
    uiDataCount := 24,
            
    pData := ADR(Read_AI10),
            
    szSize := SIZEOF(Read_AI10)
        );
        
        IF 
    fbMV210_101_AI10.xDone THEN        
                    
            Other
    .A1_AI10_TT1_21        := Read_AI10[1].rValue;
            
    RGS4.A1_AI2_TT1_4_01        := Read_AI10[2].rValue;
            
    NS1.A1_AI4_TT1_03            := Read_AI10[3].rValue;
            
    NS1.A1_AI4_TT1_04            := Read_AI10[4].rValue;
            
    Other.A1_AI10_TT1_25        := Read_AI10[5].rValue;
            
    Other.A1_AI10_TT1_26        := Read_AI10[6].rValue;
            
    Other.A1_AI10_TT1_27        := Read_AI10[7].rValue;
            
            
    // Сброс блока после выполнения 
            //fbMV210_101_AI10(xExecute := FALSE);        
            //iAI_Number := 11;
            //fbTCPClient_AI3(xEnable := FALSE);
        
    END_IF    
        
    // Сброс блока после выполнения или в случае ошибки
        
    IF     fbMV210_101_AI10.xDone OR fbMV210_101_AI10.xError THEN    
            fbMV210_101_AI10
    .xExecute := FALSE;
            
    //iAI_Number := 11;
        
    END_IF
    END_IF    
    IF fbTCPClient_AI10.xError THEN
        
        fbTCPClient_AI10
    (xEnable := FALSE);
        
        
    //iAI_Number := 11;
        
    END_IF

    //iAI_Number := 11;
    iAI_Number := 1;

    11:

    fbTCPClient_AI11
        
    (
            
    xEnable := TRUE,
            
    tTimeOut := tTimeout_TCPClient,
            
    sIPAddr := '192.168.51.14',
            
    uiPort    := 502
        
    );
        
    IF 
    fbTCPClient_AI11.xActive THEN
        fbMV210_101_AI11
        
    (
            
    xExecute := TRUE,
            
    tTimeOut := tTimeOut_TCPRequest,
            
    usiRetry := 3,
            
    hConnection := fbTCPClient_AI11.hConnection,
            
    xIsRtuOverTcpMode := FALSE,
            
    usiUnitId := 255,
            
    eFuncCode := OCL.MB_FC.READ_HOLDING_REGISTERS,
            
    uiDataAddr := 4000,
            
    uiDataCount := 24,
            
    pData := ADR(Read_AI11),
            
    szSize := SIZEOF(Read_AI11)
        );
        
        IF 
    fbMV210_101_AI11.xDone THEN
            
        
        
            
    // Сброс блока после выполнения 
            //fbMV210_101_AI11(xExecute := FALSE);                    
            //iAI_Number := 12;
            //fbTCPClient_AI3(xEnable := FALSE);
        
    END_IF    
        
    // Сброс блока после выполнения или в случае ошибки
        
    IF fbMV210_101_AI11.xDone OR fbMV210_101_AI11.xError THEN    
            fbMV210_101_AI11
    .xExecute := FALSE;
            
    //iAI_Number := 12;
        
    END_IF
    END_IF    
    IF fbTCPClient_AI11.xError THEN
        
        fbTCPClient_AI11
    (xEnable := FALSE);
        
        
    //iAI_Number := 12;
        
    END_IF

    iAI_Number 
    := 12;

    12:

    fbTCPClient_AI12
        
    (
            
    xEnable := TRUE,
            
    tTimeOut := tTimeout_TCPClient,
            
    sIPAddr := '192.168.51.15',
            
    uiPort    := 502
        
    );
        
    IF 
    fbTCPClient_AI12.xActive THEN
        fbMV210_101_AI12
        
    (
            
    xExecute := TRUE,
            
    tTimeOut := tTimeOut_TCPRequest,
            
    usiRetry := 3,
            
    hConnection := fbTCPClient_AI12.hConnection,
            
    xIsRtuOverTcpMode := FALSE,
            
    usiUnitId := 255,
            
    eFuncCode := OCL.MB_FC.READ_HOLDING_REGISTERS,
            
    uiDataAddr := 4000,
            
    uiDataCount := 24,
            
    pData := ADR(Read_AI12),
            
    szSize := SIZEOF(Read_AI12)
        );
        
        IF 
    fbMV210_101_AI12.xDone THEN
            
        
            
            
    // Сброс блока после выполнения 
            //fbMV210_101_AI12(xExecute := FALSE);                
            //iAI_Number := 1;
            //fbTCPClient_AI3(xEnable := FALSE);
        
    END_IF    
        
    // Сброс блока после выполнения или в случае ошибки
        
    IF     fbMV210_101_AI12.xDone OR fbMV210_101_AI12.xError THEN    
            fbMV210_101_AI12
    .xExecute := FALSE;
            
    //iAI_Number := 1;
        
    END_IF
    END_IF    
    IF fbTCPClient_AI12.xError THEN
        
        fbTCPClient_AI12
    (xEnable := FALSE);
        
        
    //iAI_Number := 1;
        
    END_IF

    iAI_Number 
    := 1;

    END_CASE 

  2. #2

    По умолчанию

    Делайте напрямую через конфигурацию, и не надо никаких pou

  3. #3

    По умолчанию

    Цитата Сообщение от МихаилГл Посмотреть сообщение
    Делайте напрямую через конфигурацию, и не надо никаких pou
    Можно чуть подробнее?

  4. #4

    По умолчанию

    Цитата Сообщение от Андрей_ТМЗ Посмотреть сообщение
    Можно чуть подробнее?
    q1q1.png

    Ну как то так...
    Или вы хотите все программно, чтоб потом из нее же менять настройки?

  5. #5

    По умолчанию

    Цитата Сообщение от Андрей_ТМЗ Посмотреть сообщение
    Здравствуйте. Опрашиваю модули МВ210-101, МВ210-212 и запись в модули МУ210-402 с помощью библиотеки OWENCommunication. В чем суть проблемы: при загрузке проекта в контроллер, модули опрашиваются только один раз. Нет циклического опроса. При этом опрос проходит без ошибок, данные получаю. Опрос организовал согласно "CoDeSys V3.5. Настройка обмена по протоколу Modbus. Раздел 5.9.3" при небольших изменениях. Возможно я что-то не учел. Прошу помочь, так как в моем понимании все должно работать. Опрос модулей и запись в модули разделены на 3 POU. Привожу код опроса модулей МВ210-101.
    ...
    Посмотрите этот момент:
    После опроса первого модуля вы переключаетесь на третий, но не дожидаетесь окончания его опроса, пишете
    ...
    iAI_Number := 3; ЭТО

    3:

    fbTCPClient_AI3
    ...
    и скачете дальше по всем модулям опять до первого. Но третий модуль так и остаётся в работе

  6. #6

    По умолчанию

    Цитата Сообщение от МихаилГл Посмотреть сообщение
    q1q1.png

    Ну как то так...
    Или вы хотите все программно, чтоб потом из нее же менять настройки?
    Я использовал сначала приведенный вами способ. Но при наличии большого количества модулей (в общей сложности 25 модулей ввода/вывода) время опроса пришлось значительно увеличивать. После того, как потребовалось опрашивать приборы по не стандартному протоколу, из-за большого времени опроса данные не поступали. По совету Евгения реализовал на библиотеке, но есть вариант перейти на стандартный компонент.

  7. #7

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    Посмотрите этот момент:
    После опроса первого модуля вы переключаетесь на третий, но не дожидаетесь окончания его опроса, пишете
    ...
    iAI_Number := 3; ЭТО

    3:

    fbTCPClient_AI3
    ...
    и скачете дальше по всем модулям опять до первого. Но третий модуль так и остаётся в работе
    Так вроде не должно так быть, case отрабатывает свое равенство, и дальше выходит... Или я уже забыл как case работает...

    PS Вы правы, только после того как модуль выдаст окончание опроса...

    PS2 Только это похоже не ускорит время опроса модулей...
    Последний раз редактировалось МихаилГл; 06.06.2024 в 13:22.

  8. #8

    По умолчанию

    Цитата Сообщение от Андрей_ТМЗ Посмотреть сообщение
    Я использовал сначала приведенный вами способ. Но при наличии большого количества модулей (в общей сложности 25 модулей ввода/вывода) время опроса пришлось значительно увеличивать. После того, как потребовалось опрашивать приборы по не стандартному протоколу, из-за большого времени опроса данные не поступали. По совету Евгения реализовал на библиотеке, но есть вариант перейти на стандартный компонент.
    Можно ещё использовать триггер "Приложение" в стандартном компоненте. Преимущества: 1 - простая конфигурация, 2 - сложно накосячить, т.к. основной функционал обмена по сети выполняет непосредственно стандартный компонент, от вас требуется только дать команду на чтение канала и обработать ответ, 3 - частота опроса полностью под вашим контролем. С недавних пор для модбаса пользуюсь исключительно этим способом, очень удобно.

  9. #9

    По умолчанию

    PHP код:
    CASE iAI_Number OF
        
    1
    :    //Опрос модуля AI1


    fbTCPClient_AI1
        
    (
            
    xEnable := TRUE,
            
    tTimeOut := tTimeout_TCPClient,
            
    sIPAddr := '192.168.51.4',
            
    uiPort    := 502
        
    );
        
    IF 
    fbTCPClient_AI1.xActive THEN
        fbMV210_101_AI1
        
    (
            
    xExecute := TRUE,
            
    tTimeOut := tTimeOut_TCPRequest,
            
    usiRetry := 3,
            
    hConnection := fbTCPClient_AI1.hConnection,
            
    xIsRtuOverTcpMode := FALSE,
            
    usiUnitId := 255,
            
    eFuncCode := OCL.MB_FC.READ_HOLDING_REGISTERS,
            
    uiDataAddr := 4000,
            
    uiDataCount := 24,
            
    pData := ADR(Read_AI1),
            
    szSize := SIZEOF(Read_AI1)
        );
        
        IF 
    fbMV210_101_AI1.xDone OR fbMV210_101_AI1.xError THEN
                    
            A1_AI1_LT1_1    
    := Read_AI1[1].rValue;
            
    A1_AI1_TT1_1_01    := Read_AI1[2].rValue;
            
    A1_AI1_TT1_1_02    := Read_AI1[3].rValue;
            
    A1_AI1_TT1_1_03    := Read_AI1[4].rValue;
            
    A1_AI1_LT1_2    := Read_AI1[5].rValue;
            
    A1_AI1_TT1_2_01    := Read_AI1[6].rValue;
            
    A1_AI1_TT1_2_02    := Read_AI1[7].rValue;
            
    A1_AI1_TT1_2_03    := Read_AI1[8].rValue;
            
            
    // Сброс блока после выполнения 
            
    fbMV210_101_AI1(xExecute := FALSE);
            
    // Закрытие ТСР-соединения
            //fbTCPClient_AI1(xEnable := FALSE);
            
    iAI_Number := 2;
            
    //iAI_Number := 3;
        
    END_IF
        
    // Сброс блока после выполнения или в случае ошибки
        //IF     fbMV210_101_AI1.xDone OR fbMV210_101_AI1.xError    THEN
        //    fbMV210_101_AI1(xExecute := FALSE);
         //   iAI_Number := 2;
            //iAI_Number := 3;
        //END_IF
    END_IF    
    IF fbTCPClient_AI1.xError THEN
        
        fbTCPClient_AI1
    (xEnable := FALSE);
        
        
    iAI_Number := 2;
        
    //iAI_Number := 3;
    END_IF

    //iAI_Number := 2;
    //iAI_Number := 3;

    2// Опрос Модуля AI2 
    1. У вас выход из кейса выполнен сразу, надо дождаться или успешного опроса или ошибки.
    2. Два IF с одинаковым условием, и запись переменных и сброс блока. Зачем?
    3. Сброс блока надо выполнять его повторным вызовом, а не присвоение FALSE.
    PHP код:
    fbMV210_101_AI1(xExecute := FALSE); //правильно
    fbMV210_101_AI1.xExecute := FALSE//не правильно 
    это разные вещи и во втором случае блок при повторном вызове работать не будет, что у вас и происходит.

    https://ftp.owen.ru/CoDeSys3/11_Docu...odbus_v3.2.pdf
    стр. 162

  10. #10

    По умолчанию

    Николай, Вы правы по поводу п3. Я уже нашел что ошибся, когда просто присвоил FALSE. И присваивание следующего шага вынес в самый конец предыдущего. Все работает пока хорошо. Спасибо всем за помощь.

Похожие темы

  1. MasterOPC Server однократный опрос
    от denprox в разделе OPC Серверы
    Ответов: 4
    Последнее сообщение: 26.06.2023, 08:15
  2. Опрос модулей MB110 через модем ПМ01
    от ElitBVK в разделе Подбор Оборудования
    Ответов: 1
    Последнее сообщение: 24.12.2021, 11:11
  3. Опрос модулее Мх210 через браузер
    от Андрей1984 в разделе Мх210
    Ответов: 4
    Последнее сообщение: 30.11.2018, 11:57
  4. Опрос СИ-30 через библиотеку owen_io.dll
    от MCBK в разделе Эксплуатация
    Ответов: 0
    Последнее сообщение: 05.09.2013, 15:25
  5. Опрос несколько модулей МВ110 через лектус
    от llx89 в разделе Эксплуатация
    Ответов: 5
    Последнее сообщение: 20.02.2013, 01:44

Ваши права

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