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

Тема: Ошибка 4010: Несоответствие типов: невозможно преобразовать '9000' в 'TIME'???

  1. #1

    По умолчанию Ошибка 4010: Несоответствие типов: невозможно преобразовать '9000' в 'TIME'???

    Не компилируется код: "Ошибка 4010: Несоответствие типов: невозможно преобразовать '9000' в 'TIME'''.
    Ошибка в строке: "Timer.TIME_IN := 9000;".
    Подскажите, пжл, как правильно задать переменную типа TIME?

    PHP код:
    PROGRAM PLC_PRG
    VAR CONSTANT
            Low_Setpoint 
    INT := 10;
            
    High_Setpoint INT := 15;
    END_VAR

    VAR
            
    BoilersOn INT;
            
    TimerWAIT;
    END_VAR

    Moving1 
    := 1;
    Moving2 := 1;
    Moving3 := 2;
    Moving4 := 2;
    Moving5 := 2;
    BoilersOn := 0;
    IF (
    Is_Boiler1THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler2THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler3THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler4THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler5THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler6THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler7THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler8THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler9THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler10THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler11THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler12THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler13THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler14THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler15THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler16THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler17THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler18THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler19THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler20THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler21THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler22THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler23THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler24THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler25THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler26THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler27THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler28THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler29THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler30THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler31THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF

    IF  NOT (Is_Door_OpenTHEN
            
    IF (Curr_Pressure <= Low_Setpoint THEN
                    
    IF(BoilersOn <= 10THEN
                             Frequency2 
    := 2500;
                    
    ELSIF(BoilersOn 10) AND (BoilersOn <= 20THEN
                             Frequency2 
    := 5000;
                               ELSE
                            
    Frequency2 := 7500;
                    
    END_IF
                    Frequency1 
    := 7500;
                    
    Frequency3 := 0;
                    
    Frequency4 := 0;
                    
    Frequency5 := 0;
            
    ELSIF (Curr_Pressure Low_Setpoint ) AND (Curr_Pressure <= High_Setpoint )  THEN
                    Frequency1 
    := 7500;
                    
    Frequency2 := 0;
                    
    Frequency3 := 7500;
                    
    Frequency4 := 7500;
                    
    Frequency5 := 0;
            ELSE
                    IF(
    BoilersOn <= 10THEN
                            Frequency5 
    := 2500;
                    
    ELSIF(BoilersOn 10) AND (BoilersOn <= 20THEN
                            Frequency5 
    := 5000;
                    ELSE
                            
    Frequency5 := 7500;
                    
    END_IF
                    Frequency1 
    := 0;
                    
    Frequency2 := 0;
                    
    Frequency3 := 7500;
                    
    Frequency4 := 7500;
            
    END_IF
    ELSE
            
    Timer.TIME_IN := 9000;
            
    Frequency1 := 7500;
            
    Frequency2 := 0;
            
    Frequency3 := 7500;
            
    Frequency4 := 7500;
            
    Frequency5 := 0;
    END_IF 

    PHP код:
    FUNCTION_BLOCK WAIT
    VAR_INPUT
            TIME_IN
    TIME;
    END_VAR
    VAR_OUTPUT
            OK
    BOOL := FALSE;
    END_VAR
    VAR
            
    ZABTP;
    END_VAR

        LD        ZAB
    .Q
        JMPC    mark

        CAL        ZAB
    (IN := FALSE)
        
    LD        TIME_IN
        ST        ZAB
    .PT
        CAL        ZAB
    (IN := TRUE)
        
    JMP        END

    mark
    :
        
    CAL        ZAB
    end
    :
        
    LDN        ZAB.Q
        ST        OK
        RET 
    Последний раз редактировалось Дмитрий_Кирсанов; 13.04.2017 в 10:10.

  2. #2
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,104

    По умолчанию

    Цитата Сообщение от Дмитрий_Кирсанов Посмотреть сообщение
    Не компилируется код: "Ошибка 4010: Несоответствие типов: невозможно преобразовать '9000' в 'TIME'''. Подскажите, пжл, как задать переменную типа TIME?

    Скрытый текст:
    PHP код:
    PROGRAM PLC_PRG
    VAR CONSTANT
            Low_Setpoint 
    INT := 10;
            
    High_Setpoint INT := 15;
    END_VAR

    VAR
            
    BoilersOn INT;
            
    TimerWAIT;
    END_VAR

    Moving1 
    := 1;
    Moving2 := 1;
    Moving3 := 2;
    Moving4 := 2;
    Moving5 := 2;
    BoilersOn := 0;
    IF (
    Is_Boiler1THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler2THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler3THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler4THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler5THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler6THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler7THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler8THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler9THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler10THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler11THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler12THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler13THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler14THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler15THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler16THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler17THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler18THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler19THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler20THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler21THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler22THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler23THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler24THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler25THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler26THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler27THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler28THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler29THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler30THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF
    IF (Is_Boiler31THEN
            BoilersOn 
    := BoilersOn 1;
    END_IF

    IF  NOT (Is_Door_OpenTHEN
            
    IF (Curr_Pressure <= Low_Setpoint THEN
                    
    IF(BoilersOn <= 10THEN
                             Frequency2 
    := 2500;
                    
    ELSIF(BoilersOn 10) AND (BoilersOn <= 20THEN
                             Frequency2 
    := 5000;
                               ELSE
                            
    Frequency2 := 7500;
                    
    END_IF
                    Frequency1 
    := 7500;
                    
    Frequency3 := 0;
                    
    Frequency4 := 0;
                    
    Frequency5 := 0;
            
    ELSIF (Curr_Pressure Low_Setpoint ) AND (Curr_Pressure <= High_Setpoint )  THEN
                    Frequency1 
    := 7500;
                    
    Frequency2 := 0;
                    
    Frequency3 := 7500;
                    
    Frequency4 := 7500;
                    
    Frequency5 := 0;
            ELSE
                    IF(
    BoilersOn <= 10THEN
                            Frequency5 
    := 2500;
                    
    ELSIF(BoilersOn 10) AND (BoilersOn <= 20THEN
                            Frequency5 
    := 5000;
                    ELSE
                            
    Frequency5 := 7500;
                    
    END_IF
                    Frequency1 
    := 0;
                    
    Frequency2 := 0;
                    
    Frequency3 := 7500;
                    
    Frequency4 := 7500;
            
    END_IF
    ELSE
            [
    B][U]Timer.TIME_IN := 9000;[/U][/B]
            
    Frequency1 := 7500;
            
    Frequency2 := 0;
            
    Frequency3 := 7500;
            
    Frequency4 := 7500;
            
    Frequency5 := 0;
    END_IF 

    PHP код:
    FUNCTION_BLOCK WAIT
    VAR_INPUT
            TIME_IN
    TIME;
    END_VAR
    VAR_OUTPUT
            OK
    BOOL := FALSE;
    END_VAR
    VAR
            
    ZABTP;
    END_VAR

        LD        ZAB
    .Q
        JMPC    mark

        CAL        ZAB
    (IN := FALSE)
        
    LD        TIME_IN
        ST        ZAB
    .PT
        CAL        ZAB
    (IN := TRUE)
        
    JMP        END

    mark
    :
        
    CAL        ZAB
    end
    :
        
    LDN        ZAB.Q
        ST        OK
        RET 
    Читать справку!
    TIME константы:
    TIME константы
    Константы типа TIME в CoDeSys всегда начинаются с префикса "t" или "T" (длинная форма "time" или "TIME") и знака числа "#". Далее следует собственно время, которое может включать дни "d", часы "h", минуты "m", секунды "s" и миллисекунды "ms". Нет необходимости обязательно определять все составляющие времени, но присутствующие поля обязаны следовать именно в таком порядке (d, затем h, затем m, затем s, затем m, затем ms).

    Правильные примеры TIME констант в ST:

    TIME1 := T#14ms;


    TIME1 := T#100S12ms;
    (*Старший компонент может выходить за свой предел*)

    TIME1 := t#12h34m15s;



    Ошибочные примеры:

    TIME1 := t#5m68s;
    (*Младший компонент вышел за предел*)

    TIME1 := 15ms;
    (*T# iпропущено*)

    TIME1 := t#4ms13d;
    (*Ошибочная последовательность*)


    См. также:

    Типы данных Time Data

    По этому должно быть
    Timer.TIME_IN := t#9000ms;
    или не "ms", а "s", ведь х.з. в каких единицах у Вас время нужно отсчитывать.
    Ведь для ФБ Timer у Вас для входной переменной TIME_IN тип не INT, а TIME.
    26 лет деятельности в области промышленной безопасности

  3. #3

    По умолчанию

    спс, теперь код компилируется

  4. #4

    По умолчанию

    Еще вам будет полезно почитать про массивы и циклы.
    куча условий может быть записана так
    PHP код:
    BoilersOn := 0;
    FOR 
    i:=1 TO 31 DO
        IF (
    Is_Boiler[i]) THEN
            BoilersOn 
    := BoilersOn 1;
        
    END_IF
    END_FOR 

Похожие темы

  1. Как преобразовать TIME в SYSDATETIME?
    от Ivan77 в разделе СПК1хх
    Ответов: 6
    Последнее сообщение: 13.08.2016, 11:37
  2. Арлан-9000-1RS232
    от Алексей А. в разделе Эксплуатация
    Ответов: 1
    Последнее сообщение: 25.05.2009, 16:08

Ваши права

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