Показано с 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,077

    По умолчанию

    Для запуска процедуры передачи сообщения надо использовать 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
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,476

    По умолчанию

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

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

    строка send_enable := timer1.Q; выполняет условие только в одном цикле, исходя из того как выполняется сам таймер, R_TRIG тут ни к чему, а вот работа по СОМ порту требует длительного времени, поэтому вероятно обмен ни чем не заканчивается
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

Похожие темы

  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

Ваши права

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