Страница 1 из 8 123 ... ПоследняяПоследняя
Показано с 1 по 10 из 77

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

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

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

    Здравствуйте. Возникла задача подключить электронные весы ВСП4 с индикатором НВТ-9 к ПЛК 110-30-М02. Весы непрерывно передают данные через RS-232. Протокол данных во вложении. Использовал библиотеку SysLibCom.lib. Вот код.
    PROGRAM PLC_PRG
    VAR
    port:COMSETTINGS:=(Port:=COM1,dwBaudRate:=2400);
    portReady:BOOL;
    buf:ARRAY[0..13]OF BYTE;
    END_VAR
    IF NOT portReady THEN(* Сразу открываем и настраиваем порт *)
    portReady:=TRUE;
    SysComOpen(port.Port);
    SysComSetSettings(port.Port,ADR(port));
    ELSE(* Работаем с открытым портом *)
    SysComRead(port.Port, ADR(buf), 14, 0);
    END_IF

    Проблема в том, что данные в буфере buf меняются хаотично при неизменном весе. Связь плк с пк через Ethernet.
    Не могу понять в чем причина. Может кто подскажет. Спасибо.
    Вложения Вложения
    Последний раз редактировалось павелсиражев; 23.09.2021 в 10:57.

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

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    А где выделение пакетов из потока байт ? Где таймауты ?
    А как это сделать? Т.е. надо перед чтением последующего пакета выдержать время? А сколько? Спасибо.

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

    По умолчанию

    Добрый день. Переделал программу, добавил выдержку времени 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
    T1(IN:=TRUE,PT:=delay);(*запускаем таймер*)
    IF NOT portReady THEN(* Сразу открываем и настраиваем порт *)
    portReady:=TRUE;
    SysComOpen(port.Port);
    SysComSetSettings(port.Port,ADR(port));
    ELSE(* Работаем с открытым портом *)
    SysComRead(port.Port, ADR(buf), 14, 0);
    END_IF
    (*Если таймер запущен и закончил работу, то останавливаем таймер*)
    IF(T1.IN=TRUE AND T1.Q=TRUE) THEN
    T1(IN:=FALSE,PT:=T#0s);
    END_IF

    Но ничего не изменилось.

  4. #4
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    7,531

    По умолчанию

    Данные из индикатора передаются в непрерывном режиме в коде ASCII в COM-порт ПЭВМ (скорость 9600, нечет, 8 бит, 1 стоп).

    Сделайте выводы елки палки....
    Вам надо написать код так, чтобы ловить 0x0D 0x0A и начинать хранение в буфер пакета до следующих 0x0D 0x0A
    А или первые 77 6E ловить и далее до окончания.

    Выдергивать строку с весом и парсить значение...
    Последний раз редактировалось melky; 24.09.2021 в 12:59.

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

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    А где выделение пакетов из потока байт ? Где таймауты ?
    Где выделение пакетов из хаотичного потока байт?
    Функция чтения из порта возвращает кол-во прочитанных байт, начать прием может с какого угодно места и получить какой угодно кусок пакетов, надо сложить последовательно буффер не из 14байт а хотя-бы 28, найти байты начала строки и выцедить данные, далее чистить буффер и читать- заполнять заново

  6. #6
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    7,531

    По умолчанию

    Можно читать по 1 байту и если там 0x77 дочитывать 13 оставшихся, проверять что в последних двух 0x0D 0x0A и во втором 0x6E быть уверенным что пакет полный.

  7. #7

    По умолчанию

    Вам же уже выделили жирным текстом. Скорость весов 9600 , а установлено 2400.

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

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Если что - 15 достаточно. Учитывая string удобней 16.
    А если придет с середины пакета?

  9. #9
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    7,531

    По умолчанию

    ужос будет простой, сколько раз ПЛК должен будет обождать, пока пакет не придет полностью ?

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

    По умолчанию

    Валенок а разве ПЛК не будет успевать по одному байту и сверять его например либо с началом пакета либо с окончанием?
    По идее после окончания пакета 0х0A всегда должна быть пауза у прибора, То есть мы теряем один пакет. То есть дождались 0x0A и начали чтение нового пакета.

    Я так понимаю в программе же надо делать "начало измерения" то есть какая-то кнопка "Пуск" для программы, измерили, остановились, сохранили в базу или еще куда-то. Ну не читать же пустые весы постоянно.

Страница 1 из 8 123 ... ПоследняяПоследняя

Похожие темы

  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

Ваши права

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