Форум программистов, компьютерный форум, киберфорум
КИП, датчики
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
14 / 14 / 1
Регистрация: 02.03.2013
Сообщений: 192
1

Работа с контроллером производительности нории КПН-4М по Modbus RTU over RS-485

03.04.2014, 13:57. Показов 2519. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте товарищи.
Попалось под руку, это чудо российской мысли, и понадобилось снять с него данные на ЭВМ.
Вроде подключил, но данные не читаются
В комплекте с устройством, нет ничего, даже тестовой утилиты.
Возможно кто работал с ним, и есть пример запроса к устройству?
Сам девайс - вот :
http://zernopribor.ru/Passpostr/pass_KPN-4M.pdf
Написано - использует ModBus RTU.
Пытаюсь :
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 SerialPort port = new SerialPort("COM2", 57600, Parity.None, 8, StopBits.One);
            port.Open();
 
            // формирование пакета
            byte[] Query = new byte[6];
            Query[0] = 0x01; //адрес железки
            Query[1] = 0x04; //чтение                                                                         
            Query[2] = 0x00; // вход                                                       
            Query[3] = 0x00; // адрес
            Query[4] = (byte)(CRC16(Query, 6) >> 8); 
            Query[5] = (byte)(CRC16(Query, 6) & 0x00FF); 
 
            port.Write(Query, 0, 6);
            for (int i = 0; i < 20; i++)
                Console.Write(" " + port.ReadByte().ToString("X"));
            Console.Read();
Однако в ответе - 6 байт, причем неважно что отправлять, хоть любой мусор, приходят одни и те же 6 байт.
От беда то какая.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2014, 13:57
Ответы с готовыми решениями:

Интеграция с контроллером по ModBus RTU
Здравствуйте. В щите используется контроллер, который опрашивает модули, датчики и т.п. по modbus...

Java и ModBus RTU + RS-485
Всем привет. Возникла следующая проблема. Мне необходимо подключиться к контроллеру шагового...

Modbus RTU через интерфейс rs-485
Всем привет! Разбираюсь с Modbus RTU. Просто хочу быть уверен, что двигаюсь в правильном...

Octagon 5066 с системой DOS 6.22 485 modbus rtu driver
Здравствуйте. Помогите примерно набросать план действий. Имеется старый мини компьютер Octagon...

14
10234 / 6612 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
03.04.2014, 15:24 2
Во-первых, CRC16 бывают с разным полиномом, какой у вас, мне не виден. Для классического Modbus (потому как каждый производитель воротит, что хочет) образующий полином при подсчете CRC = A001h.
пример
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
void init_crc16_tab( void )
{
 
    unsigned int i, j;
    unsigned short crc, c;
 
    for ( i=0; i < 256; ++i )
    {
 
        crc = 0;
        c = i;
 
        for ( j = 0; j < 8; ++j )
        {
 
            if ( ( crc ^ c ) & 0x0001 )
            {
                crc = ( crc >> 1 ) ^ P_16;
            }
            else
            {
                crc =   crc >> 1;
            }
 
            c = c >> 1;
        }
 
        crc_tab16[ i ] = crc;
    }
    
}  /* init_crc16_tab */


Во-вторых, сам запрос:
0x01 - адрес железки
0x04 - функция чтения
0x00 - регистр текущая производительность, старший байт
0x00 - регистр текущая производительность, младший байт
0х40 - lo(CRC) - младший байт
0х19 - hi(CRC) - старший байт
Соответственно, дефайнами получение старшего-младшего для упрощения:
C
1
2
#define LOW(int_type) (char) int_type
#define HI(int_type) (char) (int_type >>8)
Или так:
C
1
2
byte low = (byte) (crc);
byte high = (byte) (crc >> 8);
И проверьте сниффером, что на самом деле вы отсылаете.

p.s.: ну и на будущее - вы после отсылки запроса, сразу читаете данные, это мягко говоря оптимистично. Данные следует читать или с задержкой, что есть нехорошо, ибо может привести к пропуску данных после чтения или с ожиданием в потоке. Сей поток приема данных у данной обертки SerialPort имеется и если вы ее не использовали, то это говорит о невнимательном ознакомлении с возможностями обертки (класса, компонента).
2
14 / 14 / 1
Регистрация: 02.03.2013
Сообщений: 192
03.04.2014, 16:05  [ТС] 3
Цитата Сообщение от raxp Посмотреть сообщение
Во-первых, CRC16 бывают с разным полиномом, какой у вас, мне не виден
Использовал 0xFFFF - спасибо, попробую.
Цитата Сообщение от raxp Посмотреть сообщение
И проверьте сниффером, что на самом деле вы отсылаете.
Данные в порядке, сниферром сразу же и смотрю.
Цитата Сообщение от raxp Посмотреть сообщение
ну и на будущее - вы после отсылки запроса, сразу читаете данные, это мягко говоря оптимистично
Там таймаут достаточный.
С serialPort знаком немного, но ReadByte() меня никогда ранее не подводил
0
10234 / 6612 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
03.04.2014, 16:10 4
Использовал 0xFFFF
это начальное заполнение, покажите полином или код.

Данные в порядке, сниферром сразу же и смотрю.
мне не видно.

Там таймаут достаточный.
этого может быть недостаточно, особенно когда массив данных может быть большим.
0
14 / 14 / 1
Регистрация: 02.03.2013
Сообщений: 192
03.04.2014, 16:22  [ТС] 5
Цитата Сообщение от raxp Посмотреть сообщение
этого может быть недостаточно, особенно когда массив данных может быть большим.
Там в буквальном смысле два байта переслать ( + modbus составляющие пакета)
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
static readonly ushort[] crc16Table = new ushort[]
        {
        #region 
        0x0000, 0xC1C0, 0x81C1, 0x4001, 0x01C3, 0xC003, 0x8002, 0x41C2,
        0x01C6, 0xC006, 0x8007, 0x41C7, 0x0005, 0xC1C5, 0x81C4, 0x4004,
        0x01CC, 0xC00C, 0x800D, 0x41CD, 0x000F, 0xC1CF, 0x81CE, 0x400E,
        0x000A, 0xC1CA, 0x81CB, 0x400B, 0x01C9, 0xC009, 0x8008, 0x41C8,
        0x01D8, 0xC018, 0x8019, 0x41D9, 0x001B, 0xC1DB, 0x81DA, 0x401A,
        0x001E, 0xC1DE, 0x81DF, 0x401F, 0x01DD, 0xC01D, 0x801C, 0x41DC,
        0x0014, 0xC1D4, 0x81D5, 0x4015, 0x01D7, 0xC017, 0x8016, 0x41D6,
        0x01D2, 0xC012, 0x8013, 0x41D3, 0x0011, 0xC1D1, 0x81D0, 0x4010,
        0x01F0, 0xC030, 0x8031, 0x41F1, 0x0033, 0xC1F3, 0x81F2, 0x4032,
        0x0036, 0xC1F6, 0x81F7, 0x4037, 0x01F5, 0xC035, 0x8034, 0x41F4,
        0x003C, 0xC1FC, 0x81FD, 0x403D, 0x01FF, 0xC03F, 0x803E, 0x41FE,
        0x01FA, 0xC03A, 0x803B, 0x41FB, 0x0039, 0xC1F9, 0x81F8, 0x4038,
        0x0028, 0xC1E8, 0x81E9, 0x4029, 0x01EB, 0xC02B, 0x802A, 0x41EA,
        0x01EE, 0xC02E, 0x802F, 0x41EF, 0x002D, 0xC1ED, 0x81EC, 0x402C,
        0x01E4, 0xC024, 0x8025, 0x41E5, 0x0027, 0xC1E7, 0x81E6, 0x4026,
        0x0022, 0xC1E2, 0x81E3, 0x4023, 0x01E1, 0xC021, 0x8020, 0x41E0,
        0x01A0, 0xC060, 0x8061, 0x41A1, 0x0063, 0xC1A3, 0x81A2, 0x4062,
        0x0066, 0xC1A6, 0x81A7, 0x4067, 0x01A5, 0xC065, 0x8064, 0x41A4,
        0x006C, 0xC1AC, 0x81AD, 0x406D, 0x01AF, 0xC06F, 0x806E, 0x41AE,
        0x01AA, 0xC06A, 0x806B, 0x41AB, 0x0069, 0xC1A9, 0x81A8, 0x4068,
        0x0078, 0xC1B8, 0x81B9, 0x4079, 0x01BB, 0xC07B, 0x807A, 0x41BA,
        0x01BE, 0xC07E, 0x807F, 0x41BF, 0x007D, 0xC1BD, 0x81BC, 0x407C,
        0x01B4, 0xC074, 0x8075, 0x41B5, 0x0077, 0xC1B7, 0x81B6, 0x4076,
        0x0072, 0xC1B2, 0x81B3, 0x4073, 0x01B1, 0xC071, 0x8070, 0x41B0,
        0x0050, 0xC190, 0x8191, 0x4051, 0x0193, 0xC053, 0x8052, 0x4192,
        0x0196, 0xC056, 0x8057, 0x4197, 0x0055, 0xC195, 0x8194, 0x4054,
        0x019C, 0xC05C, 0x805D, 0x419D, 0x005F, 0xC19F, 0x819E, 0x405E,
        0x005A, 0xC19A, 0x819B, 0x405B, 0x0199, 0xC059, 0x8058, 0x4198,
        0x0188, 0xC048, 0x8049, 0x4189, 0x004B, 0xC18B, 0x818A, 0x404A,
        0x004E, 0xC18E, 0x818F, 0x404F, 0x018D, 0xC04D, 0x804C, 0x418C,
        0x0044, 0xC184, 0x8185, 0x4045, 0x0187, 0xC047, 0x8046, 0x4186,
        0x0182, 0xC042, 0x8043, 0x4183, 0x0041, 0xC181, 0x8180, 0x4040 
        };
        #endregion
 
        //------------Прямой расчет CRC-16 по таблице (не в МК ж пишем, почему бы и нет))
        static public ushort CRC16(byte[] bytes, int len)
        {
            ushort crc = 0xFFFF;
            for (var i = 0; i < len; i++)
                crc = (ushort)((crc << 8) ^ crc16Table[(crc >> 8) ^ bytes[i]]);
            return crc;
        }
Добавлено через 4 минуты
В большинстве случаев, что бы я ни слал в rs232, оттуда приходит :
C#
1
7F DF FF 1F FF 0
Никак на пакет modbus не похоже, первый байт вроде как адрес устройства должен идти.
А тут абракадабра.
Буду копать, мб подключени корявое
0
10234 / 6612 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
03.04.2014, 16:43 6
Приложите дамп запроса и ответа из Portmon в режиме отображения HEX, экспортированный в txt-файл в свой пост. Поглядим, что вы на самом деле шлете и что приходит, а также все остальное. Выделять, вырезать по своему усмотрению не нужно.

p.s.: среди прочего, не перепутали-ли вы местами дифсигналы A/B при подключении 485-го?
1
14 / 14 / 1
Регистрация: 02.03.2013
Сообщений: 192
03.04.2014, 17:03  [ТС] 7
Цитата Сообщение от raxp Посмотреть сообщение
p.s.: среди прочего, не перепутали-ли вы местами дифсигналы A/B при подключении 485-го?
Да кажись вроде нет. А к А, ну а В соответственно к В.
У девайса была еще GND, но никуда подключать не стал.
P.s. мне кажется, где то я накосячил в распайке 2х концов rs232 кабеля, т.к. у хитрого преобразователя интерфейса нет клеммника, а только rs232 (на выходе).
raxp, а как ты думаешь, имеется ли некая процедура проверки корректности цепи ПК - линия - прибор, типичной для этой схемы?
Частенько приходится работать с железками имеющими RS485 (правда только учусь), и было бы классно, если был бы способ проверить цепь.
P.s. с портмона лог положу завтра, т.к. компутер уже далеко.
Спасибо за советы!
P.s. а если замкнуть на rs232 A+B (RX/TX) на штекере к ПК и попробовать прозвонить их (А и B) мультиметром около прибора?
Хотя...

Добавлено через 10 минут
P.s.s а как прикладывать файлик - не разобрался.
Вот он :
U139.LOG
Два запроса на COM2.
Смущает что никак это на сообщение об ошибке не похоже. Вообще ответ на modbus не похож, мусор какой то
0
10234 / 6612 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
03.04.2014, 17:08 8
т.к. у хитрого преобразователя интерфейса нет клеммника, а только rs232 (на выходе).
хитрые преобразователи интерфейса зовутся RS-232/RS-485 или USB/RS-485 конверторами. Они могут быть автоматическими и неавтоматическими (переключение прием/передача осуществляется с верхнего уровня DTR или RTS). Вы не указали какой у вас.

ли некая процедура проверки корректности цепи ПК - линия - прибор, типичной для этой схемы?
на линию RS-485 садится еще один конвертор и смотрится на ПК (любым монитором, в случае Modbus протокола см. Мониторы, симуляторы и эмуляторы Modbus), что в линии идет или смотреть осциллом.

P.s. а если замкнуть на rs232 A+B (RX/TX) на штекере к ПК и попробовать прозвонить их (А и B) мультиметром около прибора?
это не тупые провода, чтобы их прозванивать, там преобразователь интерфейсов, ST-485/ADM485 и прочие-прочие.

Вы можете замкнуть RX/TX (3/4) пины на RS-232 порту и послушать свое эхо в терминале на ПК. А замыкать A/B линии 485 маразм, ибо это двухпроводная диффлиния, а не RX/TX.

P.s.s а как прикладывать файлик - не разобрался.
в расширенном режиме в редакторе поста - кнопка с изображением скрепочки.

Добавлено через 3 минуты
57 0.00000380 KNP.vshost.exe IOCTL_SERIAL_SET_LINE_CONTROL MxserB00P001 SUCCESS StopBits: 1 Parity: NONE WordLength: 8
58 0.00000038 KNP.vshost.exe IOCTL_SERIAL_SET_CHAR MxserB00P001 SUCCESS EOF:1a ERR:0 BRK:0 EVT:1a XON:11 XOFF:13
59 0.00003915 KNP.vshost.exe IOCTL_SERIAL_SET_HANDFLOW MxserB00P001 SUCCESS Shake:0 Replace:0 XonLimit:1024 XoffLimit:1024
60 0.00000038 KNP.vshost.exe IOCTL_SERIAL_GET_BAUD_RATE MxserB00P001 SUCCESS
61 0.00000000 KNP.vshost.exe IOCTL_SERIAL_GET_LINE_CONTROL MxserB00P001 SUCCESS
62 0.00000000 KNP.vshost.exe IOCTL_SERIAL_GET_CHARS MxserB00P001 SUCCESS
63 0.00000000 KNP.vshost.exe IOCTL_SERIAL_GET_HANDFLOW MxserB00P001 SUCCESS
64 0.00001596 KNP.vshost.exe IOCTL_SERIAL_SET_BAUD_RATE MxserB00P001 SUCCESS Rate: 57600
65 0.00000722 KNP.vshost.exe IOCTL_SERIAL_CLR_RTS MxserB00P001 SUCCESS
66 0.00000722 KNP.vshost.exe IOCTL_SERIAL_CLR_DTR MxserB00P001 SUCCESS
67 0.00000380 KNP.vshost.exe IOCTL_SERIAL_SET_LINE_CONTROL MxserB00P001 SUCCESS StopBits: 1 Parity: NONE WordLength: 8
68 0.00000038 KNP.vshost.exe IOCTL_SERIAL_SET_CHAR MxserB00P001 SUCCESS EOF:1a ERR:0 BRK:0 EVT:1a XON:11 XOFF:13
69 0.00003725 KNP.vshost.exe IOCTL_SERIAL_SET_HANDFLOW MxserB00P001 SUCCESS Shake:0 Replace:0 XonLimit:1024 XoffLimit:1024
70 0.00000760 KNP.vshost.exe IOCTL_SERIAL_CLR_DTR MxserB00P001 SUCCESS
71 0.00000076 KNP.vshost.exe IOCTL_SERIAL_SET_TIMEOUTS MxserB00P001 SUCCESS RI:-1 RM:-1 RC:-2 WM:0 WC:0
72 0.00000532 KNP.vshost.exe IOCTL_SERIAL_SET_WAIT_MASK MxserB00P001 SUCCESS Mask: RXCHAR RXFLAG CTS DSR RLSD BRK ERR RING
73 0.00000266 KNP.vshost.exe IOCTL_SERIAL_SET_QUEUE_SIZE MxserB00P001 SUCCESS InSize: 4096 OutSize: 2048
74 0.00006196 KNP.vshost.exe IRP_MJ_WRITE MxserB00P001 SUCCESS Length 6: 01 04 00 00 0A F6
75 0.00154289 KNP.vshost.exe IOCTL_SERIAL_WAIT_ON_MASK MxserB00P001 SUCCESS
76 0.00047667 KNP.vshost.exe IRP_MJ_READ MxserB00P001 SUCCESS Length 1: 7F
77 0.00000646 KNP.vshost.exe IOCTL_SERIAL_GET_COMMSTATUS MxserB00P001 SUCCESS
78 0.00000228 KNP.vshost.exe IRP_MJ_READ MxserB00P001 SUCCESS Length 1: DF
79 0.00000152 KNP.vshost.exe IRP_MJ_READ MxserB00P001 SUCCESS Length 1: FF
80 0.00000228 KNP.vshost.exe IOCTL_SERIAL_WAIT_ON_MASK MxserB00P001 SUCCESS
81 0.00000456 KNP.vshost.exe IOCTL_SERIAL_GET_COMMSTATUS MxserB00P001 SUCCESS
82 6.68677433 KNP.vshost.exe IOCTL_SERIAL_WAIT_ON_MASK MxserB00P001 CANCELLED
83 0.00000114 KNP.vshost.exe IRP_MJ_READ MxserB00P001 SUCCESS Length 1: EB
84 0.00000152 KNP.vshost.exe IRP_MJ_READ MxserB00P001 SUCCESS Length 1: 13
85 0.00000190 KNP.vshost.exe IRP_MJ_READ MxserB00P001 SUCCESS Length 1: 00
01 04 00 00 0A F6
CRC у вас неверно формируется.
0
1978 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
06.04.2014, 12:45 9
Правильный ответ:
Цитата Сообщение от raxp Посмотреть сообщение
CRC у вас неверно формируется.
Ошибка здесь:
Цитата Сообщение от Буджака Посмотреть сообщение
Query[4] = (byte)(CRC16(Query, 6) >> 8);
* * * * * * Query[5] = (byte)(CRC16(Query, 6) & 0x00FF);
Вы в подсчет CRC закидываете в том числе и сами байты CRC, коих быть не может. Нужно использовать CRC16(Query, 4);

но смущает другое - вам контроллер "отвечает" на то, что не должен принимать, соответственно, либо на вашем RS485 наводится куча помех, либо как-то не так сделан переходник RS485 и выполнено управление направлением передачи. Попробуйте FLUSH'ить буфер RX перед передачей пакета - ведь неизвестно что было до этого на шине, и что сидит в буфере?

Цитата Сообщение от Буджака Посмотреть сообщение
Однако в ответе - 6 байт, причем неважно что отправлять, хоть любой мусор, приходят одни и те же 6 байт.
- вот это смущает. Такого быть не должно.
1
14 / 14 / 1
Регистрация: 02.03.2013
Сообщений: 192
07.04.2014, 11:17  [ТС] 10
Цитата Сообщение от Voland_ Посмотреть сообщение
Вы в подсчет CRC закидываете в том числе и сами байты CRC
Да, это я от балды посылал, чтобы проверить его реакцию
Ситуация по прежнему такая же. Сменил преобразователь интерфейса на адекватный, снял с рабочего устройства.
Скачал программу ModBus Tester. Она отсылает немного другой формат пакета - однако в ответ приходит то же самое.
Буду копать в сторону железа.
Кстати, я так и не понял - modbus tester помимо прочего запрашивает (для посылки) такое значение как "Количество", я так понимаю это кол-во "байт в ответе", или как то так. Однако в спецификации протокола ModBus я этого не заметил.
Попробую почитать еще и связаться с разработчиками.
0
1978 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
07.04.2014, 12:11 11
Цитата Сообщение от Буджака Посмотреть сообщение
однако в ответ приходит то же самое.
это самое и смущает. Очень похоже, что 485й интерфейс не работает. Проверьте наличие и/или отсутствие резисторов 120 Ом.

ЗЫ: у меня на самодельном конвертере (FT232 + AD485) резистор наоборот - рушит все сеть, пришлось оторвать, чтобы шина начала работать. Почему так - не было осцила под рукой, чтобы разобраться.
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
07.04.2014, 13:01 12
Мой CRC для ModBus
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
unsigned int crc16(unsigned char *buf, int bytenum)
{
    int i, j;
    unsigned int temp, flag;
 
    temp = 0xFFFF; /* Начальное состояние сдвигового регистра */
 
    for (i = 0; i < bytenum; i++)
    {
         temp = temp ^ buf[i];
 
         for (j = 1; j <= 8; j++)
         {
              flag = temp & 0x0001;
              temp = temp >> 1; /* Сдвиг регистра на 1 позицию */
              if (flag) temp = temp ^ 0xA001;
         }
    }
 
    return(temp);
}
Добавлено через 9 минут
Формирование пакета
C++
1
2
3
4
5
6
7
8
9
10
11
        /* Compose request */
        buf[0] = (unsigned char)adr;
        buf[1] = MB_CMD_READ_HOLDING_REGISTERS;
        buf[2] = HIGH(start);
        buf[3] = LOW(start);
        buf[4] = HIGH(nregs);
        buf[5] = LOW(nregs);
 
        crc = crc16(buf, 6);
        buf[6] = LOW(crc);
        buf[7] = HIGH(crc);
0
14 / 14 / 1
Регистрация: 02.03.2013
Сообщений: 192
08.04.2014, 12:07  [ТС] 13
Какая то бабайка живет в сети по моему.
По прежнему контроллер в ответ шлет что то несуразное.
1. Цепь RS485 прозвонил - целая
2. Шнур RS232 от ПИ-1 (преобразователя интерфейсов) до com порта прозвонил - целый.
3. Распайка rs232 от ПК до ПИ-1 вроде правильная - при вставке двух концов друг в друга - концы RX/TX/Земля совпадают.
Чудеса продолжаются - если отцепить цепь RS485 от преобразователя интерфейса - в ответ приходит та же ересь.
Я в недоумении. Пойду возьму свой преобразователь, 100% исправный
0
10234 / 6612 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
08.04.2014, 12:13 14
Бабайка должна быть исправна.
0
14 / 14 / 1
Регистрация: 02.03.2013
Сообщений: 192
08.04.2014, 14:20  [ТС] 15
Цитата Сообщение от raxp Посмотреть сообщение
Бабайка должна быть исправна.
Ура, это УГ включилось!
Как оказалось проблема крылась в двух конвертерах - "ПИ-1" и предыдущем - до него стояло чудо-юдо непонятных годов, коробка такая.
Воткнул на линию ПИ-2 (RS485 -> USB), опрос пошел, байты бегут, правильный modbus пакет прямо радует глаз.
Спасибо большое всем, кто откликнулся, отдельно raxp за каждое внимание к моей теме.

Добавлено через 5 минут
Форма пакета пошел следующий :
[байт адреса]|[байт функции]|[два байта первого регистра]|[два байта кол-во регистров]|[два байта CRC]
0
08.04.2014, 14:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.04.2014, 14:20
Помогаю со студенческими работами здесь

Работа с Modbus RTU
Есть некий модуль ввода/вывода, со своим адресом, дискретный и аналоговый сигнал поддерживает....

RS-485. Работа с Modbus протоколом...
...набивка мануал-факами. Вместо введения... В качестве протокола связи в промышленных сетях...

Работа с модулем ICP DAS I-8831 по Modbus RTU
Доброго времени суток, господа. Прошу Вас подкинуть и указать путь к заголовочным файлам на &quot;C&quot;,...

Работа по Modbus RTU с ПЛК Intellisys из своих приложений
Подскажите, плиз. Есть контроллер Intellisys с протоколом modbus rtu и девайс с modicon modbus...

Нет связи между модулем ввода (modbus rtu slave) и программой modbus poll на ноутбуке
Добрый день форумчанам. Сконфигурирован модуль modbus rtu slave в Ovation system. Опыт работы с...

Преобразование modbus rtu в modbus tcp
Суть проблемы: есть устройство, оно работает по протоколу modbus rtu, но нужно подключиться к нему...


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

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