7 / 7 / 1
Регистрация: 07.05.2015
Сообщений: 45
1

Переписать на C# код Python Read Holding Registers протокола Modbus

13.05.2016, 09:31. Показов 1161. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброе время суток!
Есть функция написанная на питоне, нужно этот функционал реализовать на C#. Возникли трудности понимания синтаксиса питона. Может кто то объяснит принцип работы этой функции словами или кодом на C#.

Функция должна реализовать Read Holding Registers протокола Modbus.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    def read_03(self, addr, num):
        func, numbytes = 3, num * 2
        sbuff = array('c', struct.pack('BB', self.__slave, func))
        sbuff.extend(struct.pack('>HH', addr, num))
        sbuff.extend(struct.pack('<H', self.__get_CRC16(sbuff)))
        try:
            rbuff = array('c', self.__port.transceive(sbuff.tostring()))
        except IOError:
            raise ModbusDevice.error('There is no responce from device!')
 
        if len(rbuff) != numbytes + 5:
            raise ModbusDevice.error('Bad responce from device!')
        if ord(rbuff[0]) != self.__slave:
            raise ModbusDevice.error('Bad responce from device!')
        if ord(rbuff[1]) != func:
            if ord(rbuff[1]) & 127 == func:
                raise ModbusDevice.error('Exception responce from device, code %d' % (ord(rbuff[2]),))
            else:
                raise ModbusDevice.error('Bad responce from device!')
        if ord(rbuff[2]) != numbytes:
            raise ModbusDevice.error('Bad responce from device!')
        crc1, crc2 = self.__get_CRC16(rbuff[:-2]), struct.unpack('<H', rbuff[-2:].tostring())[0]
        if crc1 != crc2:
            raise ModbusDevice.error('Wrong CRC sum from device!')
        return struct.unpack('>' + 'H' * num, rbuff[3:-2])
Добавлено через 16 часов 47 минут
Использовал библиотеки NModbus4, EasyModbus, но устройство не отвечает. А этот скрипт на питоне работает, устройство возвращает данные.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.05.2016, 09:31
Ответы с готовыми решениями:

LabVIEW+Modbus. Не могу Write Single Holding Register
Здравствуйте! Проблема с типами данных. Необходимо записать значение в формате ftoot32, стандартная...

Реализация протокола ModBus RTU на Qt
Всем доброго время суток. Недавно начал осваивать программирование на Qt. Стоит тривиальная задача...

Реализация протокола ModBus на DE1-SoC
Работаю над реализацией протокола ModBus RTU на DE1-SoC. Собрала в Quartus II процессор Nios II с...

Реализация протокола ModBus на DE1-SoC
Работаю над реализацией протокола ModBus RTU на DE1-SoC. Собрала в Quartus II процессор Nios II с...

2
Эксперт Python
4630 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,131
Записей в блоге: 6
13.05.2016, 13:56 2
Ещё есть хитрый финт ушами - заюзать IronPython. Там array и struct тоже есть.
1
7 / 7 / 1
Регистрация: 07.05.2015
Сообщений: 45
14.05.2016, 14:09  [ТС] 3
Проблема решена. В принципе работы скрипта разобрался и все получилось реализовать с помощью NModbus4. Моя ошибка оказалась в адресации регистров.
0
14.05.2016, 14:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.05.2016, 14:09
Помогаю со студенческими работами здесь

Реализация протокола MODBUS TCP в Simatic Step 7
Нужно написать функциональный блок, в котором будет формироваться заголовок нужного формата и при...

Программа для протокола MODBUS. С чего начать
Всех с новым годом. Решил не терять на праздниках времени и наклепать одну программку для протокола...

Реализовать функцию протокола MODBUS для чтения памяти МК
Реализовать функцию протокола MODBUS для чтения памяти МК. Номер функции 0х03. Диапазон адресов...

Переписать код с Python
Здравствуйте, могли бы вы переделать данный код с python на паскаль? from random import randint...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru