Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 18 из 18

Тема: Функциональный блок для работы ПЛК100_24_Р_М и аналитическими весами

  1. #11

    По умолчанию

    Доброго времени! Связался с представителем данных весов, они заявили, что моя модель не имеет функции по передачи данных по регистрам. Они работают по простому ASCII-протоколу через RS-232. Нет адресов регистров, нет функций чтения/записи по адресу.
    Обмен происходит только текстовыми командами и ответами. Но есть возможность написать код на ПЛК для создании виртуального регистра. В связи с чем у меня вопрос о том, насколько это сложно и существуют ли примеры, которые были похожи?

  2. #12

    По умолчанию

    Цитата Сообщение от What_is_up Посмотреть сообщение
    Доброго времени! Связался с представителем данных весов, они заявили, что моя модель не имеет функции по передачи данных по регистрам. Они работают по простому ASCII-протоколу через RS-232. Нет адресов регистров, нет функций чтения/записи по адресу.
    Обмен происходит только текстовыми командами и ответами. Но есть возможность написать код на ПЛК для создании виртуального регистра. В связи с чем у меня вопрос о том, насколько это сложно и существуют ли примеры, которые были похожи?
    Где описание команд, и пример что должны ответить весы ?

  3. #13

    По умолчанию

    [Префикс][Знак][Значение][Единица] N - неттон; Знак - +/-; Значение - выравнено пробелами: 2.190; Единица - g. ПРИМЕР: N1 2.190 g Запрашивать данные по кнопке PRINT
    Последний раз редактировалось What_is_up; Сегодня в 16:41.

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

    По умолчанию

    документ от весов запросите, где все это расписано, а не вашими вот словами. Тут все слушали Шаляпина, петь не умеет (Рабинович напел)

  5. #15

    По умолчанию

    What_is_up, работать с COM портом на ПЛК в CODESYS не доводилось.
    А по организации разбора строк я бы сделал посимвольный приём и обработку при помощи конечного автомата на CASE с состояниями:
    1 ожидание заголовка "N"
    2 ожидание знака
    3 ожидание и приём пробелов
    4 ожидание, приём и преобразование символов цифр в целую часть числа - заканчивается приёмом точки
    5 ожидание, приём и преобразование символов цифр в дробную часть числа - заканчивается приёмом пробела
    6 ожидание символа единицы измерения "g"

    Если какой-то шаг выполняется долго, то считаем строку "битой" и переходим к п.1 - ждать хорошую следующую
    Если принято что-то не то - также всё бросаем.

    Период между получением символа можно оценить просто:
    - на один символ отправляется 8 бит данных и 2 бита служебной информации
    - скорость обмена 9600 бит/с, т.е. 960 байт/с - т.е. между приёмом символов пройдёт чуть больше 1 мс - Нужно посмотреть длительность машинного цикла ПЛК и, возможно, обрабатывать не в прерываниях, а в основной программе
    Если по аппаратной части я и заблуждаюсь, то не очень сильно.


    Строку в число преобразовать очень просто.
    Наверное в библиотеках что-то есть, может в библиотеке OSCAT...
    А если нет, то по мере реализации ещё раз задайте вопрос - преобразование строки в число очень простое, кто-нибудь подскажет.
    Я бы не ждал приёма всей строки и по мере получения цифр собирал бы число, да и строку бы нигде не хранил. Но с этим поступите как решите.

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

    По умолчанию

    Много написали. Нужен буфер на 2-3 объема данных. Как вариант ожидание тишины ещё.
    Приняли толпу, потом ищем.

  7. #17

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    Много написали. Нужен буфер на 2-3 объема данных. Как вариант ожидание тишины ещё.
    Приняли толпу, потом ищем.
    Думаю, буфер требуется при приёме массы важных данных (чисел), когда ошибочность принятого пакета будет проверяться после принятия самого последнего байта.
    А в этом случае принимается всего одно число - временная переменная, в которой будет накапливаться результат - и станет буфером на одно значение. После приёма завершающего байта (символа 'g') значение из этого "как-бы"-буфера будет переписано в заданную переменную из основной программы.

    Т.е. буфер как бы и есть, но не для накопления строк - обработка в потоке.
    Разве только на период отладки ещё выполнять запись в циклический буфер - для визуализации, но не для обработки.

    Если реализовывать полностью весь протокол - возможно там есть ещё команды и ответы на них - тогда да, приём строки, обработка строки, выделение нескольких разных переменных и т.д.
    Хотя я бы постарался уйти от обработки строк после полного приёма - если формат посылок позволяет обрабатывать в потоке.

    Есть много задач, для решения которых не нужно хранить полностью все данные
    https://acmp.ru/index.asp?main=task&id_task=694
    https://informatics.msk.ru/mod/state...hapterid=915#1
    https://acmp.ru/index.asp?main=task&id_task=120
    Думаю, это одна из них

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

    По умолчанию

    Ну, "бумажки" я так и не увидел.

Страница 2 из 2 ПерваяПервая 12

Похожие темы

  1. функциональный блок CTU
    от АлексейI в разделе Среда программирования OWEN Logic
    Ответов: 4
    Последнее сообщение: 05.12.2023, 16:17
  2. Функциональный блок PID
    от Hemann в разделе Программируемые реле
    Ответов: 78
    Последнее сообщение: 04.05.2017, 08:57
  3. LD + функциональный блок
    от дрю в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 26.04.2014, 08:47
  4. Пользовательский функциональный блок
    от fill-forty в разделе ПЛК1хх
    Ответов: 6
    Последнее сообщение: 17.08.2009, 08:49
  5. Программа и функциональный блок
    от Geniu$ в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 27.05.2008, 20:25

Ваши права

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