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

Тема: Одновременный прием данных по двум UART в панель СП310

  1. #1

    По умолчанию Одновременный прием данных по двум UART в панель СП310

    Добрый день!

    Реализую прием данных от двух одинаковых датчиков в СП310, которые автономно (самостоятельно) передают посылки с интервалом несколько секунд.
    Использую макросы и Конфигуратор ОВЕН СП300 (V2.D3k-5).

    Использую команду Receive(PLC,DataReceive,28,1000,28);
    При этом панель занята приемом посылки по открытому порту.
    Подскажите, пожалуйста, как правильно реализовать одновременный прием по двум портам (PLC, Download), чтобы не было коллизий и потерянных данных.

    И второй вопрос, ответ на который нигде не смог найти.
    Использование ф-ии Receive брал из примера с сайта Овен.
    Что означает последний параметр, передаваемый в ф-ию Receive?
    То ли первое значение (28), то ли последнее значение (28) — количество слов (байт), требующих приема.
    Прошу помочь с форматом команды или направить, где посмотреть.

  2. #2

    По умолчанию

    Панель не умеет UART, умеет только RS485, RS232 и ТСР/IP. Нужен конвертер.
    Протоколы только модбас RTU, модбас ASCII и модбас ТСР.

    Датчики обычно слейв и не передают ничего сами, их должна опросить панель Мастер.
    Последний раз редактировалось kondor3000; 05.08.2025 в 08:11.

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

    По умолчанию

    А панель обладает многозадачностью? В смысле потоков?

  4. #4

    По умолчанию

    Кажется, межсимвольный таймаут в мс (панель должна определить конец посылки по этому таймауту, она не ждет приема всех указанных данных).
    Попробуйте вызвать две команды подряд (у СП должна быть буферизация портов, размер буфера не известен).
    Последний раз редактировалось EFrol; 05.08.2025 в 09:47.

  5. #5

    По умолчанию

    Спасибо за ответы.
    К сожалению, в моем случае датчики представляют собой метрологическое оборудование, которое в режиме мастер выдает пакеты с измерениями 1 раз в 15 сек.
    Могу ошибаться, но в режиме «модбас ASCII», если верить терминальной программе, передача и прием сообщений происходит как по обычному UART-протоколу.

    melky, в общем-то об этом и был мой вопрос. Обладает ли панель многозадачностью, и можно ли реализовать одновременную и независимую работу по двум интерфейсам (не важно даже, modbus или чистый uart).

    EFrol, спасибо большое за наиболее полезный ответ. Это можно выяснить экспериментально.
    Последний раз редактировалось zaurm; 05.08.2025 в 10:40.

  6. #6
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    4,126

    По умолчанию

    Посмотрите мой пример чтения показаний из весового терминала CAS CI-1560 https://owen.ru/forum/showthread.php...l=1#post306065
    Код:
    #define Alarm		300			// Number PSB from error flag
    #define adrPR		16			// Addres PR200
    #define adrRegPR	512			// Addres register "Weight"
    
    WORD timeOut;
    WORD status = 0;
    BYTE byArr[44] = {' '};
    char *strWeight = "      0";
    int i = 0;
    static short int Weight = 0;
    //---- change timeout port of PLC (only for ModBus)
    Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 38, 0, TYPE_WORD, &timeOut);
    if(timeOut == 1000) Write(HMI_LOCAL_MCH, 0, TYPE_PFW, 38, 0, TYPE_WORD, 200);
    
    
    //----- Get string (22 bytes) from CAS1560
    while(status != 22 && i <= 3) {
    	status = Receive(DOWNLOAD, byArr, 22, 1000, 100);
        i++;					//next try
        PSW[500] = status;		//debug only !!
        PSW[501] = i;			//debug only !!
    }
    
    //--- if three attempts were unsuccessful, set error flag for three seconds
    if (i >= 3 && status != 22) {
        SetPSB(Alarm);
        Delay(3000);
        ResetPSB(Alarm);
    }
    else if (byArr[20] =='\r' && byArr[21] =='\n') {
        memcpy(strWeight, byArr +10, 7);	//extract string weight
        Weight = atoi(strWeight);	//convert string to number
        if (byArr[9] == '-') Weight = Weight * (-1);
    //----
    	PSW[314] = Weight;			//debug only !!
    	memcpy(&PSW[300], byArr, 22);	//debug only !!
    }    
    
    Leave(DOWNLOAD);	//close port DOWNLOAD
    //Delay(100);
    //--- write weight in the register PR200
    Write(PLC, adrPR, MODBUS_RTU_REG_4X, adrRegPR, 0, TYPE_WORD, Weight);
    ЗЫ,
    Прошу помочь с форматом команды или направить, где посмотреть
    Еще один пример чтения (команда Receive)- Гипертерминал для панели СП https://owen.ru/forum/showthread.php...l=1#post247040
    Последний раз редактировалось petera; 05.08.2025 в 11:42.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Мой канал на РУТУБЕ
    https://rutube.ru/channel/23641433/
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  7. #7

    По умолчанию

    petere, спасибо за примеры. Было полезно.

    EFrol, Вы были ближе всего к истине.

    Итог тестирования

    Был собран кабель — Tx с COM-порта терминала на Rx двух портов панели. Это гарантировало синхронную передачу одного байта в два порта.

    Вариант 1
    В одном макросе две команды одна за другой читают из портов. Макрос вызывается постоянно и параллельно.
    Код:
    Receive(PLC,DataReceiveA,1,1,1);
    Receive(DOWNLOAD,DataReceiveB,1,1,1);
    Первый байт попадает в переменную DataReceiveA, второй байт попадает в DataReceiveB. Хотя требуется, чтобы первый байт попадал и в "А" из первого порта, и в "B" из второго порта.
    При этом потери байт происходят очень предсказуемо. Отправили 6 байт, получили по одному каналу 3, по другому тоже 3.

    Вариант 2
    В двух макросах две команды читают в свои переменные данные из двух портов. Макросы вызываются постоянно и параллельно.
    И тут становится явно, что буферы у портов все же есть.
    Но для того, чтобы каждый байт попадал и в одну переменную, и в другую, требуется направлять их чуть ли не чаще 1 раза в секунду.
    В противном случае возникает коллизия, и параллельно работающие макросы не успевают забирать свои байты из портов.
    Причем порт PLC забирает чаще, порт Download — реже. Отправляя с терминала последовательность "аааааа" в оба порта, получаем на выходе суммарно по двум портам "abaaaaa".
    Но тем не менее, при отправке байта два макроса забирают его из своих портов.
    Пробовал устанавливать малые и нулевые задержки.

    Отсутствие обработки прерываний, доступных пользователю, что есть в самых древних и простых микроконтроллерах, на которых реализация такого приема не представляет никакого труда, сужает функционал до того, о котором писал ув. kondor3000.
    В случае с панелью это вопрос к ОС, а не к вполне развитому микроконтроллеру.

    Большое всем спасибо за участие. Еще немного потестирую, но мой вывод по теме — такой прием практически невозможен в случае передачи пакетами, а не отдельными байтами.
    Последний раз редактировалось zaurm; 22.08.2025 в 15:48.

  8. #8
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,070

    По умолчанию

    To zaurm
    Что решили свою задачу - хорошо. Чистое любопытство - два датчика, два порта - зачем смешивать и дублировать байты на все порты? Там одна линия к двум портам что-ли подключена?

  9. #9

    По умолчанию

    Имеется два измерительных прибора, которые автоматически отправляют по COM-порту пакет с измерениями с интервалом 15 секунд.
    Необходимо принимать и обновлять на экране панели значения с двух приборов одновременно.
    Приборы переводить в режим slave по условиям ТЗ нельзя, т. к. работа панели носит вспомогательный характер как индикатора.

    Для исследования панели на предмет параллельного и независимого приема данных по двум портам был проделан эксперимент из поста выше.

  10. #10
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,070

    По умолчанию

    Так физическое подключение оба датчика на оба порта?

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

Похожие темы

  1. Ответов: 26
    Последнее сообщение: 31.01.2023, 17:42
  2. Сенсорная панель СП310
    от Jerniks в разделе Панели оператора (HMI)
    Ответов: 9
    Последнее сообщение: 08.09.2022, 17:44
  3. Ответов: 21
    Последнее сообщение: 24.03.2020, 18:29
  4. Прием данных по Com порту
    от Klik в разделе ПЛК1хх
    Ответов: 24
    Последнее сообщение: 21.03.2008, 14:13

Ваши права

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