PDA

Просмотр полной версии : Функции String



@ND
11.08.2015, 08:49
В стандарте МЭК есть много полезных функций String.
В КДС есть нечто такое?

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

@ND
11.08.2015, 08:55
блин Вы что справочную систему КДС не можете открыть и посмотреть на работу со строками?

Справочная система КДС не полная.

Например отсутствует описание следующих функций:

1. DWORD_TO_REAL()
2. REAL_TO_STRING()
3. STRING_TO_REAL()

Это я еще не сильно копался в справочной системе.

@ND
11.08.2015, 09:17
Поиск в Справке плохо организован.
"REAL_TO_STRING" через поиск не ищется.

А STRING_TO_REAL, DWORD_TO_REAL всё равно нет.

@ND
11.08.2015, 09:24
и работа со строками есть

Спасибо то что надо.

Vetal10
07.08.2024, 11:38
Пожалуйста, подскажи что я неправильно делаю.
Не работает у меня "STRING_TO_REAL"

77867

77868

Валенок
07.08.2024, 11:54
А что хрень в V_STRING?
тип/значение. Массив какой-то

Vetal10
07.08.2024, 11:58
Просто переменная STRING. В ней значение объёма куб/м, надеюсь FLOAT.
Я в переменную STRING неправильно дал начальное значение?

Валенок
07.08.2024, 12:09
Просто переменная STRING
имеет значение типа '3.4' а не тот непонятный набор символов

kondor3000
07.08.2024, 13:07
Очень похоже, что переменная разложена на 4 байта, (234, 89, 6, 61), а число REAL там 0.03280059

А чтобы конвертировать в REAL, переменная String должна быть '0.03280059' или '0.0328'

melky
07.08.2024, 13:25
Вам нужен конвертер во float из массива байт.
Не знаю, как там в ST на MS4D но если вы можете сделать функцию на c# то примерно так.
public single ConverToFloat(byte[] mass)
{
reuturn BitConverter.ToSingle(mass, 0);
}

з.ы. за точность синтаксиса не ручаюсь, пишу с телефона на пляже :)
И посто вызываете эту функцию, подсовывая ей байтовый массив. В Пульсоровском протоколе байты идут от младшего с старшему, вроде переставлять не надо.

Как правильно заметили, там ieee754

melky
07.08.2024, 13:27
Наверняка в ST есть так же готовые функции преобразования из байт во float
Считав несколько переменных одним запросом вы можете добавить доп переменную в функции для индекса и изменить там на
BitConverter.ToSingle (mass, index);

И указывать индекс массива каждой требуемой переменной

Vetal10
07.08.2024, 13:33
Реал состоит из четырех байт. Если это продолжение темы про хекс, то это не тупо байты в строку перевести, а собрать согласно ieee 754

ЗЫ Вангую что там на приборе сейчас 0.0328

Да, это из той же оперы, так сказать продолжение. Как отправить разобрался. Теперь надо понять что делать с ответом.
Число там = 0.0328006. ЗНАЧИТ Я ПРАВИЛЬНЫЕ 4 БАЙТА "ВЫРВАЛ".
Расскажите подробнее, что значит собрать согласно ieee 754 ?
Из ответа прибора я выделю эти 4 байта в стринг. А дальше как собрать?

melky
07.08.2024, 13:33
capzap не просто вангует, он прав.
Протокол отдает массив запрашиваемых переменных в виде массива 4-х байтнвх значений .
Единственное если она float, ,то это ieee754, в наборе ещё можно оказаться так же uint32 так как тоже имеет 4 байта и это допустимо для одного запроса

melky
07.08.2024, 14:57
Блин, неужели в ST нет аналога в MS4D?

И неужели там же нет возможности сделать FBD на C# и применять его в ST ?

kondor3000
07.08.2024, 15:17
Можно из 4 байт собрать 2 WORD, а потом с помощью функции собрать REAL


W1:=(Byte1+shl(Byte2,8));
W2:=(Byte3+shl(Byte4,8));


Функция тут, выложил capzap, REAL из двух WORD_____ https://owen.ru/forum/showthread.php?t=37203&page=10#95

В ПЛК это делается без проблем через указатели.
Пробовал собрать сразу DWORD и конвертировать в REAL, получается не правильно.

melky
07.08.2024, 15:46
https://masteropc.insat.ru/blog/fb-skript-c-i-ego-ispolzovanie-v-masterscada/

Если в мс4д под понятием Вещественный всегда double, то просто потом привести к нему.
У вас есть средства, а вы е... с кучей преобразований из строк в байты из байтов в Ворды и т.д. Зачем?

Vetal10
07.08.2024, 16:16
https://masteropc.insat.ru/blog/fb-skript-c-i-ego-ispolzovanie-v-masterscada/

У вас есть средства, а вы е... с кучей преобразований из строк в байты из байтов в Ворды и т.д. Зачем?

Я C# не знаю. Не смог понять когда и какие библиотеки подключать. И главное: где их брать и зачем это на простейшем алгоритме? Ни в одном языке такой дури нет.

Неужели свой ФБ на C# будет проще, чем несколько готовых конвертаций на ST ?

Vetal10
07.08.2024, 16:17
Блин, неужели в ST нет аналога в MS4D?

И неужели там же нет возможности сделать FBD на C# и применять его в ST ?

C# не знаю. Но любой ФБ конвертации можно запихнуть в ST.

Валенок
07.08.2024, 16:52
Неужели свой ФБ на C# будет проще, чем несколько готовых конвертаций на ST ?


b AT %MB0 : ARRAY[1..4] OF BYTE := 234,89,6,61;
x AT %MB0 : REAL;
собсно код:

; (*это код конвертации*)

--
а причем тут был string, непонятно

Vetal10
07.08.2024, 16:54
b AT %MB0 : ARRAY[1..4] OF BYTE := 234,89,6,61;
x AT %MB0 : REAL;
собсно код:

;

--
а причем тут был string, непонятно

STRING получится в самом начале, из ответа прибора будет вырвано 4 байта.
Как их (все 4) превратить в REAL ?

ARRAY OF BYTE := 234,89,6,61 уже получил. Что с ним дальше делать? С# не знаю. Как С# применить в ST не знаю.

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

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

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

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

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

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

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

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

Vetal10
07.08.2024, 20:25
дык я ж написал выше. Их не нужно "превращать". На них нужно правильно посмотреть
Я для вас даже цветом выделил сейчас

Не вкурил. Это на каком языке?

kondor3000
07.08.2024, 20:29
Не вкурил. Это на каком языке?

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

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

https://support.mps-soft.ru/Help-web/index.html?sozd_fb_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.

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

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

4 байта: 234,89,6,61. Само число известно: 0.0328006.

1exan
08.08.2024, 06:47
Вот много всяко разных советов. Но давайте поступим проще. Никакого ПЛК нет. Он не нужен. 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...
77893

77894
Программа даже не запущена.

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

Vetal10
08.08.2024, 07:03
Да говорят же вам, ДЕЛАТЬ - ничего не надо:
Вам надо разобраться, как сделать это в ST MS4

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

kondor3000
08.08.2024, 07:47
Ну нет в ST такого. Там есть VAR := ЛЮБОЕ_TO_OBJECT. Из области ANY. ЛЮБОЕ - это INT, REAL ... Какую переменную VAR задашь для результата - такое OBJECT тебе и сделает.
Но OBJECT может быть только OBJECT_TO_STRING();

Ещё один реальный вариант дал в 17 сообщении, только вы даже не смотрели его.

Vetal10
08.08.2024, 07:52
Можно из 4 байт собрать 2 WORD, а потом с помощью функции собрать REAL


W1:=(Byte1+shl(Byte2,8));
W2:=(Byte3+shl(Byte4,8));



Смотрел. На каком это языке? Что такое "shl" ? Как это применимо к ST ?

МихаилГл
08.08.2024, 08:07
Смотрел. На каком это языке? Что такое "shl" ? Как это применимо к ST ?

Да вроде нормальный ST:
77895

И функция сдвига стандартная...

capzap
08.08.2024, 08:15
Смотрел. На каком это языке? Что такое "shl" ? Как это применимо к ST ?

прочтите документацию, например функции сдвига
Вам вообще то предлагали код формирования вещественного числа, да это сложно, но простой вариант не получится


VAR
inpW0, inpW1 :DWORD;
stuff: ARRAY [0..3] OF BYTE := 234,89,6,61;

k : REAL;
sign : REAL;
exponent : REAL;
mant_mult : REAL;
stuffAdd : DWORD;
exp_raw : DWORD;
mantissa : DWORD;
i : INT;
negative : BOOL;

arrWToReal : REAL;
END_VAR



inpW1 :=SHL(BYTE_TO_WORD(stuff[3]),8) OR BYTE_TO_WORD(stuff[2]);
inpW0 :=SHL(BYTE_TO_WORD(stuff[1]),8) OR BYTE_TO_WORD(stuff[0]);
stuffAdd := SHL(inpW1, 16) + inpW0;
negative := SHR(stuffAdd, 31) > 0;
mant_mult := 1.0;
IF negative THEN
sign := -1.0;
ELSE
sign := 1.0;
END_IF;
exp_raw := SHR((stuffAdd MOD 2147483648), 23);
exponent := DWORD_TO_REAL(exp_raw) - 127;

mantissa := stuffAdd MOD 8388608;
FOR i := 0 TO 22 DO
IF (SHR(mantissa, (22 - i)) MOD 2) = 1 THEN
k := INT_TO_REAL(23 - (22 - i));
mant_mult := mant_mult + 1/(EXPT(2,k));
END_IF;
END_FOR;

arrWToReal := sign * (EXPT(2, exponent)) * mant_mult;



примерно так должно получится требуемое число

что касается этого утверждения

Есть 4 байта вырванных из ответа прибора в виде STRING.

У Вас же получалось с ComPortByte, который сразу возвращает массив байт, поэтому все и спрашивают зачем строки

Vetal10
08.08.2024, 08:17
Понятно. Как потом из двух WORD собрать REAL ?

МихаилГл
08.08.2024, 08:17
А чем ТС не устраивает объединение:

77897

Vetal10
08.08.2024, 08:19
У Вас же получалось с ComPortByte, который сразу возвращает массив байт, поэтому все и спрашивают зачем строки

В ответном массиве куча байт, а мне нужно только 4. Поэтому вырезать их реально с помощью STRING. Есть другой способ? Подскажи.
ФБ "ComPortByte" выдаёт массив. Его в STRING и обрезаю. Ещё не делал, но думаю получится. Можно из массива сразу убрать лишнее? Подскажи.

Вот ответ
11 57 35 85 01 0E EA 59 06 3D 01 00 B9 2D
и в нём сидит цифра 0.0328006
Т.е. EA 59 06 3D

capzap
08.08.2024, 08:30
В ответном массиве куча байт, а мне нужно только 4. Поэтому вырезать их реально с помощью STRING. Есть другой способ? Подскажи.
ФБ "ComPortByte" выдаёт массив. Его в STRING и обрезаю. Ещё не делал, но думаю получится. Можно из массива сразу убрать лишнее? Подскажи.

Вот ответ
11 57 35 85 01 0E EA 59 06 3D 01 00 B9 2D
и в нём сидит цифра 0.0328006
Т.е. EA 59 06 3D

Вам сложно из массива использоовать с 6 по 9 элементы?
77898

Vetal10
08.08.2024, 08:32
Не сложно. Каждый из 4-х элементов массива присвоить переменной?
Ну это уже детали. Сейчас опробую алгоритм, который Вы прислали.
Головняк, конечно, ещё тот, с этими преобразованиями. Знал, что не будет легко, но чтоб так ...

Vetal10
08.08.2024, 08:50
прочтите документацию, например функции сдвига
Вам вообще то предлагали код формирования вещественного числа, да это сложно, но простой вариант не получится


VAR
inpW0, inpW1 :DWORD;
stuff: ARRAY [0..3] OF BYTE := 234,89,6,61;

k : REAL;
sign : REAL;
exponent : REAL;
mant_mult : REAL;
stuffAdd : DWORD;
exp_raw : DWORD;
mantissa : DWORD;
i : INT;
negative : BOOL;

arrWToReal : REAL;
END_VAR



inpW1 :=SHL(BYTE_TO_WORD(stuff[3]),8) OR BYTE_TO_WORD(stuff[2]);
inpW0 :=SHL(BYTE_TO_WORD(stuff[1]),8) OR BYTE_TO_WORD(stuff[0]);
stuffAdd := SHL(inpW1, 16) + inpW0;
negative := SHR(stuffAdd, 31) > 0;
mant_mult := 1.0;
IF negative THEN
sign := -1.0;
ELSE
sign := 1.0;
END_IF;
exp_raw := SHR((stuffAdd MOD 2147483648), 23);
exponent := DWORD_TO_REAL(exp_raw) - 127;

mantissa := stuffAdd MOD 8388608;
FOR i := 0 TO 22 DO
IF (SHR(mantissa, (22 - i)) MOD 2) = 1 THEN
k := INT_TO_REAL(23 - (22 - i));
mant_mult := mant_mult + 1/(EXPT(2,k));
END_IF;
END_FOR;

arrWToReal := sign * (EXPT(2, exponent)) * mant_mult;





ОГРОМНОЕ СПАСИБО !!! РАБОТАЕТ !!!
Если бы не Ваша помощь, я бы ещё долго голову ломал с этим IEEE754.
Я, правда, думал, что будет проще.

1exan
08.08.2024, 08:51
Не сложно. Каждый из 4-х элементов массива присвоить переменной?
Ну это уже детали. Сейчас опробую алгоритм, который Вы прислали.
Головняк, конечно, ещё тот, с этими преобразованиями. Знал, что не будет легко, но чтоб так ...

Посмотрел и не нашел в MS4 никаких инструментов работы с памятью напрямую.
Наверное остаётся только вариант формирования числа как у capzap

Vetal10
08.08.2024, 08:55
Посмотрел и не нашел в MS4 никаких инструментов работы с памятью напрямую.
Наверное остаётся только вариант формирования числа как у capzap
Из ARRAY загнать в STRING, обрезать и справа и слева и снова в ARRAY загнать. Это можно.
А можно из ARRAY использовать только нужные элементы. Это уже на любителя.

Валенок
08.08.2024, 09:01
Из ARRAY загнать в STRING,.
Если в array первый 0 - как этот будет выглядеть?

Валенок
08.08.2024, 09:05
В ответном массиве..
структуре? //твоя скада - твоя изучать



Вот ответ
11 57 35 85 01 0E EA 59 06 3D 01 00 B9 2D

{word,dword,нужный_реал;...} //как в скаде с выравниванием - твоя изучать

Vetal10
08.08.2024, 10:31
Если в array первый 0 - как этот будет выглядеть?

Честно говоря, не знаю как правильно. Способов наверняка много. Мне понравился этот.

77902

77903

melky
08.08.2024, 10:35
https://support.mps-soft.ru/Help-web/index.html?dword_to.html

Вроде как есть готовые функции конвертации.

Опять же, работая с массивами байт и вообще с байтами - зачем строки в принципе? по два лишних преобразования всегда - зачем?

Vetal10
08.08.2024, 20:50
Получил ответ от Insat:
Был задан вопрос:
Здравствуйте!

У меня есть число: 0.0328006.

Оно записано в формате IEEE 754.

HEX: [EA 59 06 3D]

или

DEC: [234,89,6,61]

Подскажите пожалуйста, как мне конвертировать HEX или DEC в REAL чтоб получить это число ?

MasterScada 4D
---------------------------------
Ответ:
Стандартных функций для конвертации нет в MS4D. Поэтому вы можете написать свой функциональный блок для конвертировании из HEX в REAL. Хочу сразу заметить, что очередность байт обратная.

Вот пример ФБ:
77917

Проверил, работает.
-----------------------------------
HEX = 3D0659EA (STRING)

VAR
sign,exponent: INT;
mantissa: REAL;
END_VAR

sign := SHR(IN := (HEX_TO_DWORD(HEX) AND 2147483648), N := 31);
exponent := SHR(IN := (HEX_TO_DWORD(HEX) AND 2139095040), N := 23) - 127;
mantissa := 1+DWORD_TO_REAL((HEX_TO_DWORD(HEX) AND 8388607)) / (2**23);
Value_Real :=((-1)**sign) * mantissa * (2**exponent);
-----------------------------------------------------------------

Как и говорил "capzap" - легко не будет. Он прав 100 пудов !!!
--------------------------------------------------
Вывод: Покупаешь Пульсар - покупаешь головняк. Больше никогда не буду покупать Пульсар.
Я им писал, ну сделайте вы Mod-Bus и ваши продажи увеличатся. Ну фиг с ним, не хотите делать Mod-Bus, то сделайте для своих счётчиков OPC сервер, программисты же есть! Им по фигу.

НИКОГДА не покупайте Пульсар !!!

СПАСИБО "capzap" !!! ОГРОМНОЕ !!! Если бы не он, то я бы ............. охренел !!!!!!!!!
-------------------------------------------------
Купил китайский счётчик воды ультразвуковой. Он в два раза дешевле и у него и M-Bus и Mod-Bas. Выбирай какой хочешь. ТРИ секунды подцепил, проверил. Отправил на объект и НЕТ ГОЛОВНЯКА !!!

А Пульсар теперь будет валяться, пока не впарю кому-нить.
И, что прикольно, я им отписал, что мне такой товар не подходит. Возьмите назад. В ответ - тишина !!!

melky
08.08.2024, 21:43
Пульсар тут ни при чем. И кстати их протокол вполне нормальный.
Это вы ещё Логику не подключали к MS4D :)

з.ы. вообще некоторые протоколы приборов древнее MasterScada и других Scada систем.
И производители не обязаны вам ничем, там все решает железо и код, который способен крутиться на этом железе.

Пульсар открытый протокол, пилите, Шура, пилите :)

capzap
09.08.2024, 07:29
Был задан вопрос:
Здравствуйте!

У меня есть число: 0.0328006.
Вы им указывали что работаете с пульсаром, возможно они бы удивились что не обращаете внимание на эту ссылку https://support.mps-soft.ru/Help-web/rekomendacii_po_nastroike_protokola_pulsar.html, мне кажется есть легкий вариант, вероятно платный

Vetal10
09.08.2024, 11:43
Вы им указывали что работаете с пульсаром, возможно они бы удивились что не обращаете внимание на эту ссылку https://support.mps-soft.ru/Help-web/rekomendacii_po_nastroike_protokola_pulsar.html, мне кажется есть легкий вариант, вероятно платный

В другом месте (MasterSCADA4D + Ethernet + произвольный 16-тиричный код (HEX)) я уже писал. Дублирую!

С MAsterScada 4D я работаю давно. И никакой ссылки там не было пока ...

Я запросил в INSAT протокол для Пульсара с RS-485. Они содрали с меня 20 000 р. и попросили доступ. Две недели ковырялись, Сделали. И сделали его же в мультипротокол OPC сервер. Теперь при обновлении СКАДА с меня просят за обновление 10 000 и 20 000 за обновление протокола. Вот такой бизнес.

И только после этого у них есть ссылка на Пульсар. Поверь, я это контролирую.
Но в данном случае - это протокол пульсара по RS-485. Это ни разу не M-Bus. Та вся инфа в регистрах, как в Mod-Bus, единственная проблема того протокола, что в отличие от Mod-Bus у Пульсара самые первые не 2, а 4 байта адреса, поэтому в СКАДА оно не работает. Но я тогда и не разобрался как запустить ComPort. Спешил, поэтому предпочёл заплатить.

Vetal10
09.08.2024, 16:55
Пульсар тут ни при чем. И кстати их протокол вполне нормальный...

Да, нормальный он для пульсаровских программ. Но он больше нигде не работает беЗплатно.
А за деньги кого хочешь можно заставить работать.Особенно за большие деньги. Вот только заказчик не хочет это понимать и не платит за блаж.

МихаилГл
09.08.2024, 16:59
Да, нормальный он для пульсаровских программ. Но он больше нигде не работает беЗплатно.
А за деньги кого хочешь можно заставить работать.Особенно за большие деньги. Вот только заказчик не хочет это понимать и не платит за блаж.

Ставьте ПЛК210 и им форматируйте любой протокол в модбас тср. У вас что, приборы напрямую в скаду заведены? Никакого управления нет?

Vetal10
09.08.2024, 17:03
Ставьте ПЛК210 ...

У данного прибора управления нет. Это ультразвуковой счётчик воды. У него модифицированный MOD-BUS. Первые 4, а не 2 байта - адрес прибора.

МихаилГл
09.08.2024, 17:09
У данного прибора управления нет. Это ультразвуковой счётчик воды. У него модифицированный MOD-BUS. Первые 4, а не 2 байта - адрес прибора.

При чем тут модбас или не модбас, Плк210 позволяет любой модбас подобный протокол использовать и прочие как по 2х проводной линии rs485 так и по тср. По тср считываете данные порта и расшифровываете.

А во вторых, я спросил почему сразу в скаду? Больше никаких устройств кроме пульсаров нет?

Валенок
09.08.2024, 17:11
.. а модифицированный mod-bus это модифицированный modbus, т.к. там 1 байт на адрес прибора?

Vetal10
09.08.2024, 17:13
Есть проекты с управлением. Использую ПР-205.
Есть проект, где только один счётчик и всё.
У ПЛК210 возможностей больше, чем у MasterSCADA 4D ?

МихаилГл
09.08.2024, 17:13
.. а модифицированный mod-bus это модифицированный modbus, т.к. там 1 байт на адрес прибора?

Не знаю что там за протокол у тс, я подключал по rs485 несколько разновидностей китайских датчиков, от дальномеров до компасов и инклиномеров. Да, придется ручками весь обмен писать, но не так все и сложно.

МихаилГл
09.08.2024, 17:16
Есть проекты с управлением. Использую ПР-205.
Есть проект, где только один счётчик и всё.
У ПЛК210 возможностей больше, чем у MasterSCADA 4D ?

Там по крайней мере есть union, я вам выше показывал. Массив из 4 байт и реал записываете в юнион, и плк сам все делает. Во вторых в нем есть уже визуализация, если вам графики надо или прочее. Типа скады. Не ориентируюсь в ценах на мастерскаду, но плк около 50 тысяч.

https://owen.ru/forum/showthread.php?t=21878&page=4&p=443368&viewfull=1#post443368

Vetal10
09.08.2024, 17:19
Скада мне позволяет организовать диспетчеризацию через любой браузер по интернет. ПЛК также делает?

МихаилГл
09.08.2024, 17:20
Скада мне позволяет организовать диспетчеризацию через любой браузер по интернет. ПЛК также делает?

Этот да. Позволяет.

kondor3000
09.08.2024, 17:20
У ПЛК210 возможностей больше, чем у MasterSCADA 4D ?

Конечно больше, Мастерскада 4D это глючный, баговый и кривой продукт. На ПЛК210 можно было всё это сделать без напрягов, вместе с WEB интерфейсом.

Vetal10
09.08.2024, 18:33
Конечно больше, Мастерскада 4D это глючный, баговый и кривой продукт. На ПЛК210 можно было всё это сделать без напрягов, вместе с WEB интерфейсом.

Даже так?

https://up-laz.ru/макет

МихаилГл
09.08.2024, 18:44
Даже так?

https://up-laz.ru/макет

https://webspk.owen.ru:7070/webvisu.htm

Это спк, но это тот же продукт, только с экраном.

kondor3000
09.08.2024, 19:05
Даже так?

https://up-laz.ru/макет

Чем тут гордиться то? Пяток параметров на экран вывели, и десяток булевых. Это даже для панели оператора раз плюнуть, даже с десятком окон в придачу.

Vetal10
09.08.2024, 19:16
А во вторых, я спросил почему сразу в скаду? Больше никаких устройств кроме пульсаров нет?

Я же ответил. На тех объектах где надо управление использую ПР-205. Но счётчик зачем туда? Сразу в скаду.

Vetal10
09.08.2024, 19:17
Это даже для панели оператора раз плюнуть, даже с десятком окон в придачу.

ДЩа не панель нужна, а доступ в браузер через интернет. У меня на объектах даже мониторов нет.

МихаилГл
09.08.2024, 19:26
ДЩа не панель нужна, а доступ в браузер через интернет. У меня на объектах даже мониторов нет.

Вы ссылку то смотрели? Это типа и есть браузер плк. Веб визуализация. Нет у плк200 и плк210 монитора. Просто этот пример только в разделе спк приведен. Вбиваете нужный адрес в любом браузере и так же смотрите. Ваш пример кстати даже не масштабируется, как на смартфоне увидеть всю картинку? Танцевать с бубном? Переключать на не мобильное отображение?

PS Версия для ПК помогла...

МихаилГл
09.08.2024, 19:33
Я же ответил. На тех объектах где надо управление использую ПР-205. Но счётчик зачем туда? Сразу в скаду.

Ну видел я ваш ответ. Он был после заданного мной вопроса. Зачем вы еще раз это упомянули? Или вы по новой начали ветку читать? Внимательнее надо быть.

melky
09.08.2024, 21:54
1. Протокол Пульсар ни коим образом не относится к протоколу Modbus от слова СОВСЕМ.
Если производитель прибора и протокола применил расчет контрольной суммы такой же, как в Modbus, это не значит, что протокол стал Modbus подобным.
2. То же относится и к протоколу счётчиков Меркурий, там тоже контрольная сумма рассчитывается по тому же полиному, что и в Modbus.
И ещё можно назвать некоторые приборы, где CRC такой же как в Modbus.

Один раз запомните, что эти протоколы не Modbus и даже не Modbus подобные.

Протокол Пульсар достаточно прост и логичен, просто его надо понять, принять и прАстить :)

Кстати CRC по полиному как в Modbus очень классный, он даёт в результате 0, если на расчет закинуть весь пакет вместе с CRC.
Я пока не встречал на других расчетах подобного.

Мой драйвер Пульсар для RapidScada бесплатен, таким и останется, даже если прикручу к нему ещё чтение архивов. Писался давно, фактически шаблон надо делать ручками, извините, тогда плохо умел программировать, ну и приходилось обходить ограничения Scada. Правда не знаю, дойдут ли когда руки. Бесплатно, если мне самому придется модернизировать под свои задачи, сейчас мои задачи выполняются :)

з.ы. я уже предлагал использовать RapidScada в качестве шлюза в OPC UA или mqtt. Если MasterScada это понимает в рамках ваших лицензий.
Там всего-то надо будет установить сервер и коммуникатор, все БД в ноль без сохранения.
В базе за 0 рублей получаете шлюз на Пульсар протокол.
Опрашивать ваш конкретный прибор по MBus смысла не вижу, у них кривая реализация.
И перепиливать драйвер MBus пока нет в планах.
Есть одна идея, но ее надо проверить. Может проверю через Терминал ком порта. Но подозреваю, что может не сработать.
Мое мнение, Пульсар добавил протокол MBus для участия в рынке, но сделал это криво.

Vetal10
09.08.2024, 23:00
... но сделал это криво.

А это как и всегда!

Если тебе приходится постоянно "пилить" протоколы и ты к этому привык - то это судьба.
У меня другой подход. Если я купил СКАДА - то она должна работать с любым протоколом. Она для этого сделана. Разве не так? Если не так, то тогда зачем у неё вообще есть протоколы?
Я умею программировать на всех языках, кроме "С...", да и на "С..." тоже умею, но с его библиотеками не дружу.
И я считаю, что если надо в СКАДА программировать - то это должна быть какая-то нетривиальная задача. Ну есть у тебя проблема с ФБ или другая - реши её программированием. СКАДА это позволяет.
Но чтобы "пилить" протокол ... !!! Это уже слишком !!!

melky
09.08.2024, 23:00
Проверил MBus
10 40 01 41 16 - это так называемый NKE запрос с ответом E5

Если его посылать каждую сессию, то можно запрашивать по два запроса каждый раз.
У меня реализовано, что NKE посылается вообще один раз и потом нет, Происходит некорректные запросы из-за реализации у Пульсара. Честно не знаю, насколько это допустимо вообще протоколом, но такую штуку могу реализовать у себя быстро.
Только одно но, драйвер протокола MBus у меня платный на экземпляр сервера, правда ценник далек от ценников MasterScada :)

Вот только попытки его реализовать разовыми запросами в самой MasterScada думаю мало к чему приведут, он куда сложнее в разборе, чем протокол Пульсар.

melky
09.08.2024, 23:04
Vetal10 я не могу сказать что реализация 100% кривая, но ни у одного прибора пока еще не видел, чтобы одними и теми же запросами можно было прочитать разные телеграммы.
Ну еще не проверял на предмет работы протокола по id прибора. MBus протокол позволяет опрашивать приборы как по Адресу, который задается в для однобайтовой переменной, так и по серийному номеру прибора.

Запроса длинных телеграмм я не увидел. Вообще как бы хороший тон, что определенный запрос приводит к определенному ответу, а тут последовательность запросов из 5-ти приводит к разным ответам. Такое вижу впервые.

melky
09.08.2024, 23:09
Разве не так? не так. Scada в мире много и разных, у всех подходы разные. Например есть как Simple Scada - работает ТОЛЬКО через OPC DA серверы не имея поддержки протоколов собственными средствами, следовательно только Windows.
А так как я предпочитаю Sсada, которые моЖут :) работать под Linux, то мне она не подходит.
И так как я не привык ждать когда Scada отдуплится, после нескольких нажатий мышки, мне не подходит MasterScada.
И так далее - на каждый цвет свои фломастеры.

Vetal10
09.08.2024, 23:18
... не привык ждать когда Scada отдуплится, после нескольких нажатий мышки, мне не подходит MasterScada.
И так далее - на каждый цвет свои фломастеры.

В MasterScada 4D ты сам задаёшь время когда ей отдуплиться. По умолчанию у неё цикл 1000 миллисекунд, то бишь, 1 секунда. Можешь поставить ей хоть 10 наносекунд, но твой комп сможет за это время сосчитать всё то, что ты сам понаписал? Чисто, по быстродействию?

melky
09.08.2024, 23:26
Vetal10 я говорю не про RT, который как заявляют работает сносно. Я прежде всего говорю про среду разработки, которой тебя окунули в года 2000-ные с дерьмовым компом.

Мне надо ехать от среды разработки, а не рюшечки интерфейса слабых программистов.

Я как-то экспериментировал с кодом, и заметил, что очень сильно напрягает например RichTextBox - если выводить в него строки, то файл xml на 900 строк открывается минут 6.
Если убрать вывод в RichTextBox, то чтение файла занимает 1,2 секунды.

Вот что там в MS4D напортачили с кодом, что она на вполне современных ПК ползает как черепаха, я не знаю. Да и плевать, таким Запорожцем я пользоваться НЕ БУДУ.
Вот я о чем. Ну и извините рисовать мнемосхему внутри каличного окошка мне тоже не интересно. Да много что мне в ней неинтересно, так как подходы школоты.

мой комп (ноут) AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 32,0 ГБ (доступно: 31,3 ГБ)
на котором запущено два экземпляра RapidScada и все программы работают вполне себе адекватно по скорости.
Но только не MS4D, которая просто "залипает" :)

capzap
10.08.2024, 11:49
Ну и извините рисовать мнемосхему внутри каличного окошка мне тоже не интересно. Да много что мне в ней неинтересно, так как подходы школоты.


интересно что означает это слово, если мастерскада4д ни чем не отличается от других 77948, на скрине внизу координаты мышки, она была в углу окна и если смотреть по ползункам то еще был запас, наверное как обычно начитался других и давай фейки метать

melky
10.08.2024, 11:59
Угу, убрав все окна, к которым нужен доступ. А открыть саму мнемосхему в новом окне и кинуть на другой монитор? Где?
Или так и ползать между, уменьшая или отключая как бы нужное?

Vetal10
10.08.2024, 13:07
... открыть саму мнемосхему в новом окне и кинуть на другой монитор? Где?

Помедленнее, я записываю ...
С этого момента прошу, поподробнее ... Как это сделать?
С наскоку у меня не получилось.
Если это возможно, значит любое окно можно открыть в новом окне ?
У меня есть второй монитор.
Да я ради этого куплю ещё 2 монитора.

capzap
10.08.2024, 13:18
Сделать не авто закрытие, а плавающее и перенести на другой монитор, да так же как и в тиа портале ни чем не отличается

melky
10.08.2024, 13:29
capzap, вот, отсюда поподробнее тоже, как вытащить только окно мнемосхемы на второй монитор, а остальные окна оставить на первом. Пошагово плиз. А то может все есть, но мы не умеем, спасибо справке.

Маленькое но, если используем ноут и монитор, могут быть разные разрешения, и там программу кажется нельзя нормально растянуть на 2-а монитора. По крайней мере вид будет так себе.
Если речь идёт об открепление окон внутри основного окна приложения.
То есть нужны два одинаковых монитора для этого.

Vetal10
10.08.2024, 13:40
Сделать не авто закрытие, а плавающее и перенести на другой монитор, да так же как и в тиа портале ни чем не отличается
Так мы переносим все плавающие области, а мнемосхема остаётся на месте! Классная идея! Даже не догадывался, что так можно. СПАСИБО !!!
Ну или оболочку с мнемкой перенести, а плавающие оставить на месте.

Я когда увидел, что появились "плавающие области" меня ещё смутная мысль посетила, что это пригодится.
Но до конца мысль не сформировалась. А потом забыл, что оно есть.