Mqtt. Как превратить OFF и ON в числа?

Стартовая страница Форумы Понять, как работает ПО Mqtt. Как превратить OFF и ON в числа?

Просмотр 15 сообщений - с 1 по 15 (из 23 всего)
  • Автор
    Записи
  • #35181
    phenix769
    Участник

    Добрый день. Прошу вас поделится примером написания скрипта для Mqtt. Нужно данные 2@1729596485400, превратить в число (3). И не помешал бы пример как превратить OFF и ON превратить в число?

    • Тема изменена 1 год, 9 месяцев назад пользователем phenix769.
    #35192
    manjey73
    Участник

    2@1729596485400 — интересно, а где тут число 3?

    #35193
    manjey73
    Участник

    Если OFF и ON приходят как строки, то в канал они преобразуются в массив байт как число double
    То по идее надо формулой брать GetByte и превращать в строку ASCII например, а потом проверять ее если там OFF то возвращать 0, если ON то 1.

    // Converts the specified value to an ASCII string up to 8 characters long.
    // Преобразует заданное значение в строку ASCII длиной до 8 символов.
    public string DecodeAscii(double val)
    {
        byte[] buf = BitConverter.GetBytes(val);
        return Encoding.ASCII.GetString(buf).TrimEnd((char)0);
    }

    За основу взять данную формулу. Только возdращать double после определения и проверки полученной строки.
    типа

    public double GetOnOff(double val)
    {
        byte[] buf = BitConverter.GetBytes(val);
        string OnOff = Encoding.ASCII.GetString(buf).TrimEnd((char)0);
        if (OnOff == "ON") return 1;
        else if (OnOff == "OFF") return 0;
        else return double.NaN;
    }
    • Ответ изменён 1 год, 9 месяцев назад пользователем manjey73.
    #35202
    Mikhail
    Модератор

    Добрый день!
    Сделайте скриншоты полученных данных в Коммуникаторе.

    #35205
    phenix769
    Участник

    Это скрипт на ON и OFF. Создаём одно значения в таблице item1(Смотрите видео: Rapid SCADA 6. Урок 14. Настройка MQTT-клиента)

    let data1 = payload;
    log(«Значения пришли >» + payload);
    if (‘ON’ == data1) {
    let data = 1;
    log(«Истина >» + data );
    setValue(0, 1);
    } else {
    let data = 0;
    log(«Лож >» + data );
    setValue(0, 0);
    }

    #35206
    phenix769
    Участник

    Мне проще сравнить значения и присвоить свои данные на выход. Завтра буду с этим 2@1729596485400. Нужно хвост отпилить и оставить значения >2 . Завтра и в биты перевод попробую .

    • Ответ изменён 1 год, 9 месяцев назад пользователем phenix769.
    #35208
    phenix769
    Участник

    Ущё раз, кавычки исправил .

    let data1 = payload;
    log(‘Значения пришли >’ + payload);
    if (‘ON’ == data1) {
    let data = 1;
    log(‘Истина >’ + data );
    setValue(0, 1);
    } else {
    let data = 0;
    log(‘Лож >’ + data );
    setValue(0, 0);
    }

    #35213
    phenix769
    Участник

    Задача передать первое значения до @. из 2@1729596485400.(в данном случае это 2)
    Это рабочий вариант.

    let data1 = payload[0];
    log(‘Значения пришли >’ + payload);

    if (‘1’ == data1)
    {
    let data = 1;
    log(‘Истина >’ + data );
    setValue(0, 1);
    } else

    if (‘2’ == data1)
    {
    let data = 2;
    log(‘Истина >’ + data );
    setValue(0, 2);
    } else

    if (‘3’ == data1)
    {
    let data = 3;
    log(‘Истина >’ + data );
    setValue(0, 3);
    }

    else {
    let data = 0;
    log(‘Лож >’ + data );
    setValue(0, 0);
    }

    #35214
    phenix769
    Участник

    Только запятые меняем на двойные.

    • Ответ изменён 1 год, 9 месяцев назад пользователем phenix769.
    #35216
    manjey73
    Участник

    То есть это скриптами JS в MQTT, а не формулами в Scada так понимаю.
    Хотя и формулами можно было раскатать всю строку, если ее в массив пихнуть.

    #35217
    a80808
    Участник

    Ложь с мягким знаком пишется.

    #35226
    Mikhail
    Модератор

    Для отладки JavaScript можно либо выводить промежуточные результаты в журнал, либо найти какой-нибудь онлайн инструмент, который позволит пройти по скрипту по шагам.

    #35234
    a80808
    Участник

    Третий вариант — прокси-прога, которая читает из MQTT, парсит данные и отправляет в СКАДу уже нормальные данные.
    «Чушь, конечно, но зато честно!» )))

    #35250
    phenix769
    Участник

    let data = payload;

    if (‘@’ == payload[1])
    { data = payload[0] ;
    log(‘Значения пришли >’ + data ) ; }

    if (‘@’ == payload[2])
    { data = payload[0] + payload[1] ;
    log(‘Значения пришли >’ + data ) ; }

    if (‘@’ == payload[3])
    { data = payload[0] + payload[1] + payload[2] ;
    log(‘Значения пришли >’ + data ) ; }

    if (‘@’ == payload[4])
    { data = payload[0] + payload[1] + payload[2] + payload[3] ;
    log(‘Значения пришли >’ + data ) ; }

    if (‘@’ == payload[5])
    { data = payload[0] + payload[1] + payload[2] + payload[3] + payload[4] ;
    log(‘Значения пришли >’ + data ) ; }

    log(‘Значения преобразованы до пяти знаков до @>’ + data );

    // Преобразование с 1@424242209, 12@424242209, 123@424242209, 1234@424242209,
    // 12345@424242209 в 1, 12, 123, 1234, 112345.
    // Третий вариант — не рабочий !.

    #35251
    phenix769
    Участник

    let data = payload;
    log(‘Значения пришли >’ + data );

    let data1 = 0;
    let a = 0;
    let i = 15; // ИЗМЕНИТЬ i = (8-бит(заменить на 7), 16-бит(заменить на 15)
    while (i > 0 )
    {
    a = 0;
    if (data — Math.pow(2, i) >= 0 )
    {
    data = data — Math.pow(2, i) ;
    a = 1;
    data1 = data1 + Math.pow(10, i) ;
    }
    log(‘setValue(item,бит >’+ i +’ значения >’+ a + ‘ )’);
    setValue(i, a); // формирование от 15-бита до 1-бита и запись в канал.
    i = i — 1;
    }
    a = 0;
    if (data — 1 >= 0 )
    {
    data = data — 1 ;
    a = 1;
    data1 = data1 + 1;
    }
    log(‘setValue(item,бит >’+ i +’ значения >’+ a + ‘ )’);
    setValue(i, a); // формирование 0-бита и запись в канал.
    log(‘Значения преобразованы в бит >’ + data1 );

    // Раскладываем число на биты на нужное количество.
    // Создаём дополнительно item по количеству нужных вам бит.
    // В журнале смотрим изменения .

    • Ответ изменён 1 год, 9 месяцев назад пользователем phenix769.
Просмотр 15 сообщений - с 1 по 15 (из 23 всего)
  • Для ответа в этой теме необходимо авторизоваться.