petuhovdmitry

Ответы в темах

Просмотр 15 сообщений - с 31 по 45 (из 55 всего)
  • Автор
    Записи
  • в ответ на: как правильно достать текст #38509
    petuhovdmitry
    Участник

    возможно правильнее будет к ulong приводить.

    Предлагаете поправить в скрипте?

    в ответ на: Сцепить каналы в строку #38508
    petuhovdmitry
    Участник

    > Сдается что один регистр это две буквы, а остальные 8 это уже просто число.
    Да, четыре числа, хранящиеся в отдельных ячейках регистра.

    Этот пример — это версия прошивки ПЛК.
    Должна бы выглядять как: 1.0.5.114.NS

    Пока нашел допустимым выводить в табличке, как:
    Версия прошивки ПЛК | 105.114
    Суффикс версии прошивки ПЛК | NS

    Далее, нужно будет научится выводить GTIN (14 цифр), дату производства (DD.MM.YYYY), партию (может содержать не только цифры)
    https://ncloud.interra.company/s/HEqAmtpK6DenaRS

    Ну, и вишенкой на торте — код маркировки, который 31+ символов

    в ответ на: Сцепить каналы в строку #38502
    petuhovdmitry
    Участник

    > Сделайте шаблон чтения вашей строки,
    > читая как double по 8 байт сразу.
    > И лог запроса и ответа сюда.
    Пришлось сделать ulong, потому, что с double ничего не приходило

    Request element group «hr_50-54»
    Send (12): 01 4C 00 00 00 06 01 03 00 32 00 05
    Receive (7/7): 01 4C 00 00 00 0D 01
    Receive (12/12): 03 0A 00 01 00 00 00 05 00 72 53 4E
    OK

    и при этом:

    | **************************** hr_50-54 ***************************** |
    +——+—————+—————+———————+———+
    | 61 | elem50-53 | elem50-53 | 281 474 977 038 450 | |
    +——+—————+—————+———————+———+
    | 62 | elem54-54 | elem54-54 | 21 326 | |
    +——+—————+—————+———————+———+

    в ответ на: Сцепить каналы в строку #38501
    petuhovdmitry
    Участник

    >> Нет, не можете. Посмотрите формулы, поймете.
    >> Длина данных = 8 + Scada создаст массив каналов

    Это значит, что я в принципе в табличных представлениях не смогу, например, отобразить (и хранить изменения) GTIN продукта (14 цифр), не говоря уж о Коде маркировки 31+ символов, номер партии, который может быть 8+ символов, не раскладывая это по восьмибайтным кускам?

    в ответ на: Сцепить каналы в строку #38496
    petuhovdmitry
    Участник

    Кстсти, я могу вместо Val(43) указать Val(код_тэга)?

    • Ответ изменён 1 год, 4 месяца назад пользователем petuhovdmitry.
    в ответ на: Сцепить каналы в строку #38495
    petuhovdmitry
    Участник

    >> с 100 регистра (сами там смотрите с какого)
    Понял, попробую.

    >> Потом делаете расчетный канал с длиной 8, 9, 10 сколько требуется.
    Тут странно. Я создал расчетный канал ascii string. Размер его по-умолчанию, как я поняд — 8 символов.
    Запихнул туда (вход): Val(43).ToString() + Val(44).ToString() + Val(45).ToString() + Val(46).ToString()

    и скада мне в табличке отобразила только 8 символов. если я в диълине данных канала укажу какое нибудь сисло, например двойку, то скада в табличке дважды отобразит мне результат работы входной формулы 🙂

    в ответ на: Сцепить каналы в строку #38490
    petuhovdmitry
    Участник

    PLC Delta AS228T данные типа STRING хранит в двухбайтовых регистрах.
    Как я их запихну?

    в ответ на: Сцепить каналы в строку #38486
    petuhovdmitry
    Участник

    Доброго!
    Много ли воды утекло с тех пор?

    Вот к чему вопрос. Я пытаюсь выстроить внешний мониторинг процесса работы системы валидации кодов маркировки на линии фасовки продукции. Для этого, хорошо бы, получать складывать на хранение значения полученных кодов маркировки с камеры техзрения. С нее я умею по модбасу получать код маркировки длиной 31+ ASCII-символов (16+ даухбайтовых ячеек из регистра хранения). Но, далее, мне понадобится собрать этот код из 16+ двухбайтовых каналов, сцепить и записать в расчетный канал. Понятное дело, что для этого в скаде, нужно будет настроить хренения в PostgreSQL. Сие возможно нынче?

    в ответ на: как правильно достать текст #38484
    petuhovdmitry
    Участник

    https://ncloud.interra.company/s/3o28CM2TzqLwBte
    Отлично, то что нужно, спасибо!
    Уверен, что этот опыт будет и другим полезен.

    в ответ на: как правильно достать текст #38482
    petuhovdmitry
    Участник

    или нужно сначала закинуть это в кастомный скрипт?

    в ответ на: как правильно достать текст #38481
    petuhovdmitry
    Участник

    >> немного другая формула для этого — ToAscii
    а что передать в нее? ToAscii(Cnl) роняет скаду

    в ответ на: как правильно достать текст #38477
    petuhovdmitry
    Участник

    гугель подсказывает, что:

    В C#, чтобы преобразовать шестнадцатеричную строку в обычную строку, используйте метод System.Text.Encoding.ASCII.GetString() или System.Text.Encoding.UTF8.GetString(). Сначала шестнадцатеричную строку нужно преобразовать в массив байтов, а затем преобразовать этот массив байтов в строку.

    using System;
    using System.Text;

    public class HexToText
    {
    public static void Main(string[] args)
    {
    string hexString = «48656c6c6f20576f726c64»; // Пример шестнадцатеричной строки «Hello World»
    string result = HexToString(hexString);
    Console.WriteLine(result); // Вывод: Hello World
    }

    public static string HexToString(string hexString)
    {
    // Удаляем префикс «0x» (если он есть)
    if (hexString.StartsWith(«0x»))
    {
    hexString = hexString.Substring(2);
    }

    // Преобразуем шестнадцатеричную строку в массив байтов
    byte[] bytes = new byte[hexString.Length / 2];
    for (int i = 0; i < bytes.Length; i++)
    {
    string byteString = hexString.Substring(i * 2, 2);
    bytes[i] = byte.Parse(byteString, System.Globalization.NumberStyles.HexNumber);
    }

    // Преобразуем массив байтов в строку
    return Encoding.UTF8.GetString(bytes);
    }
    }

    про DecodeAscii в контексте C# ничего не нашел

    в ответ на: как правильно достать текст #38476
    petuhovdmitry
    Участник

    да, я понимаю, что в ПЛК хранится не строка, а набор числовых значений двухбайтовых. В питоне, получив с ПЛК примерно так конвертим:

    def convert_controller_ascii_data_to_string(self, data: list, reverse=False):
    «»»Конвертируем массив, полученный от контроллера в строку»»»
    try:
    if reverse:
    byte_order = ‘little’
    else:
    byte_order = ‘big’
    data_array_converted = [value.to_bytes(2, byteorder=byte_order).decode(‘utf-8’) for value in data]
    data_string = «».join(data_array_converted)
    data_string = data_string.replace(‘\x00’, »)
    except:
    self.logger.error(f»Не получилось конвертировать ascii массив {data} от контроллера в строку»)
    raise Exception(f»Не получилось конвертировать ascii массив {data} от контроллера в строку»)
    return data_string

    в ответ на: как правильно достать текст #38474
    petuhovdmitry
    Участник

    >> Подозреваю, что DecodeAscii работает когда байты в числе
    >> уже соответствуют ascii символам.

    этокакэто? 🙂

    в ответ на: как правильно достать текст #38473
    petuhovdmitry
    Участник

    про 01 я наврал — 10 🙂 Переворачиваем

Просмотр 15 сообщений - с 31 по 45 (из 55 всего)