Это просто название параметра. Назвать его можно как угодно.
Вложение 77778
Это просто название параметра. Назвать его можно как угодно.
Вложение 77778
Там по справке ComPortByte должен быть привязан к протоколу, ну по идее сперва надо сам порт как-то открыть, а уже потом что-то в него посылать.
Смотрите разницу в настройках, где-то наверное есть отличия, раз один посылает, а другой нет.
Протокол - в смысле какой-то узел должен быть создан, а не висящий в воздухе fb.
В теме про MS, ещё одна из причин не выбирать, если вроде таких тривиальных вещей не сделано удобно для понимания, при этом справка практически ни о чем...
Та уже всю голову сломал. Не вижу разницы.
Вложение 77780
Не висит в воздухе
Вложение 77781
Так пойдёт ? SEND отключил у работающего.
Вложение 77782
--------------
Вложение 77783
А если переменное количество, то сколько надо туда написать?
Я это поле вообще не трогал.
Передаю 5 байт.
Написал 5 - работает!
Осталось понять в каком формате писать HEX
Посылку формирую через ST
MESSAGE_IN_1 := '$10$40$01$41$16'; // передаваемое сообщение
MESSAGE_OUT := STRING_TO_BYTE_ARRAY(IN:= MESSAGE_IN_1, ENCODING:= );
Получаю отправляемое сообщение
Вложение 77785
Переменная ST
Вложение 77786
Кусок программы ST
Вложение 77787
Добил я его. Заработало!
Вложение 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 это классический Пульсар протокол.
Прибор один. Протокол возможно, что Пульсаровский но работает эта дрянь через преобразователь 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>
Вот, ну АБСОЛЮТНО ВСЕ !!!, твои советы дельные! Но ты их говоришь, как намёками. Рассказывай народу подробнее. Сказал "А", говори "Б". Я голову сломал, чтоб воплотить твой совет.
А всё именно так как ты сказал.
Вместо: 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 напишите на почту телегу. Не вопрос. я сейчас как раз в отпуске, смогу посмотреть как там и чего. Мне такой Пульсар не попадался еще.
Пульсар переделал MOD-BUS. Это остался MOD-BUS, но адрес устройства стал не 2 а 4 байта. И всё. В остальном это MOD-BUS. Из-за этих 4-х байтов СКАДА и не работает с ним.
Я запросил в INSAT протокол для Пульсара с RS-485. Они содрали с меня 20 000 р. и попросили доступ. Две недели ковырялись, Сделали. И сделали его же в мультипротокол OPC сервер. Теперь при обновлении СКАДА с меня просят за обновление 10 000 и 20 000 за обновление протокола. Вот такой бизнес.
Имей ввиду: M-BUS - это интерфейс. А протокол по нему "гуляет" всё-таки пульсаровский.
У меня были Пусары с RS-482. Но та же фигня - интерфейс RS-482 и протокол пульсаровский.
Сейчас вся разница в том, что стоит преобразователь RS-482 <-> M-BUS - где RS-482 чисто для связи с компом. А дальше M-BUS с пульсаровским протоколом. Хотя и на M-BUS вьюер, ридер он отвечает.
Ну, Бизнес от Master Scada вполне понятный. Хотя на Пульсар я делал драйвер беЗплатно :) не знаю честно, за что там деньги брать, там протокол примитивный в некотором роде.
MBus это и интерфейс и протокол тоже. Что гонять по интерфейсу не имеет значения в принципе. У нас есть производители теплостетчиков, у которых протокол MBus, а интерфейс RS485, не помню производителя, они в двух модификациях вроде выпускают.
+ MBus (интерфейса), что он одновременно и питает интерфейс.