Страница 78 из 136 ПерваяПервая ... 2868767778798088128 ... ПоследняяПоследняя
Показано с 771 по 780 из 1355

Тема: Вопросы по MasterSCADA 4D

  1. #771
    Пользователь
    Регистрация
    16.02.2018
    Адрес
    Краснодар
    Сообщений
    23

    По умолчанию

    Цитата Сообщение от b_aleks2 Посмотреть сообщение
    C#

    int decValue = Convert.ToInt32(hexValue, 16);
    А как обвязать это в рабочий код? Создал скрипт С#, добавил hexValue - In типа STRING и decValue - Out типа UINT. Связи пока не делал, в ручном режиме на подачу значений типа ff или ff00aa не реагирует.

  2. #772
    Пользователь
    Регистрация
    16.02.2018
    Адрес
    Краснодар
    Сообщений
    23

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    Если получили byte цвета 0xCC то еще проще, (int)byteR, (int)byteG, (int)byteB и обратно ваше число, которое не превышает 0-255 потом в байт (byte)collorR и т.д.
    Ещё одна точка стыка. Отдельные байты хорошо режутся и склеиваются в типе STRING. А Графический элемент выдаёт тип HMI.SolidColorType, вида rgba(255,255,255,1.0). Как преобразовать этот тип в string без скобок и прочих лишних элементов? Информации по работе с этим типом данных очень мало, всё сваливается к прямой передаче из цвета одного элемента в цвет другого. А как бы его разобрать/собрать в понятный базовый тип STRING, которым все вычисления гораздо проще?
    Думал на тему работы с указателями, но компилятор ругается на конструкции вида
    VAR
    pt : POINTER TO BYTE; (* Указатель на символ *)
    END_VAR
    IF pt^ = CHR THEN ..

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

    По умолчанию

    Ну это не совсем ко мне, просто прочитал, что вам байтами оперировать надо в C# В вашей строке видимо еще какой-то параметр и он уже фактически double.
    А так, поймать скобки, и в массив строк, первые 3 (0-2) ячейки массива целые числа, последнее double, после обработки все обратно и в строку.

    и это можно сделать средствами скрипта C# не прибегая еще и к ST или на чем вы там последнее написали.

  4. #774
    Пользователь
    Регистрация
    16.02.2018
    Адрес
    Краснодар
    Сообщений
    23

    По умолчанию

    Идею понял, но пока мои познания C# невелики, горожу костыли на ST )). Эх, без посимвольного парсинга не обойтись. Задача облегчается тем, что формат стабильный, можно сразу отрезать постоянную начальную и конечную часть строки 'rgba(' и ')' ,а затем расклеивать оставшееся по признаку запятой. В таком случае и преобразование в HEX не потребуется, оно там в десятичном представлении.
    Всё было бы гораздо проще, если бы в MasterScada 4D библиотеку OSCAT.BASIC реализовали в полном объёме, а не избирательно.

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

    По умолчанию

    Не нужен вам посимвольный парсинг, вам нужно для C#
    1. работа со строками, чтобы взять в строку то, что между скобками
    2. забрать в строковой массив данные, они у вас разделены ,
    3 обработать как вам надо (первые три ячейки парсинг в int, последню парсинг в double)
    4. вырезать из исходной то, что между скобками
    5. свой массив в строку и сделать инсерт в исходную между скобками

  6. #776
    Пользователь
    Регистрация
    16.02.2018
    Адрес
    Краснодар
    Сообщений
    23

    По умолчанию

    Работает, только вот RedOUT где-то подвисает посередине.. Хотя, вроде всё по фен-шую, и следующие строки находятся нормально, а вот первая почему-то хромает.

    sRGBA := OBJECT_TO_STRING(RGBA_IN);
    IF LEN(sRGBA) > 0 AND FIND(IN1:= sRGBA, IN2:= 'rgba') > 0 THEN
    sRGBA := DELETE(IN:= sRGBA, L:= 5, P:= 1);
    sRed := LEFT(IN:= sRGBA, L:= (FIND(IN1:= sRGBA, IN2:= ',')-1));
    RedOUT := STRING_TO_USINT(sRed);
    sRGBA := DELETE(IN:= sRGBA, L:= FIND(IN1:= sRGBA, IN2:= ','), P:= 1);

    sGreen := LEFT(IN:= sRGBA, L:= (FIND(IN1:= sRGBA, IN2:= ',')-1));
    GreenOUT := STRING_TO_USINT(sGreen);
    sRGBA := DELETE(IN:= sRGBA, L:= FIND(IN1:= sRGBA, IN2:= ','), P:= 1);

    sBlue := LEFT(IN:= sRGBA, L:= (FIND(IN1:= sRGBA, IN2:= ',')-1));
    BlueOUT := STRING_TO_USINT(sBlue);
    sRGBA := DELETE(IN:= sRGBA, L:= FIND(IN1:= sRGBA, IN2:= ','), P:= 1);

    sAlpha := LEFT(IN:= sRGBA, L:= (FIND(IN1:= sRGBA, IN2:= ')')-1));
    AlphaOUT := REAL_TO_USINT(TRUNC(STRING_TO_REAL(sAlpha)*255));
    END_IF

    Осталось Всё это в цикл завернуть и работу с элементами массива.
    Последний раз редактировалось FireLizzard; 05.12.2022 в 13:14.

  7. #777
    Пользователь
    Регистрация
    16.02.2018
    Адрес
    Краснодар
    Сообщений
    23

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    Не нужен вам посимвольный парсинг, вам нужно для C#
    1. работа со строками, чтобы взять в строку то, что между скобками
    2. забрать в строковой массив данные, они у вас разделены ,
    3 обработать как вам надо (первые три ячейки парсинг в int, последню парсинг в double)
    4. вырезать из исходной то, что между скобками
    5. свой массив в строку и сделать инсерт в исходную между скобками
    Попробую на обоих языках реализовать

  8. #778

    По умолчанию

    Цитата Сообщение от FireLizzard Посмотреть сообщение
    Работает, только вот RedOUT где-то подвисает посередине.. Хотя, вроде всё по фен-шую, и следующие строки находятся нормально, а вот первая почему-то хромает.

    sRGBA := OBJECT_TO_STRING(RGBA_IN);
    IF LEN(sRGBA) > 0 AND FIND(IN1:= sRGBA, IN2:= 'rgba') > 0 THEN
    sRGBA := DELETE(IN:= sRGBA, L:= 5, P:= 1);
    sRed := LEFT(IN:= sRGBA, L:= (FIND(IN1:= sRGBA, IN2:= ',')-1));
    RedOUT := STRING_TO_USINT(sRed);
    sRGBA := DELETE(IN:= sRGBA, L:= FIND(IN1:= sRGBA, IN2:= ','), P:= 1);

    sGreen := LEFT(IN:= sRGBA, L:= (FIND(IN1:= sRGBA, IN2:= ',')-1));
    GreenOUT := STRING_TO_USINT(sGreen);
    sRGBA := DELETE(IN:= sRGBA, L:= FIND(IN1:= sRGBA, IN2:= ','), P:= 1);

    sBlue := LEFT(IN:= sRGBA, L:= (FIND(IN1:= sRGBA, IN2:= ',')-1));
    BlueOUT := STRING_TO_USINT(sBlue);
    sRGBA := DELETE(IN:= sRGBA, L:= FIND(IN1:= sRGBA, IN2:= ','), P:= 1);

    sAlpha := LEFT(IN:= sRGBA, L:= (FIND(IN1:= sRGBA, IN2:= ')')-1));
    AlphaOUT := REAL_TO_USINT(TRUNC(STRING_TO_REAL(sAlpha)*255));
    END_IF

    Осталось Всё это в цикл завернуть и работу с элементами массива.
    Вот еще посмотрите,
    набросал
    Изображения Изображения
    Вложения Вложения

  9. #779
    Пользователь
    Регистрация
    16.02.2018
    Адрес
    Краснодар
    Сообщений
    23

    По умолчанию

    Цитата Сообщение от VladGC Посмотреть сообщение
    Вот еще посмотрите,
    набросал
    Благодарю, часть решения понятна, применил. Дочитался в хелпе, что "C# программы поддерживается только в тех версиях исполнительной системы, которые работают под ОС Windows." интересно, а как оно будет себя вести на ПЛК110 при обращении с мобильных клиентов (Телефоны)? Там же .NET и не пахло..

  10. #780
    Пользователь
    Регистрация
    16.02.2018
    Адрес
    Краснодар
    Сообщений
    23

    По умолчанию

    В общем, для задачи работы с RGB диммером допилил ФБ на ST.
    Двусторонняя конвертация из формата строки rgba(255,255,255,1.0) в отдельные значения USINT, и обратно. Мне важно было оставить возможность задания цветов не только через элемент выбора цвета, но и числом через параметры.
    Вложения Вложения

Страница 78 из 136 ПерваяПервая ... 2868767778798088128 ... ПоследняяПоследняя

Похожие темы

  1. Вопросы по СИ-8
    от aleksandr87 в разделе Эксплуатация
    Ответов: 2
    Последнее сообщение: 11.06.2016, 18:56
  2. Вопросы новичка по MasterScada
    от MrNobody в разделе Master SCADA 3
    Ответов: 4
    Последнее сообщение: 04.09.2014, 15:39
  3. MasterScada v3.6 Основные вопросы
    от colorprint2008 в разделе Master SCADA 3
    Ответов: 7
    Последнее сообщение: 24.12.2013, 16:50
  4. конвертация проекта из Masterscada 3.5 в Masterscada 3.4
    от Сергей_SPB в разделе Master SCADA 3
    Ответов: 2
    Последнее сообщение: 01.04.2013, 17:56
  5. Вопросы по трендам MasterSCADA
    от 42ia в разделе Master SCADA 3
    Ответов: 9
    Последнее сообщение: 26.06.2012, 11:58

Ваши права

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