Страница 477 из 1043 ПерваяПервая ... 377427467475476477478479487527577977 ... ПоследняяПоследняя
Показано с 4,761 по 4,770 из 10426

Тема: ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)

  1. #4761

    По умолчанию

    Цитата Сообщение от Вольд Посмотреть сообщение
    А что Kinco не подошел ?
    Хочется использовать ОВЕН но Kinco из серии К5 тоже может подойти

  2. #4762

    По умолчанию

    Имеется рабочая программа для погодного регулирования с точностью 0,5 градуса. Но когда контроллер поддерживает целое значение температуры теплоносителя, например 50 гр., то точность становится 1 гр.: от 49,5 до 50,5 гр. Если поддерживается, например 50,5 гр. о точность становится 0,5 гр.: от 50,25 до 50,75 гр.
    Где нужно подкорректировать программу чтобы точность поддержания температуры была 0,5 гр.?

    PROGRAM PLC_PRG
    VAR
    ind_temp: INT;
    ton1,ton2: TON;
    df: DECODE_FLOAT;
    ust_temp: REAL;
    temp_pod_i: INT;
    first_start: BOOL := TRUE;
    (*old_mode: INT;
    old_pod_ust: INT;
    old_ust_temp_z: INT;*)
    temp_pod, ust_temp_f: REAL;
    temp_nv: REAL;
    delta: REAL;
    ind_temp1: REAL;
    END_VAR
    VAR RETAIN
    temp: ARRAY [0..78] OF REAL;
    (*mode_r: INT;
    pod_ust_r: INT;
    ust_temp_r: INT;*)
    NaprReg_r:REAL;
    END_VAR

    …………………………………………………………………………………………………………………………………… …………………………….


    NaprReg := NaprReg_r;


    IF first_start THEN
    (* +8 +7.5 +7 +6.5 +6 *)
    temp[0] := 35; temp[1] := 36; temp[2] := 36; temp[3] := 36; temp[4] := 36;
    (* +5.5 +5 +4.5 +4 +3.5 *)
    temp[5] := 36; temp[6] := 36; temp[7] := 36; temp[8] := 36; temp[9] := 36.5;
    (* +3 +2.5 +2 +1.5 +1 *)
    temp[10] := 37; temp[11] := 37.5; temp[12] := 38; temp[13] := 38.5; temp[14] := 39;
    (* +0.5 0 -0.5 -1 -1.5 *)
    temp[15] := 39.5; temp[16] := 40; temp[17] := 40.5; temp[18] := 41; temp[19] := 41.5;
    (* -2 -2.5 -3 -3.5 -4 *)
    temp[20] := 42; temp[21] := 42.5; temp[22] := 43; temp[23] := 43.5; temp[24] := 44;
    (* -4.5 -5 -5.5 -6 -6.5 *)
    temp[25] := 44.5; temp[26] := 45; temp[27] := 45.5; temp[28] := 46; temp[29] := 46.5;
    (* -7 -7.5 -8 -8.5 -9 *)
    temp[30] := 47; temp[31] := 47.5; temp[32] := 48; temp[33] := 48.5; temp[34] := 49;
    (* -9.5 -10 -10.5 -11 -11.5 *)
    temp[35] := 49; temp[36] := 49; temp[37] := 49.5; temp[38] := 50; temp[39] := 50;
    (* -12 -12.5 -13 -13.5 -14 *)
    temp[40] := 50; temp[41] := 50.5; temp[42] := 51; temp[43] := 51; temp[44] := 51;
    (* -14.5 -15 -15.5 -16 -16.5 *)
    temp[45] := 51.5; temp[46] := 52; temp[47] := 52.5; temp[48] := 53; temp[49] := 53.5;
    (* -17 -17.5 -18 -18.5 -19 *)
    temp[50] := 54; temp[51] := 54.5; temp[52] := 55; temp[53] := 55.5; temp[54] := 56;
    (* -19.5 -20 -20.5 -21 -21.5 *)
    temp[55] := 56.5; temp[56] := 57; temp[57] := 57.5; temp[58] := 58; temp[59] := 58.5;
    (* -22 -22.5 -23 -23.5 -24 *)
    temp[60] := 59; temp[61] := 59.5; temp[62] := 60; temp[63] := 60.5; temp[64] := 61;
    (* -24.5 -25 -25.5 -26 -26.5 *)
    temp[65] := 61.5; temp[66] := 62; temp[67] := 62.5; temp[68] := 63; temp[69] := 63.5;
    (* -27 -27.5 -28 -28.5 -29 *)
    temp[70] := 64; temp[71] := 64.5; temp[72] := 65; temp[73] := 65.5; temp[74] := 66;
    (* -29.5 -30 -30.5 -31 *)
    temp[75] := 66.5; temp[76] := 67; temp[77] := 67.5; temp[78] := 68;




    IF NaprReg=0.0 THEN
    NaprReg := 0.5;
    END_IF;
    first_start := FALSE;
    END_IF;



    df( VALUE:=temp_pod_d, DEF_VALUE:= temp_pod);
    CASE df._ERR OF
    12: temp_pod_s := 2000; (* кз *)
    13: temp_pod_s := 2001; (*обрыв *)
    6,7,8,9,10,11,14,15: temp_pod_s := 2002; (*ошибка контроллера *)
    ELSE
    temp_pod_s := REAL_TO_INT(df.OUT_VALUE*10);
    temp_pod := temp_pod_d;
    END_CASE;

    df( VALUE:=temp_nv_d, DEF_VALUE:=temp_nv);
    CASE df._ERR OF
    12: temp_nv_s := 2000; (* кз *)
    13: temp_nv_s := 2001; (*обрыв *)
    6,7,8,9,10,11,14,15: temp_nv_s := 2002; (*ошибка контроллера *)
    ELSE
    temp_nv_s := REAL_TO_INT((df.OUT_VALUE+50.0)*10);
    temp_nv := temp_nv_d;
    END_CASE;

    ind_temp1 := temp_nv;
    ind_temp := 16 - REAL_TO_INT(ind_temp1*2);
    IF ind_temp < 0 THEN
    ind_temp := 0;
    ELSIF ind_temp > 78 THEN
    ind_temp := 78;
    END_IF;

    IF mode = 1 THEN
    ust_temp := temp[ind_temp]+pod_ust;
    ELSE
    ust_temp := ust_temp_z;
    END_IF;


    temp_pod_i := REAL_TO_INT(temp_pod);
    ust_temp_f := (ust_temp);
    ton1.PT := t#10m; ton2.PT := t#10s;
    ton1(in :=TRUE); ton2(in :=TRUE);
    IF ton1.ET >t#30s THEN
    IF (temp_pod_i >ust_temp) AND (temp_pod_s <2000) AND ((temp_nv_s<2000) OR (mode=0)) THEN
    delta :=(temp_pod - ust_temp_f)/500;
    NaprReg := NaprReg +delta;
    IF NaprReg > 0.90 THEN NaprReg := 0.90; END_IF;
    END_IF;
    IF (temp_pod_i delta :=(ust_temp_f - temp_pod)/500 ;
    NaprReg := NaprReg -delta;
    IF NaprReg < 0.0 THEN NaprReg := 0.0; END_IF;
    END_IF;
    ton1(in :=FALSE);
    END_IF;

    NaprReg_r := NaprReg;
    napr_s :=REAL_TO_INT( NaprReg *1000);

    IF ton2.ET >t#400ms THEN
    ton2(in :=FALSE);
    ClearScreen(0);
    SetWorkScreen(0);

    ShowString(0,0,0,'Тнв=');
    CASE temp_nv_s OF
    2000: ShowString(0,4,0,'КЗ ');
    2001: ShowString(0,4,0,'Обр ');
    2002: ShowString(0,4,0,'Ош. ');
    ELSE
    ShowReal(0, 4, 0, '%3.1f',temp_nv);
    END_CASE;
    ShowString(0,9,0,'Тп=');
    CASE temp_pod_s OF
    2000: ShowString(0,12,0,'КЗ ');
    2001: ShowString(0,12,0,'Обр ');
    2002: ShowString(0,13,0,'Ош. ');
    ELSE
    ShowReal(0, 12, 0, '%3.1f',temp_pod);
    END_CASE;
    ShowString(0,0,1,'Uуп='); ShowReal(0, 4, 1, '%4.2f',NaprReg*10);
    END_IF;

  3. #4763

    По умолчанию

    Добрый день!
    Я столкнулся с проблемой такого характера…


    Для начала обзора моего проекта вкратце опишу проблему.
    Мы используем ПЛК 110.60-М и МУ 110 -16Р
    У нас приходит сигналы с расходомеров жидкости их 12 шт. с выходной частотой около 100-200 Гц. на первых 12 входов в ПЛК

    ПРИМЕР: Если мы наливаем 1литру жидкости это составляет (100 импульсов для ПЛК)
    1000 : 100=10грам 10=1импульсу для ПЛК, нам нельзя терять не одного импульса, это точность налива.

    ЭКСПЕРЕМЕНТ:
    Прилагаю видео которое я заснял с экрана «Видео-1»
    на видео видно что CUT (12шт.) и остальная программа просчитала импульсы не правильно, их количество импульсов не равномерно просчитали CTU не смотря на то что я подключил все 12 входов ПЛК на один расходомер (то есть все параллельно) но это ещё не всё
    когда я подключил параллельно к ПЛК 110.60-М (цикл сканирования в Statistic 7мс) ещё ПКЛ 110.30-М для того чтоб посмотреть насколько ПЛК 110.60-М считает правильно то увидел что каждый из ПЛК вообще показывает разные значения «Фото-1»
    Видать проект для ПЛК 110 тяжелый
    Подскажите как мне выйти из этого положения
    Вложение 23242 Вложение 23243 Вложение 23244 Вложение 23245 Вложение 23246 Вложение 23247

  4. #4764

    По умолчанию

    Имеется рабочая программа для погодного регулирования с точностью 0,5 градуса. Но когда контроллер поддерживает целое значение температуры теплоносителя, например 50 гр., то точность становится 1 гр.: от 49,5 до 50,5 гр. Если поддерживается, например 50,5 гр. о точность становится 0,5 гр.: от 50,25 до 50,75 гр.
    Где нужно подкорректировать программу чтобы точность поддержания температуры была 0,5 гр.?

    PROGRAM PLC_PRG
    VAR
    ind_temp: INT;
    ton1,ton2: TON;
    df: DECODE_FLOAT;
    ust_temp: REAL;
    temp_pod_i: INT;
    first_start: BOOL := TRUE;
    (*old_mode: INT;
    old_pod_ust: INT;
    old_ust_temp_z: INT;*)
    temp_pod, ust_temp_f: REAL;
    temp_nv: REAL;
    delta: REAL;
    ind_temp1: REAL;
    END_VAR
    VAR RETAIN
    temp: ARRAY [0..78] OF REAL;
    (*mode_r: INT;
    pod_ust_r: INT;
    ust_temp_r: INT;*)
    NaprReg_r:REAL;
    END_VAR

    …………………………………………………………………………………………………………………………………… …………………………….


    NaprReg := NaprReg_r;


    IF first_start THEN
    (* +8 +7.5 +7 +6.5 +6 *)
    temp[0] := 35; temp[1] := 36; temp[2] := 36; temp[3] := 36; temp[4] := 36;
    (* +5.5 +5 +4.5 +4 +3.5 *)
    temp[5] := 36; temp[6] := 36; temp[7] := 36; temp[8] := 36; temp[9] := 36.5;
    (* +3 +2.5 +2 +1.5 +1 *)
    temp[10] := 37; temp[11] := 37.5; temp[12] := 38; temp[13] := 38.5; temp[14] := 39;
    (* +0.5 0 -0.5 -1 -1.5 *)
    temp[15] := 39.5; temp[16] := 40; temp[17] := 40.5; temp[18] := 41; temp[19] := 41.5;
    (* -2 -2.5 -3 -3.5 -4 *)
    temp[20] := 42; temp[21] := 42.5; temp[22] := 43; temp[23] := 43.5; temp[24] := 44;
    (* -4.5 -5 -5.5 -6 -6.5 *)
    temp[25] := 44.5; temp[26] := 45; temp[27] := 45.5; temp[28] := 46; temp[29] := 46.5;
    (* -7 -7.5 -8 -8.5 -9 *)
    temp[30] := 47; temp[31] := 47.5; temp[32] := 48; temp[33] := 48.5; temp[34] := 49;
    (* -9.5 -10 -10.5 -11 -11.5 *)
    temp[35] := 49; temp[36] := 49; temp[37] := 49.5; temp[38] := 50; temp[39] := 50;
    (* -12 -12.5 -13 -13.5 -14 *)
    temp[40] := 50; temp[41] := 50.5; temp[42] := 51; temp[43] := 51; temp[44] := 51;
    (* -14.5 -15 -15.5 -16 -16.5 *)
    temp[45] := 51.5; temp[46] := 52; temp[47] := 52.5; temp[48] := 53; temp[49] := 53.5;
    (* -17 -17.5 -18 -18.5 -19 *)
    temp[50] := 54; temp[51] := 54.5; temp[52] := 55; temp[53] := 55.5; temp[54] := 56;
    (* -19.5 -20 -20.5 -21 -21.5 *)
    temp[55] := 56.5; temp[56] := 57; temp[57] := 57.5; temp[58] := 58; temp[59] := 58.5;
    (* -22 -22.5 -23 -23.5 -24 *)
    temp[60] := 59; temp[61] := 59.5; temp[62] := 60; temp[63] := 60.5; temp[64] := 61;
    (* -24.5 -25 -25.5 -26 -26.5 *)
    temp[65] := 61.5; temp[66] := 62; temp[67] := 62.5; temp[68] := 63; temp[69] := 63.5;
    (* -27 -27.5 -28 -28.5 -29 *)
    temp[70] := 64; temp[71] := 64.5; temp[72] := 65; temp[73] := 65.5; temp[74] := 66;
    (* -29.5 -30 -30.5 -31 *)
    temp[75] := 66.5; temp[76] := 67; temp[77] := 67.5; temp[78] := 68;




    IF NaprReg=0.0 THEN
    NaprReg := 0.5;
    END_IF;
    first_start := FALSE;
    END_IF;



    df( VALUE:=temp_pod_d, DEF_VALUE:= temp_pod);
    CASE df._ERR OF
    12: temp_pod_s := 2000; (* кз *)
    13: temp_pod_s := 2001; (*обрыв *)
    6,7,8,9,10,11,14,15: temp_pod_s := 2002; (*ошибка контроллера *)
    ELSE
    temp_pod_s := REAL_TO_INT(df.OUT_VALUE*10);
    temp_pod := temp_pod_d;
    END_CASE;

    df( VALUE:=temp_nv_d, DEF_VALUE:=temp_nv);
    CASE df._ERR OF
    12: temp_nv_s := 2000; (* кз *)
    13: temp_nv_s := 2001; (*обрыв *)
    6,7,8,9,10,11,14,15: temp_nv_s := 2002; (*ошибка контроллера *)
    ELSE
    temp_nv_s := REAL_TO_INT((df.OUT_VALUE+50.0)*10);
    temp_nv := temp_nv_d;
    END_CASE;

    ind_temp1 := temp_nv;
    ind_temp := 16 - REAL_TO_INT(ind_temp1*2);
    IF ind_temp < 0 THEN
    ind_temp := 0;
    ELSIF ind_temp > 78 THEN
    ind_temp := 78;
    END_IF;

    IF mode = 1 THEN
    ust_temp := temp[ind_temp]+pod_ust;
    ELSE
    ust_temp := ust_temp_z;
    END_IF;


    temp_pod_i := REAL_TO_INT(temp_pod);
    ust_temp_f := (ust_temp);
    ton1.PT := t#10m; ton2.PT := t#10s;
    ton1(in :=TRUE); ton2(in :=TRUE);
    IF ton1.ET >t#30s THEN
    IF (temp_pod_i >ust_temp) AND (temp_pod_s <2000) AND ((temp_nv_s<2000) OR (mode=0)) THEN
    delta :=(temp_pod - ust_temp_f)/500;
    NaprReg := NaprReg +delta;
    IF NaprReg > 0.90 THEN NaprReg := 0.90; END_IF;
    END_IF;
    IF (temp_pod_i delta :=(ust_temp_f - temp_pod)/500 ;
    NaprReg := NaprReg -delta;
    IF NaprReg < 0.0 THEN NaprReg := 0.0; END_IF;
    END_IF;
    ton1(in :=FALSE);
    END_IF;

    NaprReg_r := NaprReg;
    napr_s :=REAL_TO_INT( NaprReg *1000);

    IF ton2.ET >t#400ms THEN
    ton2(in :=FALSE);
    ClearScreen(0);
    SetWorkScreen(0);

    ShowString(0,0,0,'Тнв=');
    CASE temp_nv_s OF
    2000: ShowString(0,4,0,'КЗ ');
    2001: ShowString(0,4,0,'Обр ');
    2002: ShowString(0,4,0,'Ош. ');
    ELSE
    ShowReal(0, 4, 0, '%3.1f',temp_nv);
    END_CASE;
    ShowString(0,9,0,'Тп=');
    CASE temp_pod_s OF
    2000: ShowString(0,12,0,'КЗ ');
    2001: ShowString(0,12,0,'Обр ');
    2002: ShowString(0,13,0,'Ош. ');
    ELSE
    ShowReal(0, 12, 0, '%3.1f',temp_pod);
    END_CASE;
    ShowString(0,0,1,'Uуп='); ShowReal(0, 4, 1, '%4.2f',NaprReg*10);
    END_IF;

  5. #4765
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,243

    По умолчанию

    зачем дублировать свое сообщение, да еще в таком виде, просто проект вложить не проще или хотя бы код убрать под спойлер. А по существу Вам уже посоветовали. По коду могу предложить обратит внимание на преобразование real_to_in, оно округляет до ближайшего целого, возможно в этом причина
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  6. #4766
    Пользователь
    Регистрация
    22.02.2013
    Адрес
    г.Тихорецк, Краснодарский край
    Сообщений
    384

    По умолчанию

    когда я подключил параллельно к ПЛК 110.60-М (цикл сканирования в Statistic 7мс)
    Мин вр цикла плк должно быть больше цикла сканирования в МС(у вас 1мс и 6 мс), входы 1-4 в плк 110 быстрые время фильтрации 0(попробывать 1 если импульсы от расходомеров задаются мех контактами-такое было-дребезг) как и в других (обычных входах) т.е входы должны находится в одинаковых условиях(мое мнение)..

  7. #4767

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    зачем дублировать свое сообщение, да еще в таком виде, просто проект вложить не проще или хотя бы код убрать под спойлер. А по существу Вам уже посоветовали. По коду могу предложить обратит внимание на преобразование real_to_in, оно округляет до ближайшего целого, возможно в этом причина
    Спасибо за ответ. Я не программист. Как необходимо исправить это выражение? Оно к тому же в двух местах. Там анализируются состояния термометров сопротивления: на улице и в трубопроводе, есть ли обрыв или кз. Но как я написал ранее если контроллер поддерживает целое значение температуры теплоносителя, например 50 гр., то точность становится 1 гр.: от 49,5 до 50,5 гр. Если поддерживается, например 50,5 гр. о точность становится 0,5 гр.: от 50,25 до 50,75 гр. Почему так происходит - непонятно.

  8. #4768
    Пользователь Аватар для Василий Кашуба
    Регистрация
    20.11.2011
    Адрес
    Ставрополь
    Сообщений
    2,492

    По умолчанию

    Юра, почему ты думаешь, что если ты продублируешь свой вопрос во всех ветках форума, то быстрее получишь ответ. Если не отвечают, значит мало представлено информации, или вы не воспользовались предложенным вам хорошим советом применить ПИД регулятор.

  9. #4769

    По умолчанию

    У меня работает ПЛК 63 с этой программой.

  10. #4770
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Где нужно подкорректировать программу чтобы точность поддержания температуры была 0,5 гр.?
    Для начала убрать все промежуточные округления. Всё выглядит подозрительно: и таблица эта (кстати её можно инициализировать при объявлении), и REAL_TO_INTы, и какие-то тысячи с сотнями, и таймеры, которые никогда не достигают своего Q. Этот код напрашивается на неприятности.

Страница 477 из 1043 ПерваяПервая ... 377427467475476477478479487527577977 ... ПоследняяПоследняя

Метки этой темы

Ваши права

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