штаны превращаются .. превращаются в элегантные шорты .. (PS надо денег - готоф за денег запилить супер пупер бибку для modbus rtu slave для codesys 2) ну или есть бесплатный вариант позвонить и поинтересоваться в поддержке ОВЕН (это же их железо и они профит с него получают)
Dmitriy Murashov
SPS Software Engineer Automation Engineering RUS
"Работать ради денег - это нормально.." - (С) Машков где-то на подработках.
Народ столько энергии проявляет чтоб взломать, найти..
Хотя вопрос в 1 дне, 5 строках для выделения фрейма, и 2-4х десятках строк для его разбора. Мд-я-я-я..
Если фрейм нашли - это как он не существует ? Вы их сами придумываете или из порта берете ?
А ответственность - на разработчике алгоритма, который учитывает протокол.
А зачем она вообще нужна почему не воспользоваться встроенными в Codesys2 средствами для настройки Modbus RTU Slave?
Dmitriy Murashov
SPS Software Engineer Automation Engineering RUS
Он может находицо внутри другого фрейма например в ответе другого слейва, вы же не знаете где в потоке данных из порта конец одного пакета и начало другого. регистры одного из слейвов например могут совпасть адрес команда црц итд. да это маловероятно но возможно. и отличить в потоке регистры это другого слейва или запрос мастера на запись (например) никак нельзя. сумбурно мож и непонятно но как то так.
В бибке для мастера такого быть не может потому что в линии никаких данных нет пакеты для мастера появляюцо после его запроса и он их принимает сначала и целиком. на один запрос - один ответ. и различать где начало пакета не надо. он и так сначала и он один. дальше да црц и прочие дела.
(нормальный) слейв принимает все пакеты и начинает их "разбирать" только после того как пакет закончицо то есть возникнет пауза в передаче. после этого он уже проверяет црц и прочее. только после паузы. ели есть возможность каким то образом различать пакеты по паузе - да, работать будет. но как это сделать?... ) так же возможно написать слейв рту для какой то конфигурации где известно заранее что будут спрашивать итд. но это не будет универсальной бибкой.
в modbus ascii есть спецсимволы начала и конца пакетов поэтому слейв реализуем уже на существующей бибке.
Вроде как в ответе слейва тоже должен фигурировать адрес устройства, нет ? И в конце CRC.
Так же как и в запросе от мастера фигурирует номер от какого слейва ждем ответ. Если запрос не нам (другому слейву) то нафига его вообще разбирать ?
слейв знает только свой адрес и ничего о других слейвах. и начало пакета предпологаецо искать по его адресу (или по чьему?). у вас нет пакетов у вас есть поток данных из порта. ответы других слейвов вам тоже придецо разбирать как то. как? только искать в этой мешанине запрос мастера и он может найтись хотя его и не было. )
Последний раз редактировалось lazy; 09.11.2015 в 17:23.
lazy, там из разбирательства только адрес. Определили, что не наш и очистили буфер.