Стартовая страница › Форумы › Взаимодействие с устройствами › Modbus › KpModbus
- В этой теме 7 ответов, 2 участника, последнее обновление 8 лет, 1 месяц назад сделано Mikhail.
-
АвторСообщения
-
11.02.2016 в 11:41 #1511SDevelУчастник
Добрый день!
Поскольку для команд не предусмотрен выбор типа, то лучше сделать так :// формирование команды Modbus BitConverter.GetBytes((float)cmd.CmdVal)
т.к. в PLC число с плав. точкой обычно 4 байта (2 регистра Modbus)
11.02.2016 в 12:01 #1512MikhailМодераторДобрый день! Уточните, пожалуйста, где именно Вы предлагаете так сделать.
11.02.2016 в 12:38 #1514SDevelУчастникМетод void SendCmd(Command cmd)
// формирование команды Modbus if (modbusCmd.Multiple) { modbusCmd.Data = cmd.CmdTypeID == BaseValues.CmdTypes.Standard ? BitConverter.GetBytes(cmd.CmdVal) : cmd.CmdData; }
cmd.CmdVal имеет тип double и BitConverter.GetBytes возвращает массив из 8 байт, а в PLC тип REAL 4 байта. Приведение типа к float как я писал ранее оказалось не достаточно, требуется еще развернуть массив байт в обратную сторону(BigEndian — LittleEndian) в результате получаем Float Inverse
Поэтому лучшим решением будет добавить в свойствах команды параметр «Порядок байт» аналогично элементам. При этом будет возможность отправлять стандартной командой
и double и float в нужной для конкретного PLC последовательности.11.02.2016 в 13:24 #1515MikhailМодераторСпасибо за предложение, особенно касательно порядка байт в командах. Правда пока не могу сказать, когда это будет реализовано.
Реальное количество передаваемых байт для множественной команды задаётся полем Количество элементов, а вот порядок байт пока нельзя задать в Коммуникаторе.
Так что Вы можете использовать стандартную команду, только нужно написать формулу в базе конфигурации, которая будет формировать нужный double.
15.02.2016 в 13:45 #1526SDevelУчастникПодработал код kpModbus под свои нужды.
1. Убрал поле порядок байт у сигналов, т.к в пределах одного устройства он един и нет смысла для каждого сигнала его прописывать.
2. Порядок байт задается в пользовательских параметрах. Если задан «ByteOrder» то этот порядок един для всех Modbus устройств на линии связи. Но можно указать порядок байт индивидуально через «ByteOrder.<НомерКП>» такой параметр приоритетный.
При отсутствии параметра используется дефолтный «1032».3. Порядок байт используется и для команд и для сигналов.
15.02.2016 в 17:59 #1528MikhailМодераторВы не выкладывали fork на github или аналогичный ресурс?
16.02.2016 в 07:38 #1532SDevelУчастникПока нет. Если надо могу выслать вам по емайл.
16.02.2016 в 12:31 #1535MikhailМодераторПо е-маил не совсем удобно, тем более, что новая версия драйвера может быть полезной сообществу, и было бы замечательно, если она будет легко доступной на привычных ресурсах в веб.
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.