Страница 3 из 9 ПерваяПервая 12345 ... ПоследняяПоследняя
Показано с 21 по 30 из 81

Тема: Функции String

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

    По умолчанию

    Так я про то и написал, зачем выкручивать руки несчастным 4-м байтам, если можно один FB сделать и потом его использовать в том же ST

    У вас одна строка BitConverter.ToSingle(массив байт любой длины, индек первого байта переменной float в байтов преставлении)

    Если вернуть надо обязательно в double то перед просто добавить (double)BitConverter.ToSingle( и так далее)
    Если вы получаете ответ от Пульсара с единственной переменной то индекс первого

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

    По умолчанию

    К ответу выше, вам даже не придется выдергивать байты из массива байт ответа.
    Второй параметр в функции BiConverter.ToSingle(массив байт, индекс) указывает на первый байт ответа, где лежит float
    Если в ответе 0,1,2,3 индексы это адрес прибора
    4 индекс это код команды
    5 индекс это длина пакета
    То с 6-го индекса начинаются переменные
    Если запрашиваете больше одной, то следующий float начинается с 10-го индекса массива ответа
    Следующий с 14-го и так далее

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

    По умолчанию

    Цитата Сообщение от Vetal10 Посмотреть сообщение
    Как их (все 4) превратить в REAL ?.
    дык я ж написал выше. Их не нужно "превращать". На них нужно правильно посмотреть
    Я для вас даже цветом выделил сейчас
    Последний раз редактировалось Валенок; 07.08.2024 в 18:15.

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

    По умолчанию

    На C# будет одна рабочая строчка, остальные это оформительство C# функции для МастерСкада по их правилам, чтобы MS4 поняла, что куда будет подаваться и откуда будет выводиться.

    У функции должно быть два входа.
    1. Подаваемый массив байт, полученный от прибора
    2. Номер индекса - указатель на первый байт из 4-х для конвертации во float
    И выход - собственно значение, которое вы получите.

    Если кто знает ms пусть оформит. Я беспонятия, как там писать и оформлять функции, ибо МастерСкада не использую. И лет сто использовать не буду
    Когда у пЕсателей на первом месте интерфейс, а потом логика и удобство работы, так оно и будет.

  5. #25
    Пользователь
    Регистрация
    22.05.2018
    Адрес
    Сочи, Лазаревское
    Сообщений
    91

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    дык я ж написал выше. Их не нужно "превращать". На них нужно правильно посмотреть
    Я для вас даже цветом выделил сейчас
    Не вкурил. Это на каком языке?

  6. #26

    По умолчанию

    Цитата Сообщение от Vetal10 Посмотреть сообщение
    Не вкурил. Это на каком языке?
    Это надо делать в ПЛК, а не с Cкаде, присвоить по адресу в слейве ПЛК (прямая адресация, типа %QW0 или физический адрес 0)
    массив из 4 байт, так как REAL, это и есть переменная из 4 байт подряд (или 2 WORD).
    А в Скаде уже получите готовый REAL, по адресу 0 в который положили массив байт.
    Последний раз редактировалось kondor3000; 07.08.2024 в 21:54.

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

    По умолчанию

    Там не ПЛК, там готовый прибор, который в пакете данных отдает 4-х байтные данные, либо float либо uint32 в зависимости от типа переменной в канале.

    https://support.mps-soft.ru/Help-web...b_c_sharp.html

    Справка как всегда на высоте

    В дереве объектов создадим программу C#. Добавим в нее три параметра типов :

    •Mass_Array_Of_Byte и IndexInt на клеммник входов - Как они там правильно в MS4D называются ищите, первый вход должен быть массив байт, второй просто INT число

    •Znachenie на клеммник выходов - тут нужно REAL тип

    public override void Execute()
    {
    Znachenie = BitConverter.ToSingle(Mass_Array_Of_Byte, IndexInt);
    }

    Ну и далее по справке создать блок или как-то там.
    И вишенка на торте -

    Важно! Для возможности работы С# программ в исполнительную систему должна входить опция MSRT4D-C#. Данная опция включена в базовый функционал лицензий Professional и Enterprise.

    тьфу в очередной раз в это поделие.
    я конечно тоже не ангел и делаю платные реализации, только не за такие суммы.
    Последний раз редактировалось melky; 07.08.2024 в 22:04.

  8. #28
    Пользователь
    Регистрация
    22.05.2018
    Адрес
    Сочи, Лазаревское
    Сообщений
    91

    По умолчанию

    Вот много всяко разных советов. Но давайте поступим проще. Никакого ПЛК нет. Он не нужен. C# - не нужен.
    Есть 4 байта вырванных из ответа прибора в виде STRING. Могу из них сделать ARRAY OF BYTE.
    Есть язык ST. Простым языком скажите, что надо сделать с этими четырьмя байтами чтоб из всех четырёх получился один REAL?
    Сложить? Умножить? Разделить? Поменять местами?
    Вот тут "capzap" ванговал - он 100 пудов прав! Но как он это сделал? Он же ни C# не использовал, ни ФБ. Просто в калькуляторе сосчитал и получил правильный ответ.
    Что с чем надо сделать чтоб был REAL ? Могу по битам разложить.

    4 байта: 234,89,6,61. Само число известно: 0.0328006.
    Последний раз редактировалось Vetal10; 08.08.2024 в 06:34.

  9. #29

    По умолчанию

    Цитата Сообщение от Vetal10 Посмотреть сообщение
    Вот много всяко разных советов. Но давайте поступим проще. Никакого ПЛК нет. Он не нужен. C# - не нужен.
    Есть 4 байта вырванных из ответа прибора в виде STRING. Могу из них сделать ARRAY OF BYTE.
    Есть язык ST. Простым языком скажите, что надо сделать с этими четырьмя байтами чтоб из всех четырёх получился один REAL?
    Сложить? Умножить? Разделить? Поменять местами?
    Вот тут "capzap" ванговал - он 100 пудов прав! Но как он это сделал? Он же ни C# не использовал, ни ФБ. Просто в калькуляторе сосчитал и получил правильный ответ.
    Что с чем надо сделать чтоб был REAL ? Могу по битам разложить.

    4 байта: 234,89,6,61. Само число известно: 0.0328006.
    Да говорят же вам, ДЕЛАТЬ - ничего не надо:
    Вот переменные rReal и byByte0...byByte3 которые занимают ОДНО И ТО-ЖЕ место в памяти.
    Если вы смотрите на это место как на 4 байта, то там лежат 234,89,6,61.
    Но если вы посмотрите на это место, как на 4-байтовый REAL - то там будет 0.03280059...
    изображение_2024-08-08_104820084.png

    Снимок экрана 2024-08-08 103548.png
    Программа даже не запущена.

    Вам надо разобраться, как сделать это в ST MS4

  10. #30
    Пользователь
    Регистрация
    22.05.2018
    Адрес
    Сочи, Лазаревское
    Сообщений
    91

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    Да говорят же вам, ДЕЛАТЬ - ничего не надо:
    Вам надо разобраться, как сделать это в ST MS4
    Ну нет в ST такого. Там есть VAR := ЛЮБОЕ_TO_OBJECT. Из области ANY. ЛЮБОЕ - это INT, REAL ... Какую переменную VAR задашь для результата - такое OBJECT тебе и сделает.
    Но OBJECT может быть только OBJECT_TO_STRING();

Страница 3 из 9 ПерваяПервая 12345 ... ПоследняяПоследняя

Похожие темы

  1. Длинные строки (STRING)
    от rumkin в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 16.05.2022, 13:45
  2. String и Модбас слейв
    от жекон в разделе Сетевые технологии
    Ответов: 11
    Последнее сообщение: 04.11.2013, 16:59
  3. Длинный STRING
    от Nazar в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 08.03.2011, 13:04
  4. String переменные в архиваторе
    от Антон в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 25.12.2007, 10:53

Ваши права

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