Страница 6 из 8 ПерваяПервая ... 45678 ПоследняяПоследняя
Показано с 51 по 60 из 76

Тема: ПЛК110-30-М02 нестандартный проткол к весам ВСП4

  1. #51
    Пользователь
    Регистрация
    20.05.2021
    Адрес
    г.Челябинск
    Сообщений
    36

    По умолчанию

    Вот окончательный вид рабочей программы .
    PROGRAM PLC_PRG
    VAR
    port:COMSETTINGS:=(Port:=COM1,dwBaudRate:=9600,byS topBits:=0,byParity:=0,dwBufferSize:=28);
    portReady:BOOL;
    buf:ARRAY[0..27]OF BYTE;(*данные из весов через RS232*)
    bufCopy:ARRAY[0..27]OF BYTE;
    buf1:ARRAY[0..7]OF BYTE;(*массив веса*)
    bufzero:ARRAY[0..27]OF BYTE:=28(0);
    i:INT:=0;
    i1:INT:=0;
    i3:INT:=0;
    dIWWORD:=0;
    dIW2WORD:=0;
    iWES: REAL:=0;
    iSTEP:INT;
    WES: REAL;(*чистый вес*)
    iDEC: INT;
    I4: BOOL := FALSE;
    END_VAR

    WHILE dIW<>500000 DO(*выдержка времени*)
    dIW:=dIW+1;
    END_WHILE
    dIW2:=dIW2+1;
    IF NOT portReady THEN(* Сразу открываем и настраиваем порт *)
    portReady:=TRUE;
    SysComOpen(port.Port);
    SysComSetSettings(port.Port,ADR(port));
    SysComRead(port.Port, ADR(buf),28,0);
    ELSE(* Работаем с открытым портом *)
    SysComRead(port.Port, ADR(buf),28, 0);
    END_IF
    bufCopy:=buf;
    WHILE (i<=27)AND(i3=0)DO
    IF bufCopy[i]=119 THEN
    i3:=1;
    FOR i1:=0 TO 7 DO
    buf1[i1]:=bufCopy[i+i1+2];
    END_FOR
    END_IF
    i:=i+1;
    END_WHILE

    FOR i:=0 TO 7 DO
    IF buf1[i]= 46 THEN
    I4:=TRUE;
    iSTEP:=7-i;(*количество знаков после десятичной точки*)
    iDEC:=i;(*положение десятичной точки*)
    END_IF;
    END_FOR;
    IF i4=TRUE THEN
    CASE iDEC-4 OF
    2: buf1[iDEC]:=buf1[iDEC+1];
    1: buf1[iDEC]:=buf1[iDEC+1];
    buf1[iDEC+1]:=buf1[iDEC+2];
    0: buf1[iDEC]:=buf1[iDEC+1];
    buf1[iDEC+1]:=buf1[iDEC+2];
    buf1[iDEC+2]:=buf1[iDEC+3];
    END_CASE;
    FOR i:=0 TO 6 DO
    iWES:=iWES+(buf1[i]-48)*EXPT(10,(6-i));
    END_FOR;
    WES:=iWES/EXPT(10,iSTEP);
    END_IF
    i4:=FALSE;
    iWES:=0;
    i:=0;
    i3:=0;
    buf:=bufzero;
    dIW:=0;
    Сделал еще визуализацию для переменной WES.Проект во вложении.
    Все отлично работает как часы! Всем спасибо!
    Вложения Вложения
    Последний раз редактировалось павелсиражев; 28.09.2021 в 13:14.

  2. #52
    Пользователь
    Регистрация
    20.05.2021
    Адрес
    г.Челябинск
    Сообщений
    36

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Функция ? Ничего себе. А вызываете как процедуру. Ничего не забыли ?


    ps
    Про чутьвышесказанное Sergey666 кстати да.
    Выкладывайте сам проект а не левые кусочки.
    А почему я не могу просто вызвать функцию? Если мне не нужно возвращаемое значение .
    Хотя в описании библиотеки SysLibCom написано, что это функция, скорее это функциональный блок.

  3. #53
    Пользователь
    Регистрация
    20.05.2021
    Адрес
    г.Челябинск
    Сообщений
    36

    По умолчанию

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

  4. #54

    По умолчанию

    Цитата Сообщение от павелсиражев Посмотреть сообщение
    Добрый день. Переделал программу, добавил выдержку времени 300мс.
    PROGRAM PLC_PRG
    VAR
    T1:=TON;
    delay:TIME:=T#300ms;
    port:COMSETTINGS:=(Port:=COM1,dwBaudRate:=2400);
    portReady:BOOL;
    buf:ARRAY[0..13]OF BYTE;
    END_VAR
    В посте № 4 у вас ошибка, надо равно в объявлении таймера убрать. Вот так должно быть T1:TON;
    И в выложенной программе, у вас в конфигурации, так и осталось скорость 2400 и нечётный .
    Последний раз редактировалось kondor3000; 28.09.2021 в 15:46.

  5. #55
    Пользователь
    Регистрация
    28.08.2008
    Адрес
    23..93..123
    Сообщений
    1,688

    По умолчанию

    Цитата Сообщение от павелсиражев Посмотреть сообщение
    Все отлично работает как часы! Всем спасибо!
    Вот ведь...а рекомендованные посты не прочитал..., #нуладно

  6. #56
    Пользователь
    Регистрация
    20.05.2021
    Адрес
    г.Челябинск
    Сообщений
    36

    По умолчанию

    Цитата Сообщение от Sergey666 Посмотреть сообщение
    Вот ведь...а рекомендованные посты не прочитал..., #нуладно
    Нет, те посты я прочитал, очень интересно ,много нового узнал.Спасибо.

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

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Результат напоминает браконьера с гранатой на рыбалке. Нужно поесть - тонна рыбы кверху брюхом, пару рыбин на ужин и пошли дальше. Задача поесть - решена, да. И как часы само собой.
    тише, тише, он знает такие слова как ООП, просто в виду примитивности задачи не желает его применять, а так бы показал нам кузькину мать
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  8. #58
    Пользователь
    Регистрация
    20.05.2021
    Адрес
    г.Челябинск
    Сообщений
    36

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    В посте № 4 у вас ошибка, надо равно в объявлении таймера убрать. Вот так должно быть T1:TON;
    И в выложенной программе, у вас в конфигурации, так и осталось скорость 2400 и нечётный .
    Вот написал простую прогу с таймером TON.
    PROGRAM PLC_PRG
    VAR
    T1:TON;
    in1:BOOL:=FALSE;
    delay:TIME:=T#10000ms;
    i1:INT:=0;
    END_VAR
    IF in1=FALSE THEN
    in1:=TRUE;
    i1:=0;
    T1(IN:=TRUE,PT:=delay);(*запускаем таймер*)
    END_IF
    IF T1.Q=TRUE THEN
    in1:=FALSE;
    T1(IN:=FALSE,PT:=T#0s);
    ELSE
    i1:=i1+1;
    END_IF

    Почему-то таймер не считает?

  9. #59

    По умолчанию

    Цитата Сообщение от павелсиражев Посмотреть сообщение
    Вот написал простую прогу с таймером TON.
    Почему-то таймер не считает?
    Вставте строчку T1(); в тело программы.
    Для правильной работы таймера, он должен быть вызван вне конструкции IF .... END_IF Таймер 2jpg.jpg


    А таймер из поста #4, работает, если равно убрать.Таймер 1.jpg
    И кстати там он вызван вне конструкции, почему то)))
    Последний раз редактировалось kondor3000; 29.09.2021 в 10:04.

  10. #60
    Пользователь
    Регистрация
    28.08.2008
    Адрес
    23..93..123
    Сообщений
    1,688

    По умолчанию

    Цитата Сообщение от павелсиражев Посмотреть сообщение
    Вот написал простую прогу с таймером TON.
    PROGRAM PLC_PRG
    VAR
    T1:TON;
    in1:BOOL:=FALSE;
    delay:TIME:=T#10000ms;
    i1:INT:=0;
    END_VAR
    IF in1=FALSE THEN
    in1:=TRUE;
    i1:=0;
    T1(IN:=TRUE,PT:=delay);(*запускаем таймер*)
    END_IF
    IF T1.Q=TRUE THEN
    in1:=FALSE;
    T1(IN:=FALSE,PT:=T#0s);
    ELSE
    i1:=i1+1;
    END_IF

    Почему-то таймер не считает?
    А чё он должен считать, если вызван внутри конструкции if-Then, которая false?

Страница 6 из 8 ПерваяПервая ... 45678 ПоследняяПоследняя

Похожие темы

  1. Нестандартный отчет
    от Terminat в разделе Master SCADA 3
    Ответов: 3
    Последнее сообщение: 27.10.2017, 10:23
  2. Нестандартный протокол
    от SVVSVA в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 08.09.2011, 15:18
  3. нестандартный протокол
    от niklud19511 в разделе Сетевые технологии
    Ответов: 1
    Последнее сообщение: 05.05.2011, 15:02
  4. Нестандартный протокол
    от Евгений Владимирович в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 28.02.2010, 23:22
  5. Нестандартный протокол
    от Klik в разделе ПЛК1хх
    Ответов: 36
    Последнее сообщение: 03.03.2008, 13:49

Ваши права

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