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

Тема: Сенсорная панель СП310,макрос

  1. #1

    По умолчанию Сенсорная панель СП310,макрос

    Добрый день! Возник следующий вопрос, возможно ли с помощью макроса выводить сообщения на экран панели?
    Например:
    Mes='Авария в шкафу №....';
    PSW[1000]=Mes;
    и на экране панели вызвать этот регистр и там покажется заданное сообщение

  2. #2
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,064

    По умолчанию

    Цитата Сообщение от Jerniks Посмотреть сообщение
    Добрый день! Возник следующий вопрос, возможно ли с помощью макроса выводить сообщения на экран панели?
    Например:
    Mes='Авария в шкафу №....';
    PSW[1000]=Mes;
    и на экране панели вызвать этот регистр и там покажется заданное сообщение
    Добрый день.
    Да, это возможно.

    На примере строки 'Авария в шкафу №1' код макроса будет следующим:

    Код:
    char mes[18]="\xc0\xe2\xe0\xf0\xe8\xff\x20\xe2\x20\xf8\xea\xe0\xf4\xf3\x20\xb9\x31";
    memcpy(&PSW[300], mes, 18);
    1. Фактически строка занимает 17 однобайтовых символов. Поскольку панель работает с двухбайтовыми регистрами - удобнее все буферы объявлять четными (в данном случае - 18).
    2. Элементы Текстовый дисплей/Текстовый ввод в панели используют кодировку Win1251
    2. В макросах нельзя использовать кириллицу, поэтому используется экранирующие последовательности (https://en.wikipedia.org/wiki/Escape_sequences_in_C)
    \x - это спецсимвол, который указывает на то, что следующие два символа надо трактовать как HEX-значение (в качестве которого мы указываем ASCII-код символа)
    4. Для перевода кириллической строки в ASCII-коды удобно использовать онлайн-конвертер, например: http://crypt-online.ru/crypts/text2hex/
    Но могут быть нюанс - например, конвертер по ссылке неправильно конвертирует символ №.
    5. После выполнения макроса записанная строка займет регистры PSW300-308

    https://ftp.owen.ru/SP300/99_ForumFi...extDisplay.txp

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

    По умолчанию

    Вместо
    memcpy(&PSW[300], mes, 18);
    можно использовать стандартную функцию sprintf()
    и сразу "печатать" в Текстовый дисплей, например PSW[1000], нужной длины.
    Типа
    sprintf((char*)&PSW[1000], "My Text");

    Поддерживается форматирование. Например печать даты времени (дата и время в регистрах PSW30..PSW35 в двоично-десятичном формате)

    sprintf((char*)&PSW[1000], "%4X-%2.2X-%2.2X %2.2X:%2.2X:%2.2X ", PSW[30], PSW[31], PSW[32], PSW[33], PSW[34], PSW[35]);
    Захват-100.png

    Печатаем в Текстовый дисплей PSW[1000] (десять регистров PSW1000...PSW1009)
    Захват-2.png
    Результат - строка вида 2021-07-22 13:36:15

    Для задачи ТС, с учетом отсутствия кириллицы

    int Num;
    Num = 10;
    sprintf((char*)&PSW[1000], "\xc0\xe2\xe0\xf0\xe8\xff\x20\xe2\x20\xf8\xea\xe0\ xf4\xf3\x20\xb9\x31 %d", Num);
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  4. #4

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Добрый день.
    Да, это возможно.

    На примере строки 'Авария в шкафу №1' код макроса будет следующим:

    Код:
    char mes[18]="\xc0\xe2\xe0\xf0\xe8\xff\x20\xe2\x20\xf8\xea\xe0\xf4\xf3\x20\xb9\x31";
    memcpy(&PSW[300], mes, 18);
    1. Фактически строка занимает 17 однобайтовых символов. Поскольку панель работает с двухбайтовыми регистрами - удобнее все буферы объявлять четными (в данном случае - 18).
    2. Элементы Текстовый дисплей/Текстовый ввод в панели используют кодировку Win1251
    2. В макросах нельзя использовать кириллицу, поэтому используется экранирующие последовательности (https://en.wikipedia.org/wiki/Escape_sequences_in_C)
    \x - это спецсимвол, который указывает на то, что следующие два символа надо трактовать как HEX-значение (в качестве которого мы указываем ASCII-код символа)
    4. Для перевода кириллической строки в ASCII-коды удобно использовать онлайн-конвертер, например: http://crypt-online.ru/crypts/text2hex/
    Но могут быть нюанс - например, конвертер по ссылке неправильно конвертирует символ №.
    5. После выполнения макроса записанная строка займет регистры PSW300-308

    https://ftp.owen.ru/SP300/99_ForumFi...extDisplay.txp
    Спасибо, помогло)

  5. #5

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Вместо
    memcpy(&PSW[300], mes, 18);
    можно использовать стандартную функцию sprintf()
    и сразу "печатать" в Текстовый дисплей, например PSW[1000], нужной длины.
    Типа
    sprintf((char*)&PSW[1000], "My Text");

    Поддерживается форматирование. Например печать даты времени (дата и время в регистрах PSW30..PSW35 в двоично-десятичном формате)

    sprintf((char*)&PSW[1000], "%4X-%2.2X-%2.2X %2.2X:%2.2X:%2.2X ", PSW[30], PSW[31], PSW[32], PSW[33], PSW[34], PSW[35]);
    Захват-100.png

    Печатаем в Текстовый дисплей PSW[1000] (десять регистров PSW1000...PSW1009)
    Захват-2.png
    Результат - строка вида 2021-07-22 13:36:15

    Для задачи ТС, с учетом отсутствия кириллицы

    int Num;
    Num = 10;
    sprintf((char*)&PSW[1000], "\xc0\xe2\xe0\xf0\xe8\xff\x20\xe2\x20\xf8\xea\xe0\ xf4\xf3\x20\xb9\x31 %d", Num);
    Спасибо, попробую использовать!

  6. #6

    По умолчанию

    Возник еще один вопрос, могу ли я в данной панели с помощью инструментов: "цифровой ввода", "текстового дисплея", "текстового ввода", или с помощью макроса обращаться к области авторазмещения?
    Т.е. сам туда записывать и брать оттуда значения регистров?

  7. #7
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,064

    По умолчанию

    Цитата Сообщение от Jerniks Посмотреть сообщение
    Возник еще один вопрос, могу ли я в данной панели с помощью инструментов: "цифровой ввода", "текстового дисплея", "текстового ввода", или с помощью макроса обращаться к области авторазмещения?
    Т.е. сам туда записывать и брать оттуда значения регистров?
    Если вы не используете эту область в элементах типа Тренд, Историческая таблица и т.д. - то можете.

  8. #8

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Если вы не используете эту область в элементах типа Тренд, Историческая таблица и т.д. - то можете.
    а как к ней обраться с помощью макроса?

  9. #9

  10. #10

    По умолчанию

    Если я напишу на языке пользовательскую библиотеку возможно ли ее применение для панели?

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

Похожие темы

  1. Сенсорная панель СП310,макросс
    от Jerniks в разделе Сервисное ПО
    Ответов: 4
    Последнее сообщение: 15.07.2021, 13:58
  2. Сенсорная панель СП310
    от Jerniks в разделе Сервисное ПО
    Ответов: 4
    Последнее сообщение: 14.07.2021, 12:45
  3. СП310 Макрос - как обратиться к отдельному биту
    от Serhioromano в разделе Панели оператора (HMI)
    Ответов: 4
    Последнее сообщение: 21.02.2018, 08:53
  4. Контроллер + сенсорная панель на станок
    от kolyaz в разделе Подбор Оборудования
    Ответов: 10
    Последнее сообщение: 24.11.2015, 19:46

Ваши права

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