Просмотр полной версии : MasterSCADA4D + Ethernet + произвольный 16-тиричный код (HEX)
Здравствуйте!
Надо передать из MasterSCADA4D произвольный 16-тиричный код (HEX), например: 02 05 12 C6 A8 56 28 42 15 22 A5 ...
по адресу 192.168.1.1 в порт 5025, т.е. 192.168.1.1:5025 и получить ответ 16-тиричный код (HEX).
Чем и как это возможно реализовать?
Как правильно записывать 16-тиричные числа в переменные (Начальное значение) в MasterSCADA4D (Word, String, Real)?
Перепробовал много всего. И ФБ и ST и Протоколы. Ничего не получается. Везде упирается в ModBus.
А мне надо произвольный код (HEX) отправить и произвольный код (HEX) принять. Здесь нет никаких команд чтения записи, адресов, регистров чтения/записи и т.п.
Помогите пожалуйста решить эту задачу.
Универсал MasterOPC с языком программирования С или LUA
В вашем случае наверное по другому никак.
ну это если упираться в MasterScada
Сразу не понял ответа. Вернее не осознал. А теперь вопрос. А если не упираться в MasterScada, тогда как?
Vetal10 Scada систем, которые позволяют писать свой код опроса много на рынке. На вскидку RapidScada (C#), IntraScada (JavaScript), OpenScada и много наверное других.
Юрий Горелый2
16.06.2022, 13:30
Сразу не понял ответа. Вернее не осознал. А теперь вопрос. А если не упираться в MasterScada, тогда как?
вообще любым языком программирования, который такое позволяет. большинство, с подключенными библиатеками могут такое.
Один вопрос остался открытым: Как правильно записывать 16-тиричные числа в переменные (Начальное значение) в MasterSCADA4D String чтоб послать их в COM порт
02 05 12 C6 A8 56 28 42 15 22 A5
или
$02 $05 $12 $C6 $A8 $56 $28 $42 $15 $22 $A5
или
#02 #05 #12 #C6 #A8 #56 #28 #42 #15 #22 #A5
или ещё как-то ?
в C# при создании массива байт для Hex пишите {0x02, 0x05, 0x12} и так далее, если именно в 16-м делаете
Если на ST там кажется синтаксис другой будет для обозначения hex - вроде так #16 в ST
Спасибо за ответ. Нигде в помощи не могу найти. Неужели в такой крутой СКАДА не придумали, чтобы просто указать в переменой что она HEX ?
Перед каждой цифрой писать 16# - это же маразм!
Но у меня всё равно не получается передать данные в COM. Ни в каком формате.
Поставил в дереве "Универсальный протокол COM порта", в этой же ветке сделал Программу ФБД и в ней ФБ "COMPort". Номера портов одинаковые, как в помощи указано.
Отправляю в порт "16#1016#4016#0116#4116#16". Пробелы нужны или нет?
Порт молчит.
C#, к сожалению, не знаю. Не смог разобраться с библиотеками, а спросить не у кого.
К сожалению по ST не подскажу. Посмотрите в темах по ПЛК CodeSys 2 или 3 работу с произвольными протоколами. Там как раз синтаксис ST будет, есть куда подсмотреть.
Наверное пробелы или даже запятые но явно какой-то разделитель нужен
Порт ожил получает посылку, но видимо из-за неправильного формата посылки не отвечает.
Почитал про CodeSys, там пишут и 0х23 и 16#23.
так и не ясно как правильно.
Что у вас за устройство? 10 40 01 41 16 - куда посылаете ?
Да купил сдуру счётчик воды "Пульсар" с протоколом M-BUS. Попутался, не знал, что M-BUS и MOD-BUS - это разные вещи. Купил преобразователь в Китае RS-485 <-> M-BUS.
С родной программой с сайта Пульсар счётчик отлично работает через этот преобразователь. Но мне надо подружить его со СКАДА. Мне надо с него всего два параметра: общий объём и текущий объём, т.е.сколько через него проходит в ланный момент. Посылаемые коды HEX известны, родная программа их показывает. Посылаю эти коды через программу терминал - всё работает.
Как со СКАДА послать эту же посылку?
На преобразователе есть светодиоды - приём / отправка.
Приём светится, т.е. СКАДА порт открывает, посылку посылает. Ответа нет из-за того, что я не знаю как правильно указать в Message ФБ "COMPort" HEX формат.
Порт ожил получает посылку, но видимо из-за неправильного формата посылки не отвечает.
Почитал про CodeSys, там пишут и 0х23 и 16#23.
так и не ясно как правильно.
у Вас же направление было правильное в начале, пока не послушали своего собеседника, который в этом не разбирается 77723 лучше тупую машину спрашивайте пользы будет больше
Это я видел. Интересует HEX формат.
Отправил $10 $40 $01 $41 $16 (пробелы нужны?)
и $10$40$01$41$16
В ответ тишина.
Это я видел. Интересует HEX формат.
Отправил $10 $40 $01 $41 $16 (пробелы нужны?)
В ответ тишина.
Вы должны строку заполнить символами, а не в строку записать символы, тем более пробелы. Самое простое в КДС это создать массив байт с Вашими HEX значениями и полтом через указатель POINTER TO STRING присвоить свой массив в строку, как это делается в МС я не знаю, возможно сразу в порт можно отправить массив байт
Vetal10 вы можете свой счетчик дать в доступ? я реализовывал протокол M-Bus на RapidScada, правда только один режим телеграмм, других приборов не попадалось. Хотелось бы Пульсаровский опросить, насколько они там честны с протоколом :)
capzap в счетчики можно и байтами посылать, а не строками, там с самим протоколом нюансов выше крыши... до хрена битов разбирать при получении ответа телеграммы.
Vetal10 вы его купили для себя лично? и почему выбор пал на MasterScada ?
C MasterSCADA 4D я работаю давно, потому что легко организовать управление через интернет. Возможностей у ней предостаточно.
Дать доступ могу. Но мне не нужен протокол M-BUS как таковой. Я писал, у меня есть две команды в HEX. Их надо послать в порт и получить ответ Как разобрать ответ по байтам я знаю. Не проблема.
Например, узнать общий объём:
11 57 35 85 01 0E 80 00 00 00 01 00 3D 6E
Причём, 11 57 35 85 - это адрес прибора (серийный номер).
Ответ сегодня:
11 57 35 85 01 0E 00 00 00 00 01 00 22 AE
Где опять же 11 57 35 85 - это адрес прибора.
Объём = 0 куб.м. Пока не пускал воду через него.
Скорее всего четыре пары нулей - это и есть объём.
Так же будет и с текущим объёмом. Всего две команды надо послать.
Остальное не интересует. Протокол-то M-BUS, но идёт он через преобразователь RS-485. Ну и как протокол он мне не нужен. У этого счётчика куча параметров, но мне они не интересны.
Делаю я так. На объекте ставлю комп-р со СКАДА и дома в браузере вижу всё, что написал в СКАДА. Есть всё управление которое мне надо. А если нужны какие-то другие параметры счётчика, то я могу соединиться с комп-ом по удалёнке, запустить родную прог-у Пульсар и всё увидеть. Но ещё раз говорю, мне это не интересно. Итак, есть комп, который обеспечивает связь по интернет через браузер, а если чего-то не хватает - то удалёнка. По удалёнке работаю я,когда мне надо подрепетировать что-то в СКАДА, через браузер - заказчик.
Очень удобно. Не надо тащиться на объект за 100 км.
11 57 35 85 01 0E 00 00 00 00 01 00 22 AE - ой подозреваю это не только то, что вы ждете :)
Вывод от программы Пульсар точно такой же? Это больше похоже на ответ инициализации прибора на линии, чем на ответ телеграммы.
там должно быть 68 длина длина 68 тело ответа КС 16
Вот электрический счетчик с таким протоколом
Отправка (9): 68 03 03 68 53 01 B1 05 16
Приём (4/4): 68 90 90 68
Приём (146/146): 08 01 72 78 56 34 12 FF FF 01 02 55 00 00 00 0B FD 47 37 31 02 0B FD 47 00 00 00 0B FD 47 00 00 00 0B FD 47 00 00 00 0B FD 47 00 00 00 0B FD 47 00 00 00 0B FD 59 00 00 00 0B FD 59 00 00 00 0B FD 59 00 00 00 0B FD 59 00 00 00 0B 2A 00 00 00 0B 2A 00 00 00 0B 2A 00 00 00 0B 2A 00 00 00 0B FD 3A 00 00 00 0B FD 3A 00 00 00 0B FD 3A 00 00 00 0B FD 3A 00 00 00 0A FD 3A 00 10 0A FD 3A 00 10 0A FD 3A 00 00 0A FD 3A 00 00 0A FD 3A 02 50 40 16
OK
Отправка (5): 10 7B 01 7C 16
Приём (4/4): 68 5D 5D 68
Приём (95/95): 08 01 72 78 56 34 12 FF FF 01 02 55 00 00 00 0C 04 82 22 71 00 0C 04 82 22 71 00 0C 04 00 00 00 00 0C 04 00 00 00 00 0C 04 00 00 00 00 0C 04 00 00 00 00 0C FD 3A 77 29 08 00 0C FD 3A 66 27 08 00 0C FD 3A 11 02 00 00 0C FD 3A 00 00 00 00 0C FD 3A 00 00 00 00 0C FD 3A 00 00 00 00 51 16
OK
Правда я его прямиком прошу, без инициализации на линии.
Отправка (5): 10 40 FD 3D 16
Вот команда инициализации. Кстати у вас там 41 вместо FX - не помню что это, вообще поле адреса вроде.
У меня команда инициализации 10 40 01 41 16
Ну вообще прог-а Пульсар посылает три разные команды, на разные Пульсары.
Мой на эту даёт ответ E5
И как я понял, в моём случае эта команда вообще не нужна. Без неё всё работает нормально.
Это 10 40 01 41 16 так, но как их послать из СКАДА?
E5 это подтверждающий ответ прибора, что он принял команду. Вы по адресу посылаете команду. Если FD кажется это широковещательная.
Да, если подавать команды запросов можно и не посылать, у меня тоже счетчик отвечает без инициализации если по адресу запрашивать.
M-Bus приборы должны работать как по Адресу (однобайтовый) так и по ID, что обычно серийный номер.
Ну с MasterScada не подскажу, не пользуюсь. Должны же у них примеры быть, если вы делаете на ST, то посмотрите примеры для 3-й версии, не думаю, что там что-то поменялось, ST он вроде и в Африке такой
Ну причём тут ST ?
77732
В СКАДУ что писать ?
Vetal10 я боюсь вам придется работать через скрипты, а не через окошки.
Можете скинуть лог Пульсаровской программы на ваш счетчик?
вместо string там можно выбрать массив байт? потому что я не представляю как буквами ввести DLE, SYN и другие спецсимволы ASCii
Не знаю что такое лог Пульсаровской программы.
Нет никаких DLE, SYN и другие спецсимволы ASCii.
77736
Запросил только один параметр (остальные галочки снял)
Программа выдала запрос - ответ разным цветом.
Всё просто.
Мне надо просто в СКАДА написать эти цифры и кинуть в порт.
Через терминал COM порта посылаю эти же цифры и получаю тот же ответ. Надо чтоб это сделала СКАДА.
Не знаю что такое лог Пульсаровской программы.
Нет никаких DLE, SYN и другие спецсимволы ASCii..
Ну как же, справа после посылок байт, стоят строки, где точки это не читаемые символы, можете проверить и символы и hex коды https://www.industrialnets.ru/files/misc/ascii.pdf
Vetal10 я вас поздравляю, у вас счетчик с протоколом Пульсар скорее всего, о каком MBus речь то была?. Можете его идентификатор точный прислать?
Голову тут морочите блин. Держите... Если прям надо описание протокола, тоже найду. А то версионность там у них отличается по докам...
Ну я же точки в СКАДА не напишу. А цифры HEX могу. Меня интересует какой префикс цифрам написать, чтоб СКАДА поняла что это HEX и отправила этот HEX в порт.
Я купил счётчик у Пульсар. Всё что есть на сайте у них я перелопатил. Все протоколы видел. Не нужны они мне.
А разве M-BAS ы бывают разные? Мне не нужен M-BAS. Я хочу спросить у знающих людей, как мне в СКАДА написать чтоб счётчик распознал команду 10 40 01 41 16
И всё!
Посылая эту команду через терминал - получаю ответ. Надо чтоб это сделала СКАДА.
77739
10 40 01 41 16
0x10 0x40 0x01 0x41 0x16
16#1016#4016#0116#4116#16
16#10 16#40 16#01 16#41 16#16
$10 $40 $01 $41 $16
$10$40$01$41$16
#10#40#01#41#16
Ни одну из этих он не воспринимает. Строка STRING
Если стринг, то скорее всего вы посылаете или ОНО посылает ascii коды введенных вами символом в данном поле. Если есть логи в мс4д или если стать на линию, вы увидите что-то типа 30 31 31 36 на отправку ваших 01 16 в байтах хекс скорее всего.
На последнем вашем скрине из TestAll их чистый протоко Пульсар. Ни о каком MBus там речи и нет, и документашка это подтверждает.
Что документация (справка) мс4д говорит по вашему вопросу как отсылать?
Если возможна отправка только строкой, то надо посмотреть как экранируются символы меньше какого-то, тут точно не подскажу.
А другие делаете так, вам нужен байт 35 hex, смотрите по таблице что там за буква, вот W вроде и ее вместо hex 35 втыкаете в свою строку.
В общем привет геморрой :)
Ой, соврал, 35 это 5 , W на байт раньше
COMPortByte у вас такая штука должна быть
Вот я и спрашиваю, чем заэкранировать символы чтобы в STRING они стали HEX
Возможно ничем, просто может быть не предусмотрено. Поищите другой метод, который я выше указал. Это из справки мс4д, там подаётся массив байт
Справку всю перечитал. Непонятно. Буду писать в INSAT. Раз уж есть ФБ "COMPort" то должен быть механизм отправки HEX.
Фб COMPortByte
Вариант &H10
И так
&H10 &H40 &H01 &H41 &H16
И так
&H10&H40&H01&H41&H16
не работает.
Написал в INSAT, ответят - отпишусь.
Vetal10 тогда еще раз внимательнее прочтите - используйте FB COMPortByte вместо COMPort
По справке для отправки массива байт используется ДРУГОЙ FB
https://support.mps-soft.ru/Help-web/index.html?comportbyte.html
Дошёл до маразма. Сделал 2 ФБ. ФБ"COMPortByte" вообще ничего не посылает в порт. Такое ощущение, что он не работает.
77777
Дошёл до маразма. Сделал 2 ФБ. ФБ"COMPortByte" вообще ничего не посылает в порт. Такое ощущение, что он не работает.
77777
маразм то в чем, два раза открываете один и тот же порт?
и почему в первом случае(COMPortByte ) в синем окне порт 1 а во втором 5
Реально работающий порт 5. Но в комп-е есть и 1. Меняю местами порты. ФБ"COMPortByte" не работает.
Картинку я прислал, чтоб было видно, что сделано всё одинаково для обоих. Один работает, другой нет.
тогда почему для первого случая send привязан к пятому порту
Это просто название параметра. Назвать его можно как угодно.
77778
Там по справке ComPortByte должен быть привязан к протоколу, ну по идее сперва надо сам порт как-то открыть, а уже потом что-то в него посылать.
Смотрите разницу в настройках, где-то наверное есть отличия, раз один посылает, а другой нет.
Протокол - в смысле какой-то узел должен быть создан, а не висящий в воздухе fb.
В теме про MS, ещё одна из причин не выбирать, если вроде таких тривиальных вещей не сделано удобно для понимания, при этом справка практически ни о чем...
Та уже всю голову сломал. Не вижу разницы.
77780
Это просто название параметра. Назвать его можно как угодно.
77778
пришлите одну картинку с одним блоком COMPortByte на рабочий порт, выход State всегда ноль или не работает потому что ни чего не шлет, тогда вход Count почему не пять?
Протокол - в смысле какой-то узел должен быть создан, а не висящий в воздухе fb.
Не висит в воздухе
77781
пришлите одну картинку с одним блоком COMPortByte на рабочий порт, выход State всегда ноль или не работает потому что ни чего не шлет, тогда вход Count почему не пять?
Так пойдёт ? SEND отключил у работающего.
77782
--------------
77783
Так пойдёт ? SEND отключил у работающего.
77782
--------------
77783
ну Count то по прежнему ноль
Count INT Задается количество байт, которое необходимо передать.
А если переменное количество, то сколько надо туда написать?
Я это поле вообще не трогал.
Передаю 5 байт.
Написал 5 - работает!
Осталось понять в каком формате писать HEX
А если переменное количество, то сколько надо туда написать?
Я это поле вообще не трогал.
ну начните хотя бы с той посылки которую отправляете, получается или нет. Если знаете какую команду посылаете, значит известна и её длинна
ну начните хотя бы с той посылки которую отправляете, получается или нет. Если знаете какую команду посылаете, значит известна и её длинна
Передаю 5 байт.
Написал 5 - работает!
Осталось понять в каком формате писать HEX
Передаю 5 байт.
Написал 5 - работает!
Осталось понять в каком формате писать HEX
HEX или DEC это только представление для человека, для машины это значение байта всё равно в единичках и ноликах
Посылку формирую через ST
MESSAGE_IN_1 := '$10$40$01$41$16'; // передаваемое сообщение
MESSAGE_OUT := STRING_TO_BYTE_ARRAY(IN:= MESSAGE_IN_1, ENCODING:= );
Получаю отправляемое сообщение
77785
Добил я его. Заработало!
77796
Видимо нельзя на "Универсальный протокол COM порта" вешать два ФБ "ComPort".
Итак, в ST формирую посылку из "$10$40$01$41$16" (всё-таки "$" !!!), получаю массив (ну или вижу что получаю) "[16, 64, 1, 65, 22]" - это отправляется в Com и приходит правильный ответ в десятеричном формате. СКАДА без спроса всё преобразует в DEC.
Пришёл ответ "229" в DEC - это мои долгожданные "E5" на команду HEX "10 40 01 41 16".
Посмотрите как формировать массив сразу байтами, на кой строки то применять?
Только правильность синтаксиса в ST соблюсти
В С# было бы
byte[] mass = new byte[] {0x10, 0x40, , , , 0x16};
Вместо 0x10 можно написать десятичным 16 и так далее.
А вы делаете двойную работу, в строку, потом будете из строки, в то время как протоколы байтовые если можно так выразиться
Ну Scada и не обязана работать как TestAll или другие программы, но конечно хорошим тоном считается показывать обмен именно в hex для com порта, либо строкой, если протокол символьный
Но мне во всем этом непонятно одно.
Физически прибор у вас один или два?
Если один, он у них что, мульти протокольный? Одновременно можно использовать или MBus или протокол Пульсар?
Потому что все это 10 40 и т.д. с возвратом E5 это от MBus протокола, а то, что вы показали на скрине TestAll это классический Пульсар протокол.
Но мне во всем этом непонятно одно.
Физически прибор у вас один или два?
Если один, он у них что, мульти протокольный? Одновременно можно использовать или MBus или протокол Пульсар?
Потому что все это 10 40 и т.д. с возвратом E5 это от MBus протокола, а то, что вы показали на скрине TestAll это классический Пульсар протокол.
Прибор один. Протокол возможно, что Пульсаровский но работает эта дрянь через преобразователь RS485 <-> M-BAS. Скажу более, я перепробовал несколько программ M-BAS и ридер и OPC сервер. На все запросы M-BAS даёт ответ. Что они там намутили я не знаю.
Если хочешь могу дать доступ к нему. Единственно что мне надо - подготовить для этого ноут, т.е не прям сразу, а ближе к вечеру.
Дал команду которая мне нужна: "$11$57$35$85$01$0E$80$00$00$00$01$00$3D$6E"
Получаю: Ошибка: Внутренняя ошибка : [string "chunk"]:148: unfinished string near <eof>
HEX или DEC это только представление для человека, для машины это значение байта всё равно в единичках и ноликах
Вот, ну АБСОЛЮТНО ВСЕ !!!, твои советы дельные! Но ты их говоришь, как намёками. Рассказывай народу подробнее. Сказал "А", говори "Б". Я голову сломал, чтоб воплотить твой совет.
А всё именно так как ты сказал.
Вместо: MESSAGE_IN_1 := '$11$57$35$85$01$0E$80$00$00$00$01$00$3D$6E';
MESSAGE_OUT := STRING_TO_BYTE_ARRAY(IN:= MESSAGE_IN_1, ENCODING:= );
Сделал:
VAR_OUTPUT
MESSAGE_OUT: ARRAY OF BYTE := 17,87,53,133,1,14,128,0,0,0,1,0,61,110;
END_VAR
И получил в ответ: [17, 87, 53, 133, 1, 14, 0, 0, 0, 0, 1, 0, 34, 174]
Что и ожидал: 11 57 35 85 01 0E 00 00 00 00 01 00 22 AE.
И совсем забыл. СПАСИБО !!!
P.S. У ФБ "ComPort" на входе "Message" установлено "String". И хоть что ты ему пиши: и 16#11 и $11 и &H10 он все "$", "&H", "#", пробел, запятую ВОСПРИНИМАЕТ КАК "String". и соответственно перекодирует КАЖДЫЙ символ.
Если сможете сделать по аналогии с преобразователем Ethernet-RS485 то давайте.
Если это через TeamViewer или аналогичное, мне придется RapidScada ставить со всеми требуемыми компонентами. Там решайте сами. Если что на почту черканете или в личку.
11 57 35 85 - адрес прибора в BCD формате - типа как слышится, так в байты и заносится :) там никогда не будет букв
01 - команда чтения параметров, в зависимости от приборов может быть int16, float и даже double
0E - маска запрашиваемых параметров - всего 3 параметра и судя по ответу это или int16 или беззнаковый dint16
00 00 00 00 01 00 - собственно эти 3 параметра согласно маске
22 AE - контрольная сумма Modbus
А есть логи от программ MBus read и других в текстовом виде? интересно посмотреть.
Вообще не вопрос. Я потому и хочу ноут., ставь на него чё хошь. Если тебе интересно, балуйся. Не жалко. Я его включу и думаю, мне он неделю не понадобится, так что в любое удобное время занимайся. Я с вопросом разобрался, оставшиеся "штрихи" не к спеху. Давай связь держать через телегу.
Vetal10 напишите на почту телегу. Не вопрос. я сейчас как раз в отпуске, смогу посмотреть как там и чего. Мне такой Пульсар не попадался еще.
P.S. У ФБ "ComPort" на входе "Message" установлено "String". И хоть что ты ему пиши: и 16#11 и $11 и &H10 он все "$", "&H", "#", пробел, запятую ВОСПРИНИМАЕТ КАК "String". и соответственно перекодирует КАЖДЫЙ символ.
То что я видел на картинке, это кодировка юникод, а мы речь вели про ascii, это в два раза меньше байт и возможно их смена местами, скорее всего отсюда и не работало
Пульсар переделал MOD-BUS. Это остался MOD-BUS, но адрес устройства стал не 2 а 4 байта. И всё. В остальном это MOD-BUS. Из-за этих 4-х байтов СКАДА и не работает с ним.
Я запросил в INSAT протокол для Пульсара с RS-485. Они содрали с меня 20 000 р. и попросили доступ. Две недели ковырялись, Сделали. И сделали его же в мультипротокол OPC сервер. Теперь при обновлении СКАДА с меня просят за обновление 10 000 и 20 000 за обновление протокола. Вот такой бизнес.
То что я видел на картинке, это кодировка юникод, а мы речь вели про ascii, это в два раза меньше байт и возможно их смена местами, скорее всего отсюда и не работало
Ну да, по умолчанию у него UTF8
Имей ввиду: M-BUS - это интерфейс. А протокол по нему "гуляет" всё-таки пульсаровский.
У меня были Пусары с RS-482. Но та же фигня - интерфейс RS-482 и протокол пульсаровский.
Сейчас вся разница в том, что стоит преобразователь RS-482 <-> M-BUS - где RS-482 чисто для связи с компом. А дальше M-BUS с пульсаровским протоколом. Хотя и на M-BUS вьюер, ридер он отвечает.
Ну, Бизнес от Master Scada вполне понятный. Хотя на Пульсар я делал драйвер беЗплатно :) не знаю честно, за что там деньги брать, там протокол примитивный в некотором роде.
MBus это и интерфейс и протокол тоже. Что гонять по интерфейсу не имеет значения в принципе. У нас есть производители теплостетчиков, у которых протокол MBus, а интерфейс RS485, не помню производителя, они в двух модификациях вроде выпускают.
+ MBus (интерфейса), что он одновременно и питает интерфейс.
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot