Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Посылку формирую через ST
MESSAGE_IN_1 := '$10$40$01$41$16'; // передаваемое сообщение
MESSAGE_OUT := STRING_TO_BYTE_ARRAY(IN:= MESSAGE_IN_1, ENCODING:= );
Получаю отправляемое сообщение
1.png
Переменная ST
1.png
Кусок программы ST
1.png
Добил я его. Заработало!
1.png
Видимо нельзя на "Универсальный протокол COM порта" вешать два ФБ "ComPort".
Итак, в ST формирую посылку из "$10$40$01$41$16" (всё-таки "$" !!!), получаю массив (ну или вижу что получаю) "[16, 64, 1, 65, 22]" - это отправляется в Com и приходит правильный ответ в десятеричном формате. СКАДА без спроса всё преобразует в DEC.
Пришёл ответ "229" в DEC - это мои долгожданные "E5" на команду HEX "10 40 01 41 16".
Последний раз редактировалось Vetal10; 03.08.2024 в 03:04.
Посмотрите как формировать массив сразу байтами, на кой строки то применять?
Только правильность синтаксиса в ST соблюсти
В С# было бы
byte[] mass = new byte[] {0x10, 0x40, , , , 0x16};
Вместо 0x10 можно написать десятичным 16 и так далее.
А вы делаете двойную работу, в строку, потом будете из строки, в то время как протоколы байтовые если можно так выразиться
Ну Scada и не обязана работать как TestAll или другие программы, но конечно хорошим тоном считается показывать обмен именно в hex для com порта, либо строкой, если протокол символьный
Последний раз редактировалось melky; 03.08.2024 в 06:49.
Но мне во всем этом непонятно одно.
Физически прибор у вас один или два?
Если один, он у них что, мульти протокольный? Одновременно можно использовать или 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>
Последний раз редактировалось Vetal10; 03.08.2024 в 11:10.
Вот, ну АБСОЛЮТНО ВСЕ !!!, твои советы дельные! Но ты их говоришь, как намёками. Рассказывай народу подробнее. Сказал "А", говори "Б". Я голову сломал, чтоб воплотить твой совет.
А всё именно так как ты сказал.
Вместо: 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". и соответственно перекодирует КАЖДЫЙ символ.
Последний раз редактировалось Vetal10; 03.08.2024 в 13:06.