Easyelectronics.ru

Электроника для всех
Текущее время: 20 сен 2018, 12:18

Часовой пояс: UTC + 5 часов



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: С# & Modbus
СообщениеДобавлено: 21 май 2018, 09:56 
Только пришел

Зарегистрирован: 21 май 2018, 09:22
Сообщения: 8
Нарисовалась проблемка, которую не могу решить никак. Есть программа которая по Modbus RTU должна опрашивать датчик, скорость общения 19200. Так вот, при отправке команды в сети Modbus кракозябрины, вместо данных, и ответа от прибора нет. Пишу на чистом Си и все работает, в сети нормальные символы, и ответ есть. Сеть смотрю через saleae logic. В итоге понимаю что дело в кодировке, но менял кодировки в SerialPort на разные, результат тот же. Может кто то уже так же мучался и подскажет в чем проблема. С COM портом много раз работал из дотнета, никогда проблем таких не возникало, а в чем бяда тут, не пойму никак.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С# & Modbus
СообщениеДобавлено: 21 май 2018, 10:47 
Старожил
Аватара пользователя

Зарегистрирован: 26 янв 2010, 21:48
Сообщения: 3759
Откуда: Звенигород
Скорее всего из-за того, что у C# все работает в UTF. Смотреть соответветственно в Encoding.

_________________
От Парижа до Находки с водкой лучше, чем без водки!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С# & Modbus
СообщениеДобавлено: 21 май 2018, 12:13 
Старожил

Зарегистрирован: 01 июл 2010, 15:30
Сообщения: 472
Откуда: Энгельс
Как организована работа с Modbus на C#? Свой велосипед или библиотека?
Я пользовался вот этим https://github.com/NModbus4/NModbus4 работает хорошо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С# & Modbus
СообщениеДобавлено: 21 май 2018, 13:11 
Старожил

Зарегистрирован: 16 окт 2013, 01:27
Сообщения: 602
На шарпе крос-платформенную либу серверной части писал в феврале, все работает без проблем - смотрите внимательно свои отправки возможно не указано явно што данные надо преобразовывать в нужный формат.

К примеру под виндой для Modbus ASCII отправка 16 данных в порт будут выглядеть так
Код:
port.Write(i.ToString("X"));

Т.е. нужно явно указывать что будет произведено преобразование из переменной типа INTEGER в Строковую переменную в 16 формате.

Скорее всего вы где то пропустили это.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С# & Modbus
СообщениеДобавлено: 21 май 2018, 13:14 
Заглядывает иногда

Зарегистрирован: 16 окт 2013, 20:15
Сообщения: 160
Откуда: Екатеринбург
sed_alex писал(а):
К примеру под виндой для Modbus ASCII отправка 16 данных в порт будут выглядеть так
Код:
port.Write(i.ToString("X"));

Т.е. нужно явно указывать что будет произведено преобразование из переменной типа INTEGER в Строковую переменную в 16 формате.
Скорее всего вы где то пропустили это.
Я правильно понимаю, что преобразование в строковые переменные требуется только в случае с Modbus ASCII? Насколько помню, в RTU летит plain-data - без всяких преобразований.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С# & Modbus
СообщениеДобавлено: 21 май 2018, 13:52 
Старожил

Зарегистрирован: 16 окт 2013, 01:27
Сообщения: 602
Порфирий писал(а):
sed_alex писал(а):
К примеру под виндой для Modbus ASCII отправка 16 данных в порт будут выглядеть так
Код:
port.Write(i.ToString("X"));

Т.е. нужно явно указывать что будет произведено преобразование из переменной типа INTEGER в Строковую переменную в 16 формате.
Скорее всего вы где то пропустили это.
Я правильно понимаю, что преобразование в строковые переменные требуется только в случае с Modbus ASCII? Насколько помню, в RTU летит plain-data - без всяких преобразований.


Все верно преобразование в строку нужно для ASCII..

Снифером нужно просто посмотреть что вылетает и отсюда уже плясать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С# & Modbus
СообщениеДобавлено: 21 май 2018, 14:39 
Старожил
Аватара пользователя

Зарегистрирован: 14 фев 2012, 19:11
Сообщения: 326
Откуда: Энергодар, Нижневартовск, Екатеринбург
Код в студию.

_________________
git.io/vOZo0


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С# & Modbus
СообщениеДобавлено: 21 май 2018, 17:11 
Только пришел

Зарегистрирован: 21 май 2018, 09:22
Сообщения: 8
Так говорю же, Encoding у SerialPort менял, ставил и UTF и ASCII, ничего не меняется на выходе. Вот я и задумался, может где то в другом месте надо кодировку менять. Данные отправляю в порт массивом байт. Могу вечером кусок кода скинуть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С# & Modbus
СообщениеДобавлено: 21 май 2018, 17:11 
Только пришел

Зарегистрирован: 21 май 2018, 09:22
Сообщения: 8
о как много написали пока я отвечал )))) Вечером код выложу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С# & Modbus
СообщениеДобавлено: 21 май 2018, 17:14 
Только пришел

Зарегистрирован: 21 май 2018, 09:22
Сообщения: 8
neiver писал(а):
Как организована работа с Modbus на C#? Свой велосипед или библиотека?
Я пользовался вот этим https://github.com/NModbus4/NModbus4 работает хорошо.


сие я тоже ковырял, но оно совсем не идет под CompactFramwork, а переписывать его оттуда из исходников долго. В принципе свой велосипед писал на основе этого примера.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С# & Modbus
СообщениеДобавлено: 21 май 2018, 21:55 
Заглядывает иногда

Зарегистрирован: 04 сен 2014, 12:44
Сообщения: 90
Код:
try
            {
                // настройки порта
                port.PortName = "COM" + textBox1.Text;
                port.BaudRate = 19200;
                port.DataBits = 8;
                port.Parity = Parity.None;
                port.StopBits = StopBits.One;
                port.ReadTimeout = 1000;
                port.WriteTimeout = 1000;
                port.Encoding = Encoding.UTF32;
                port.Open();
            }
            catch (Exception er)
            {
                Console.WriteLine("ERROR: невозможно открыть порт:" + er.ToString());
                return;
            }
            byte[] Send = new byte[8];
            byte High, Low;
            Send[0] = Convert.ToByte(1);     //Номер прибора
            Send[1] = Convert.ToByte(3);                             //Функция
            byte[] _adr = BitConverter.GetBytes(0);
            Send[2] = _adr[1];                             //Старший байт № первого регистра
            Send[3] = _adr[0];                             //Мл. байт № первого регистра
            byte[] _length = BitConverter.GetBytes(1);
            Send[4] = _length[1];                             //Ст. байт кол-ва регистров для чтения
            Send[5] = _length[0];                           //Мл. байт кол-ва регистров для чтения
            MyCRC(Send, 6, out High, out Low);
            byte[] crc = BitConverter.GetBytes(ComputeChecksum(Send));
            Send[6] = crc[1];
            Send[7] = crc[0];
           
            port.Write(Send, 0, 8);


ребят, вот обещанный код. Это я писал вопрос, просто на работе не хочу своими учетками заходить. С работы буду в той учетке писать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С# & Modbus
СообщениеДобавлено: 21 май 2018, 22:23 
Старожил
Аватара пользователя

Зарегистрирован: 05 фев 2010, 16:57
Сообщения: 2132
Откуда: Нальчик
Seyran писал(а):
Код:
            Send[0] = Convert.ToByte(1);     //Номер прибора
            Send[1] = Convert.ToByte(3);                             //Функция
            byte[] _adr = BitConverter.GetBytes(0);
            Send[2] = _adr[1];                             //Старший байт № первого регистра
            Send[3] = _adr[0];                             //Мл. байт № первого регистра
            byte[] _length = BitConverter.GetBytes(1);
            Send[4] = _length[1];                             //Ст. байт кол-ва регистров для чтения
            Send[5] = _length[0];                           //Мл. байт кол-ва регистров для чтения
            MyCRC(Send, 6, out High, out Low);
            byte[] crc = BitConverter.GetBytes(ComputeChecksum(Send));
            Send[6] = crc[1];
            Send[7] = crc[0];
           
            port.Write(Send, 0, 8);



Я у себя в шарпе так заполнял массивчик для COM порта, вроде проблем не было...
Код:
            byte[] FlashAddrCmd = { (byte)'A', 0, 0 };
            byte[] FlashWrCmd = { (byte)'B', 0, 0x80, (byte)'F' };
            byte[] FlashVfCmd = { (byte)'g', 0, 0x80, (byte)'F' };
            byte[] ExitCmd = { (byte)'L', (byte)'E'};



Просто глянь на данные запроса через saleae logic и сразу станет понятно, в каком месте не правильно формируются данные...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С# & Modbus
СообщениеДобавлено: 21 май 2018, 22:26 
Заглядывает иногда

Зарегистрирован: 04 сен 2014, 12:44
Сообщения: 90
так в том то и бяда, что они в порт неправилно уже приходят


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С# & Modbus
СообщениеДобавлено: 21 май 2018, 22:32 
Старожил
Аватара пользователя

Зарегистрирован: 05 фев 2010, 16:57
Сообщения: 2132
Откуда: Нальчик
Seyran писал(а):
так в том то и бяда, что они в порт неправилно уже приходят

т.е. все данные не правильны... или какие то байты правильно а какие то нет???
По идее если 16-тиричные данные выводишь в COM то кодировка не при чем, должны отправляться фактические данные...
или я чего то не понимаю...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С# & Modbus
СообщениеДобавлено: 21 май 2018, 23:14 
Заглядывает иногда

Зарегистрирован: 04 сен 2014, 12:44
Сообщения: 90
да, вот точно токое же если вдруг файл UTF откроешь в аски редакторе, то есть трефы бубны и прочие символы, да что я морочусь. ща картинки прикреплю

Изображение

вот сообщение из проги на Си, на которую прибор отвечает

Изображение

а вот что из под дотнет получается


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С# & Modbus
СообщениеДобавлено: 21 май 2018, 23:38 
Старожил
Аватара пользователя

Зарегистрирован: 05 фев 2010, 16:57
Сообщения: 2132
Откуда: Нальчик
Сделайте еще раз такие же две картинки, но так чтобы байты были крупнее, чтобы видно было как анализатор идентифицирует байты...
Сейчас не понятно, что там у вас... и детализацию картинок помельче, чего жадничать на разрешении то... и лучше сюда картинки а не на всякие непонятные сайты...

Например сделайте фото первых 10 байт посылки, так чтобы анализатор обозначил и подписал каждый отдельный байт
Анализатор настройте так, чтобы он подписывал шестнадцатеричное значение каждого байта, а не ждал например символьных строк


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С# & Modbus
СообщениеДобавлено: 22 май 2018, 00:08 
Заглядывает иногда

Зарегистрирован: 04 сен 2014, 12:44
Сообщения: 90
как сюда ? я немогу картинки крепить прямо в топику


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С# & Modbus
СообщениеДобавлено: 22 май 2018, 00:14 
Старожил
Аватара пользователя

Зарегистрирован: 05 фев 2010, 16:57
Сообщения: 2132
Откуда: Нальчик
Seyran писал(а):
как сюда ? я немогу картинки крепить прямо в топику

Драсьти я ваша тетя... вы же программист, не ужто картинку не могете прицепить...
Вот как то так картинки цепляются...


Вложения:
Скриншот-2018-05-21-22.10.jpg
Скриншот-2018-05-21-22.10.jpg [ 51.62 Кб | Просмотров: 796 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С# & Modbus
СообщениеДобавлено: 22 май 2018, 00:15 
Заглядывает иногда

Зарегистрирован: 04 сен 2014, 12:44
Сообщения: 90
Вложение:
4.png
4.png [ 31.56 Кб | Просмотров: 795 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С# & Modbus
СообщениеДобавлено: 22 май 2018, 00:16 
Заглядывает иногда

Зарегистрирован: 04 сен 2014, 12:44
Сообщения: 90
вот нормальная


Вложения:
3.png
3.png [ 17.08 Кб | Просмотров: 794 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С# & Modbus
СообщениеДобавлено: 22 май 2018, 00:31 
Заглядывает иногда

Зарегистрирован: 04 сен 2014, 12:44
Сообщения: 90
обана, понизил скорость до 9600, и вот что получилось


Вложения:
5.png
5.png [ 19.41 Кб | Просмотров: 786 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С# & Modbus
СообщениеДобавлено: 22 май 2018, 00:38 
Старожил
Аватара пользователя

Зарегистрирован: 05 фев 2010, 16:57
Сообщения: 2132
Откуда: Нальчик
У вас даже на рабочем варианте картинки нестыковки со скоростью... заметьте красные точки которыми анализатор помечает не адекватные места...
А про нерабочие картинки я вообще молчу, там не первая ни вторая и близко не на той скорости идут на какую анализатор настроен...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С# & Modbus
СообщениеДобавлено: 22 май 2018, 00:44 
Старожил
Аватара пользователя

Зарегистрирован: 05 фев 2010, 16:57
Сообщения: 2132
Откуда: Нальчик
Попробуйте просто сделать на шарпе тестовую прогу, которая будет передавать простой короткий пакет, например {0x00, 0xFF, 0xAA}, или просто байт...
И хотя бы убедитесь что вы его в анализаторе адекватно видите


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С# & Modbus
СообщениеДобавлено: 22 май 2018, 00:55 
Старожил
Аватара пользователя

Зарегистрирован: 05 фев 2010, 16:57
Сообщения: 2132
Откуда: Нальчик
Сбивал с толку верхний меандр из двух на картинке... сейчас понял что смотреть нужно только на нижний...

В таком случае последняя картинка со скоростью 9600 - не правильная, там две точки анализатора приходятся на один бит передачи, все таки скорость должна быть 19200


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: С# & Modbus
СообщениеДобавлено: 22 май 2018, 01:30 
Заглядывает иногда

Зарегистрирован: 04 сен 2014, 12:44
Сообщения: 90
спасибо, поковыряю еще немного и отпишусь.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB