Просмотр полной версии : Функции String
В стандарте МЭК есть много полезных функций String.
В КДС есть нечто такое?
Например если мне нужно перебрать строку и удалить лишние символы.
блин Вы что справочную систему КДС не можете открыть и посмотреть на работу со строками?
Справочная система КДС не полная.
Например отсутствует описание следующих функций:
1. DWORD_TO_REAL()
2. REAL_TO_STRING()
3. STRING_TO_REAL()
Это я еще не сильно копался в справочной системе.
Поиск в Справке плохо организован.
"REAL_TO_STRING" через поиск не ищется.
А STRING_TO_REAL, DWORD_TO_REAL всё равно нет.
и работа со строками есть
Спасибо то что надо.
Пожалуйста, подскажи что я неправильно делаю.
Не работает у меня "STRING_TO_REAL"
77867
77868
А что хрень в V_STRING?
тип/значение. Массив какой-то
Просто переменная STRING. В ней значение объёма куб/м, надеюсь FLOAT.
Я в переменную STRING неправильно дал начальное значение?
Просто переменная STRING
имеет значение типа '3.4' а не тот непонятный набор символов
kondor3000
07.08.2024, 13:07
Очень похоже, что переменная разложена на 4 байта, (234, 89, 6, 61), а число REAL там 0.03280059
А чтобы конвертировать в REAL, переменная String должна быть '0.03280059' или '0.0328'
Вам нужен конвертер во float из массива байт.
Не знаю, как там в ST на MS4D но если вы можете сделать функцию на c# то примерно так.
public single ConverToFloat(byte[] mass)
{
reuturn BitConverter.ToSingle(mass, 0);
}
з.ы. за точность синтаксиса не ручаюсь, пишу с телефона на пляже :)
И посто вызываете эту функцию, подсовывая ей байтовый массив. В Пульсоровском протоколе байты идут от младшего с старшему, вроде переставлять не надо.
Как правильно заметили, там ieee754
Наверняка в ST есть так же готовые функции преобразования из байт во float
Считав несколько переменных одним запросом вы можете добавить доп переменную в функции для индекса и изменить там на
BitConverter.ToSingle (mass, index);
И указывать индекс массива каждой требуемой переменной
Реал состоит из четырех байт. Если это продолжение темы про хекс, то это не тупо байты в строку перевести, а собрать согласно ieee 754
ЗЫ Вангую что там на приборе сейчас 0.0328
Да, это из той же оперы, так сказать продолжение. Как отправить разобрался. Теперь надо понять что делать с ответом.
Число там = 0.0328006. ЗНАЧИТ Я ПРАВИЛЬНЫЕ 4 БАЙТА "ВЫРВАЛ".
Расскажите подробнее, что значит собрать согласно ieee 754 ?
Из ответа прибора я выделю эти 4 байта в стринг. А дальше как собрать?
capzap не просто вангует, он прав.
Протокол отдает массив запрашиваемых переменных в виде массива 4-х байтнвх значений .
Единственное если она float, ,то это ieee754, в наборе ещё можно оказаться так же uint32 так как тоже имеет 4 байта и это допустимо для одного запроса
Блин, неужели в 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, получается не правильно.
https://masteropc.insat.ru/blog/fb-skript-c-i-ego-ispolzovanie-v-masterscada/
Если в мс4д под понятием Вещественный всегда double, то просто потом привести к нему.
У вас есть средства, а вы е... с кучей преобразований из строк в байты из байтов в Ворды и т.д. Зачем?
https://masteropc.insat.ru/blog/fb-skript-c-i-ego-ispolzovanie-v-masterscada/
У вас есть средства, а вы е... с кучей преобразований из строк в байты из байтов в Ворды и т.д. Зачем?
Я C# не знаю. Не смог понять когда и какие библиотеки подключать. И главное: где их брать и зачем это на простейшем алгоритме? Ни в одном языке такой дури нет.
Неужели свой ФБ на C# будет проще, чем несколько готовых конвертаций на ST ?
Блин, неужели в ST нет аналога в MS4D?
И неужели там же нет возможности сделать FBD на C# и применять его в ST ?
C# не знаю. Но любой ФБ конвертации можно запихнуть в ST.
Неужели свой ФБ на C# будет проще, чем несколько готовых конвертаций на ST ?
b AT %MB0 : ARRAY[1..4] OF BYTE := 234,89,6,61;
x AT %MB0 : REAL;
собсно код:
; (*это код конвертации*)
--
а причем тут был string, непонятно
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 не знаю.
Так я про то и написал, зачем выкручивать руки несчастным 4-м байтам, если можно один FB сделать и потом его использовать в том же ST
У вас одна строка BitConverter.ToSingle(массив байт любой длины, индек первого байта переменной float в байтов преставлении)
Если вернуть надо обязательно в double то перед просто добавить (double)BitConverter.ToSingle( и так далее)
Если вы получаете ответ от Пульсара с единственной переменной то индекс первого
К ответу выше, вам даже не придется выдергивать байты из массива байт ответа.
Второй параметр в функции BiConverter.ToSingle(массив байт, индекс) указывает на первый байт ответа, где лежит float
Если в ответе 0,1,2,3 индексы это адрес прибора
4 индекс это код команды
5 индекс это длина пакета
То с 6-го индекса начинаются переменные
Если запрашиваете больше одной, то следующий float начинается с 10-го индекса массива ответа
Следующий с 14-го и так далее
Как их (все 4) превратить в REAL ?.
дык я ж написал выше. Их не нужно "превращать". На них нужно правильно посмотреть
Я для вас даже цветом выделил сейчас
На C# будет одна рабочая строчка, остальные это оформительство C# функции для МастерСкада по их правилам, чтобы MS4 поняла, что куда будет подаваться и откуда будет выводиться.
У функции должно быть два входа.
1. Подаваемый массив байт, полученный от прибора
2. Номер индекса - указатель на первый байт из 4-х для конвертации во float
И выход - собственно значение, которое вы получите.
Если кто знает ms пусть оформит. Я беспонятия, как там писать и оформлять функции, ибо МастерСкада не использую. И лет сто использовать не буду :)
Когда у пЕсателей на первом месте интерфейс, а потом логика и удобство работы, так оно и будет.
дык я ж написал выше. Их не нужно "превращать". На них нужно правильно посмотреть
Я для вас даже цветом выделил сейчас
Не вкурил. Это на каком языке?
kondor3000
07.08.2024, 20:29
Не вкурил. Это на каком языке?
Это надо делать в ПЛК, а не с Cкаде, присвоить по адресу в слейве ПЛК (прямая адресация, типа %QW0 или физический адрес 0)
массив из 4 байт, так как REAL, это и есть переменная из 4 байт подряд (или 2 WORD).
А в Скаде уже получите готовый REAL, по адресу 0 в который положили массив байт.
Там не ПЛК, там готовый прибор, который в пакете данных отдает 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.
тьфу в очередной раз в это поделие. :)
я конечно тоже не ангел и делаю платные реализации, только не за такие суммы.
Вот много всяко разных советов. Но давайте поступим проще. Никакого ПЛК нет. Он не нужен. C# - не нужен.
Есть 4 байта вырванных из ответа прибора в виде STRING. Могу из них сделать ARRAY OF BYTE.
Есть язык ST. Простым языком скажите, что надо сделать с этими четырьмя байтами чтоб из всех четырёх получился один REAL?
Сложить? Умножить? Разделить? Поменять местами?
Вот тут "capzap" ванговал - он 100 пудов прав! Но как он это сделал? Он же ни C# не использовал, ни ФБ. Просто в калькуляторе сосчитал и получил правильный ответ.
Что с чем надо сделать чтоб был REAL ? Могу по битам разложить.
4 байта: 234,89,6,61. Само число известно: 0.0328006.
Вот много всяко разных советов. Но давайте поступим проще. Никакого ПЛК нет. Он не нужен. 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
Да говорят же вам, ДЕЛАТЬ - ничего не надо:
Вам надо разобраться, как сделать это в 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 сообщении, только вы даже не смотрели его.
Можно из 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
И функция сдвига стандартная...
Смотрел. На каком это языке? Что такое "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, который сразу возвращает массив байт, поэтому все и спрашивают зачем строки
Понятно. Как потом из двух WORD собрать REAL ?
МихаилГл
08.08.2024, 08:17
А чем ТС не устраивает объединение:
77897
У Вас же получалось с 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
В ответном массиве куча байт, а мне нужно только 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
Не сложно. Каждый из 4-х элементов массива присвоить переменной?
Ну это уже детали. Сейчас опробую алгоритм, который Вы прислали.
Головняк, конечно, ещё тот, с этими преобразованиями. Знал, что не будет легко, но чтоб так ...
прочтите документацию, например функции сдвига
Вам вообще то предлагали код формирования вещественного числа, да это сложно, но простой вариант не получится
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.
Я, правда, думал, что будет проще.
Не сложно. Каждый из 4-х элементов массива присвоить переменной?
Ну это уже детали. Сейчас опробую алгоритм, который Вы прислали.
Головняк, конечно, ещё тот, с этими преобразованиями. Знал, что не будет легко, но чтоб так ...
Посмотрел и не нашел в MS4 никаких инструментов работы с памятью напрямую.
Наверное остаётся только вариант формирования числа как у capzap
Посмотрел и не нашел в MS4 никаких инструментов работы с памятью напрямую.
Наверное остаётся только вариант формирования числа как у capzap
Из ARRAY загнать в STRING, обрезать и справа и слева и снова в ARRAY загнать. Это можно.
А можно из ARRAY использовать только нужные элементы. Это уже на любителя.
Из ARRAY загнать в STRING,.
Если в array первый 0 - как этот будет выглядеть?
В ответном массиве..
структуре? //твоя скада - твоя изучать
Вот ответ
11 57 35 85 01 0E EA 59 06 3D 01 00 B9 2D
{word,dword,нужный_реал;...} //как в скаде с выравниванием - твоя изучать
Если в array первый 0 - как этот будет выглядеть?
Честно говоря, не знаю как правильно. Способов наверняка много. Мне понравился этот.
77902
77903
https://support.mps-soft.ru/Help-web/index.html?dword_to.html
Вроде как есть готовые функции конвертации.
Опять же, работая с массивами байт и вообще с байтами - зачем строки в принципе? по два лишних преобразования всегда - зачем?
Получил ответ от 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. Выбирай какой хочешь. ТРИ секунды подцепил, проверил. Отправил на объект и НЕТ ГОЛОВНЯКА !!!
А Пульсар теперь будет валяться, пока не впарю кому-нить.
И, что прикольно, я им отписал, что мне такой товар не подходит. Возьмите назад. В ответ - тишина !!!
Пульсар тут ни при чем. И кстати их протокол вполне нормальный.
Это вы ещё Логику не подключали к MS4D :)
з.ы. вообще некоторые протоколы приборов древнее MasterScada и других Scada систем.
И производители не обязаны вам ничем, там все решает железо и код, который способен крутиться на этом железе.
Пульсар открытый протокол, пилите, Шура, пилите :)
Был задан вопрос:
Здравствуйте!
У меня есть число: 0.0328006.
Вы им указывали что работаете с пульсаром, возможно они бы удивились что не обращаете внимание на эту ссылку https://support.mps-soft.ru/Help-web/rekomendacii_po_nastroike_protokola_pulsar.html, мне кажется есть легкий вариант, вероятно платный
Вы им указывали что работаете с пульсаром, возможно они бы удивились что не обращаете внимание на эту ссылку 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. Спешил, поэтому предпочёл заплатить.
Пульсар тут ни при чем. И кстати их протокол вполне нормальный...
Да, нормальный он для пульсаровских программ. Но он больше нигде не работает беЗплатно.
А за деньги кого хочешь можно заставить работать.Особенно за большие деньги. Вот только заказчик не хочет это понимать и не платит за блаж.
МихаилГл
09.08.2024, 16:59
Да, нормальный он для пульсаровских программ. Но он больше нигде не работает беЗплатно.
А за деньги кого хочешь можно заставить работать.Особенно за большие деньги. Вот только заказчик не хочет это понимать и не платит за блаж.
Ставьте ПЛК210 и им форматируйте любой протокол в модбас тср. У вас что, приборы напрямую в скаду заведены? Никакого управления нет?
Ставьте ПЛК210 ...
У данного прибора управления нет. Это ультразвуковой счётчик воды. У него модифицированный MOD-BUS. Первые 4, а не 2 байта - адрес прибора.
МихаилГл
09.08.2024, 17:09
У данного прибора управления нет. Это ультразвуковой счётчик воды. У него модифицированный MOD-BUS. Первые 4, а не 2 байта - адрес прибора.
При чем тут модбас или не модбас, Плк210 позволяет любой модбас подобный протокол использовать и прочие как по 2х проводной линии rs485 так и по тср. По тср считываете данные порта и расшифровываете.
А во вторых, я спросил почему сразу в скаду? Больше никаких устройств кроме пульсаров нет?
.. а модифицированный mod-bus это модифицированный modbus, т.к. там 1 байт на адрес прибора?
Есть проекты с управлением. Использую ПР-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
Скада мне позволяет организовать диспетчеризацию через любой браузер по интернет. ПЛК также делает?
МихаилГл
09.08.2024, 17:20
Скада мне позволяет организовать диспетчеризацию через любой браузер по интернет. ПЛК также делает?
Этот да. Позволяет.
kondor3000
09.08.2024, 17:20
У ПЛК210 возможностей больше, чем у MasterSCADA 4D ?
Конечно больше, Мастерскада 4D это глючный, баговый и кривой продукт. На ПЛК210 можно было всё это сделать без напрягов, вместе с WEB интерфейсом.
Конечно больше, Мастерскада 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/макет
Чем тут гордиться то? Пяток параметров на экран вывели, и десяток булевых. Это даже для панели оператора раз плюнуть, даже с десятком окон в придачу.
А во вторых, я спросил почему сразу в скаду? Больше никаких устройств кроме пульсаров нет?
Я же ответил. На тех объектах где надо управление использую ПР-205. Но счётчик зачем туда? Сразу в скаду.
Это даже для панели оператора раз плюнуть, даже с десятком окон в придачу.
ДЩа не панель нужна, а доступ в браузер через интернет. У меня на объектах даже мониторов нет.
МихаилГл
09.08.2024, 19:26
ДЩа не панель нужна, а доступ в браузер через интернет. У меня на объектах даже мониторов нет.
Вы ссылку то смотрели? Это типа и есть браузер плк. Веб визуализация. Нет у плк200 и плк210 монитора. Просто этот пример только в разделе спк приведен. Вбиваете нужный адрес в любом браузере и так же смотрите. Ваш пример кстати даже не масштабируется, как на смартфоне увидеть всю картинку? Танцевать с бубном? Переключать на не мобильное отображение?
PS Версия для ПК помогла...
МихаилГл
09.08.2024, 19:33
Я же ответил. На тех объектах где надо управление использую ПР-205. Но счётчик зачем туда? Сразу в скаду.
Ну видел я ваш ответ. Он был после заданного мной вопроса. Зачем вы еще раз это упомянули? Или вы по новой начали ветку читать? Внимательнее надо быть.
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 для участия в рынке, но сделал это криво.
... но сделал это криво.
А это как и всегда!
Если тебе приходится постоянно "пилить" протоколы и ты к этому привык - то это судьба.
У меня другой подход. Если я купил СКАДА - то она должна работать с любым протоколом. Она для этого сделана. Разве не так? Если не так, то тогда зачем у неё вообще есть протоколы?
Я умею программировать на всех языках, кроме "С...", да и на "С..." тоже умею, но с его библиотеками не дружу.
И я считаю, что если надо в СКАДА программировать - то это должна быть какая-то нетривиальная задача. Ну есть у тебя проблема с ФБ или другая - реши её программированием. СКАДА это позволяет.
Но чтобы "пилить" протокол ... !!! Это уже слишком !!!
Проверил MBus
10 40 01 41 16 - это так называемый NKE запрос с ответом E5
Если его посылать каждую сессию, то можно запрашивать по два запроса каждый раз.
У меня реализовано, что NKE посылается вообще один раз и потом нет, Происходит некорректные запросы из-за реализации у Пульсара. Честно не знаю, насколько это допустимо вообще протоколом, но такую штуку могу реализовать у себя быстро.
Только одно но, драйвер протокола MBus у меня платный на экземпляр сервера, правда ценник далек от ценников MasterScada :)
Вот только попытки его реализовать разовыми запросами в самой MasterScada думаю мало к чему приведут, он куда сложнее в разборе, чем протокол Пульсар.
Vetal10 я не могу сказать что реализация 100% кривая, но ни у одного прибора пока еще не видел, чтобы одними и теми же запросами можно было прочитать разные телеграммы.
Ну еще не проверял на предмет работы протокола по id прибора. MBus протокол позволяет опрашивать приборы как по Адресу, который задается в для однобайтовой переменной, так и по серийному номеру прибора.
Запроса длинных телеграмм я не увидел. Вообще как бы хороший тон, что определенный запрос приводит к определенному ответу, а тут последовательность запросов из 5-ти приводит к разным ответам. Такое вижу впервые.
Разве не так? не так. Scada в мире много и разных, у всех подходы разные. Например есть как Simple Scada - работает ТОЛЬКО через OPC DA серверы не имея поддержки протоколов собственными средствами, следовательно только Windows.
А так как я предпочитаю Sсada, которые моЖут :) работать под Linux, то мне она не подходит.
И так как я не привык ждать когда Scada отдуплится, после нескольких нажатий мышки, мне не подходит MasterScada.
И так далее - на каждый цвет свои фломастеры.
... не привык ждать когда Scada отдуплится, после нескольких нажатий мышки, мне не подходит MasterScada.
И так далее - на каждый цвет свои фломастеры.
В MasterScada 4D ты сам задаёшь время когда ей отдуплиться. По умолчанию у неё цикл 1000 миллисекунд, то бишь, 1 секунда. Можешь поставить ей хоть 10 наносекунд, но твой комп сможет за это время сосчитать всё то, что ты сам понаписал? Чисто, по быстродействию?
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, которая просто "залипает" :)
Ну и извините рисовать мнемосхему внутри каличного окошка мне тоже не интересно. Да много что мне в ней неинтересно, так как подходы школоты.
интересно что означает это слово, если мастерскада4д ни чем не отличается от других 77948, на скрине внизу координаты мышки, она была в углу окна и если смотреть по ползункам то еще был запас, наверное как обычно начитался других и давай фейки метать
Угу, убрав все окна, к которым нужен доступ. А открыть саму мнемосхему в новом окне и кинуть на другой монитор? Где?
Или так и ползать между, уменьшая или отключая как бы нужное?
... открыть саму мнемосхему в новом окне и кинуть на другой монитор? Где?
Помедленнее, я записываю ...
С этого момента прошу, поподробнее ... Как это сделать?
С наскоку у меня не получилось.
Если это возможно, значит любое окно можно открыть в новом окне ?
У меня есть второй монитор.
Да я ради этого куплю ещё 2 монитора.
Сделать не авто закрытие, а плавающее и перенести на другой монитор, да так же как и в тиа портале ни чем не отличается
capzap, вот, отсюда поподробнее тоже, как вытащить только окно мнемосхемы на второй монитор, а остальные окна оставить на первом. Пошагово плиз. А то может все есть, но мы не умеем, спасибо справке.
Маленькое но, если используем ноут и монитор, могут быть разные разрешения, и там программу кажется нельзя нормально растянуть на 2-а монитора. По крайней мере вид будет так себе.
Если речь идёт об открепление окон внутри основного окна приложения.
То есть нужны два одинаковых монитора для этого.
Сделать не авто закрытие, а плавающее и перенести на другой монитор, да так же как и в тиа портале ни чем не отличается
Так мы переносим все плавающие области, а мнемосхема остаётся на месте! Классная идея! Даже не догадывался, что так можно. СПАСИБО !!!
Ну или оболочку с мнемкой перенести, а плавающие оставить на месте.
Я когда увидел, что появились "плавающие области" меня ещё смутная мысль посетила, что это пригодится.
Но до конца мысль не сформировалась. А потом забыл, что оно есть.
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot