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

Тема: RS232 циклично отправлять строку

  1. #1

    По умолчанию RS232 циклично отправлять строку

    Здравствуйте

    Я новичок, только начинаю разбираться с OWEN и CodeSys. ПЛК160[02] с интервалом 500 мс должен отправлять строку типа "8.68 ppg, 0.04 ppg, 266 gpm, 0.0 bpm, ", не одного примера не нашел.

    Помогите пожалуйста правильно сконфигурировать ПЛК.

    Пробовал так

    Код HTML:
    PROGRAM RS232_Sender
    VAR
        timer1: TON;
        send_string: STRING := '8.68 ppg, 0.04 ppg, 266 gpm, 0.0 bpm,';
        send_enable: BOOL;
    END_VAR
    
     // Инициализация таймера на 500 мс
        timer1(IN := NOT timer1.Q, PT := T#500ms);
        
        // Разрешение отправки по истечении таймера
        send_enable := timer1.Q;
        
        // Отправка строки при разрешении
        IF send_enable THEN
            COM_SEND(0, ADR(send_string), LEN(send_string));
            timer1(IN := FALSE); // Сброс таймера для нового цикла
        END_IF
    не работает.
    Спасибо.

  2. #2
    Пользователь
    Регистрация
    31.07.2013
    Адрес
    Аркаим
    Сообщений
    1,358

    По умолчанию

    Для запуска процедуры передачи сообщения надо использовать R_TRIG, иначе передача будет в каждом цикле ПЛК, пока timer1.Q=1.
    То есть будет флуд.
    Сброс таймера должен быть после окончания передачи сообщения, поскольку передача сообщения занимает время больше, чем цикл ПЛК.
    Можно использовать BLINK из библиотеки Util.lib, его выход через R_TRIG подать на запуск процедуры передачи.

  3. #3

    По умолчанию

    Терзают смутный сомнения... PROGRAM..
    При каждом вызове переменные создаются заново?
    Может FB надо (функциональный блок)?

  4. #4

    По умолчанию

    Здесь на сайте в разделе Codesys 2.3 полно примеров обмена через порты. И обязательно нужно изучить библиотеку SysLibCom, описание тоже там же.

  5. #5

    По умолчанию

    Ошибка потому что COM_SEND не задан

  6. #6
    Banned
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,664

    По умолчанию

    по выложенному коду не определить что COM_SEND это функциональный блок, возможно какая нибудь функция, может глобальный ФБ

    RS232_Sender ни чем не отличается от главного PLC_PRG? не припоминаю чтоб там что то несохранялось до следующего цикла

    строка send_enable := timer1.Q; выполняет условие только в одном цикле, исходя из того как выполняется сам таймер, R_TRIG тут ни к чему, а вот работа по СОМ порту требует длительного времени, поэтому вероятно обмен ни чем не заканчивается

Похожие темы

  1. ПР200. Возможно ли отправлять АТ-команды на модем?
    от Decaf в разделе Программируемые реле
    Ответов: 17
    Последнее сообщение: 18.04.2025, 20:24
  2. Как записать $ в строку
    от aposternak35 в разделе СПК210, СПК1xx [М01]
    Ответов: 2
    Последнее сообщение: 27.11.2023, 17:12
  3. ПЛК150 (TCP) - (RS232) NPort 5110 ( Ethernet) - (RS232) СП270
    от AvtCom в разделе Панели оператора (HMI)
    Ответов: 1
    Последнее сообщение: 02.12.2015, 17:43
  4. ПЛК150 (TCP) - (RS232) NPort 5110 ( Ethernet) - (RS232) СП270
    от AvtCom в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 29.11.2015, 17:52
  5. циклично-поточная технология транспортировки сырья
    от AlexP в разделе Подбор Оборудования
    Ответов: 4
    Последнее сообщение: 17.04.2010, 23:43

Ваши права

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