Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/56: Рейтинг темы: голосов - 56, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 31.10.2007
Сообщений: 26

MODBUS???

12.11.2007, 09:57. Показов 10318. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте коллеги.
Подскажите пожалуйста,как реализуеться обмен по протоколу modbus через rs232? более всего интересует 6-ая функция(запись в один регистр) с чтением вроде как разобрался. кому нужно вот листинг:
C#
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#region Function 3 - Read Registers
        public bool SendFc3(byte address, ushort start, ushort registers, ref short[] values)
        {
            //Ensure port is open:
            if (sp.IsOpen)
            {
                //Clear in/out buffers:
                sp.DiscardOutBuffer();
                sp.DiscardInBuffer();
                //Function 3 request is always 8 bytes:
                byte[] message = new byte[8];
                //Function 3 response buffer:
                byte[] response = new byte[5 + 2 * registers];
                //Build outgoing modbus message:
                BuildMessage(address, (byte)3, start, registers, ref message);
                //Send modbus message to Serial Port:
                try
                {
                    sp.Write(message, 0, message.Length);
                    GetResponse(ref response);
                }
                catch (Exception err)
                {
                    modbusStatus = "Error in read event: " + err.Message;
                    return false;
                }
                //Evaluate message:
                if (CheckResponse(response))
                {
                    //Return requested register values:
                    for (int i = 0; i < (response.Length - 5) / 2; i++)
                    {
                        values[i] = response[2 * i + 3];
                        values[i] <<= 8;
                        values[i] += response[2 * i + 4];
                    }
                    modbusStatus = "Read successful";
                    return true;
                }
                else
                {
                    modbusStatus = "CRC error";
                    return false;
                }
            }
            else
            {
                modbusStatus = "Serial port not open";
                return false;
            }
 
        }
        #endregion
так как я больше инженер АСУ а не чисто программист,то каких - то умозаключений и провести аналогий я не могу пока.Это листинг для чтения...мне же нужен для записи в регист...функция 06.
Заранее спасибо за помощь.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.11.2007, 09:57
Ответы с готовыми решениями:

Modbus RTU по RS-232
Проблема такая, мы запросили у производителя РЗА программу для мониторинга состояния их устройств. Они прислали приложение к ТО со списком...

ModBus мастер, передача данных
Подскажите, как передать значение переменной из программы, написанной на c#, в значение регистра на ПЛК, пробовал сделать это через функцию...

Библиотеки для эмуляции modbus
Здравствуйте. Возникла необходимость эмулировать устройство modbus (не какое-то конкретное), которое сможет общаться по TCP/IP и RTU....

5
Администратор
 Аватар для mik-a-el
87868 / 53189 / 249
Регистрация: 10.04.2006
Сообщений: 13,765
12.11.2007, 11:18
Вот описание шестой функции:
int writeSingleRegister (
int slaveAddr,
int regAddr,
short regVal
) [inherited]


Modbus function 6 (06 hex), Preset Single Register/Write Single Register.

Writes a value into a single output register (holding register, 4:00000 reference).

Parameters:
slaveAddr Modbus address of slave device or unit identifier (Range: 0 - 255)
regAddr Register address (Range: 1 - 0x10000)
regVal Data to be sent

Returns:
FTALK_SUCCESS on success or error code. See Protocol Errors and Exceptions for a list of error codes.

Note:
Broadcast supported for serial protocols
Очевидно, нужно определить адреса slaveAddr (адрес устройства) и regAddr (адрес регистра), и данные regVal (видимо, это и есть значение регистра).

Функция BuildMessage, с помощью которой формируется сообщение, принимает всего один адрес в качестве параметра (насколько можно судить по приведенному коду). В этом случае ее придется дописать или написать новую, в зависимости от ситуации.
0
0 / 0 / 0
Регистрация: 31.10.2007
Сообщений: 26
12.11.2007, 15:36  [ТС]
Спасибо за оперативную информацию...думаю это мне поможет.
0
0 / 0 / 0
Регистрация: 31.10.2007
Сообщений: 26
12.11.2007, 15:38  [ТС]
А Вы не подскажете где можно посмотреть первоисточник...коды других функций тоже мне могут потребоваться...если понадобиться почта...то вот она kars11@inbox.ru
0
Администратор
 Аватар для mik-a-el
87868 / 53189 / 249
Регистрация: 10.04.2006
Сообщений: 13,765
12.11.2007, 15:49
Лучший ответ Сообщение было отмечено mik-a-el как решение

Решение

Основная инфа тут.
Еще инфа.
0
evgeny-86
05.03.2008, 12:21
Какое ПО необходимо,чтобы поставить его на 2 компа и передавать через RS232 по протоколу MODBUS файлы?
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.03.2008, 12:21
Помогаю со студенческими работами здесь

Переписать на C# код Python Read Holding Registers протокола Modbus
Доброе время суток! Есть функция написанная на питоне, нужно этот функционал реализовать на C#. Возникли трудности понимания синтаксиса...

Modbus
Добрый день. Помогите пожалуйста, нужно написать программу для опроса устройства по протоколу modbus rtu. С обычными функциями я...

Файл по Modbus
Всем привет, кто-нибудь сталкивался с таким, как передача файлов по протоколу связи Modbus. Нужна хоть какая нибудь информация по этому....

CRC 16 Modbus
Собственно есть алгоритм, в нём старший и младший байт поменяны местами и при вычислении CRC для двух конкретных байтов (0x1,0x7)...

Эмуляция Modbus
Здравствуйте. Есть необходимость создать эмуляцию устройства Modbus. Ну т.е. чтобы к нашему приложению можно было обратиться по этому...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru