Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/58: Рейтинг темы: голосов - 58, средняя оценка - 4.71
 Аватар для Hkr
8 / 8 / 0
Регистрация: 16.05.2012
Сообщений: 19

Программа опроса счетчика меркурий 206 rn по rs485

06.07.2016, 10:45. Показов 11520. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть счетчик меркурий 206 rn
есть конвертер rs 485 to Ethernet
как реализовать на C# опрос счетчика?
чтобы получить текущие показания или архив запросить
и вывести это
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.07.2016, 10:45
Ответы с готовыми решениями:

Не работает программа опроса персонала на месторождении
В одном месте происходит ошибка, подскажите пожалуйста в чем дело, за ранее спасибо. unit Unit1; interface uses Windows,...

Клиент-сервер, программа для опроса
Вообщем ситуация такая: Хочу написать программу для того что бы опросить пользователей . Предполагается что есть n количество...

Программа-анкета для опроса населения
Помогите пожалуйста написать программу на C#.можно и в консоли. Анкета для опроса населения содержит две группы вопросов Первая группа...

39
Эксперт .NET
 Аватар для Usaga
14303 / 9388 / 1354
Регистрация: 21.01.2016
Сообщений: 35,398
06.07.2016, 11:00
Hkr, нужно посмотреть документацию на этот конвертер...
1
 Аватар для Hkr
8 / 8 / 0
Регистрация: 16.05.2012
Сообщений: 19
06.07.2016, 11:04  [ТС]
до конвертер он просто посредник, вот сейчас пытаюсь найти описание протокола меркурия, там вроде как все есть
просто знаний нет как вообще это реализовывать, какие классы методы...
http://incotex-support.blogspo... -post.html
1
Эксперт .NET
 Аватар для Usaga
14303 / 9388 / 1354
Регистрация: 21.01.2016
Сообщений: 35,398
06.07.2016, 11:08
Цитата Сообщение от Hkr Посмотреть сообщение
до конвертер он просто посредник
Но как с ним работать тоже знать надо, так ведь?

Добавлено через 2 минуты
Я так понимаю, что этот конвертер откроет какой-то порт (TCP или UDP) и будет работать в виде терминала или вообще по какому-то своему протоколу. Вот это и нужно выяснить. А протокол работы со счётчиком уже потом.
1
 Аватар для Hkr
8 / 8 / 0
Регистрация: 16.05.2012
Сообщений: 19
06.07.2016, 11:15  [ТС]
да вот вроде как открывать порт нужно программой, просто обратившись к нему, конвертеров много и вроде нет описания у них никакого
1
Эксперт .NET
 Аватар для Usaga
14303 / 9388 / 1354
Регистрация: 21.01.2016
Сообщений: 35,398
06.07.2016, 11:17
Цитата Сообщение от Hkr Посмотреть сообщение
да вот вроде как открывать порт нужно программой
Вообще порт эта штука сама открывает. Тебе нужно знать какой (их очень много). И что туда посылать (протокол). Нужна документация на конкретную модель конвертера.
1
 Аватар для Hkr
8 / 8 / 0
Регистрация: 16.05.2012
Сообщений: 19
06.07.2016, 11:19  [ТС]
я знаю ip-адрес и порт который открывается когда к ней обращаешься
1
Эксперт .NET
 Аватар для Usaga
14303 / 9388 / 1354
Регистрация: 21.01.2016
Сообщений: 35,398
06.07.2016, 11:24
Hkr, Ну вот. Осталось ещё узнать протокол, покоторому этот конвертер работает и можно начинать пробовать работать...
1
 Аватар для Hkr
8 / 8 / 0
Регистрация: 16.05.2012
Сообщений: 19
06.07.2016, 12:09  [ТС]
по сокету чтоль, или это не то?

Добавлено через 37 минут
по TCP, есть дамп
1
Эксперт .NET
 Аватар для Usaga
14303 / 9388 / 1354
Регистрация: 21.01.2016
Сообщений: 35,398
06.07.2016, 12:53
Цитата Сообщение от Hkr Посмотреть сообщение
по TCP, есть дамп
Ну, если ты в дампе разберёшься, то ладно.

Я мельком посмотрел протокол по которому можно общаться со счётчиком - он тривильный. Один байт команды, потом несколько байт флагов (от нуля до трёх). Примеры всех запросо и возможных ответов есть в документации на которую ты привёл ссылку. Разберёшься махом.
1
 Аватар для Hkr
8 / 8 / 0
Регистрация: 16.05.2012
Сообщений: 19
06.07.2016, 13:46  [ТС]
да вот в этом то и дело, не соображу как начать, я просто очень начинающий) можешь примерчик накатать самый просто чтобы было от чего отталкиваться?
как отправить запрос и получить его
просто ни разу такого никогда не делал, какие классы методы и т.п.

Добавлено через 1 минуту
там же при обращении нужно указать и адрес счетчика как-то

Добавлено через 16 минут
к примеру
есть такой запрос
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Пример: команда запроса мгновенных значений параметров сети напряжения , тока и мощности
 
63
 
Ответ:
 
63 21 92 00 30 00 00 59
 
63 – команда
 
21 92 – напряжение 219,2 В
 
00 30300 мА
 
00 00 5959 Вт
адрес счетчика его серийник
например 25598354
ip 172.25.222.44
port 50
1
Эксперт .NET
 Аватар для Usaga
14303 / 9388 / 1354
Регистрация: 21.01.2016
Сообщений: 35,398
06.07.2016, 14:01
Hkr, для работы с TCP в шарпе есть такая штука - TcpClient. По ссылке документация и примерчик. Попробуй тупо послать байт "63" и посмотреть прийдёт ли тебе ожидаемый ответ. Может да, а может и нет. Вполне вероятно, что адаптер RS485-Ethernet работает по какому-то своему протоколу и просто так и не будет туда-сюда пересылать твои запросы/ответы. К примеру порт RS485 поддерживает разные стандартные скорости. Как ты их задвать собрался?

Поэтому я и сказал, что нужно первым делом глянуть как правильно взаимодействовать с эти адаптером. Для этого нужно знать модель адаптера.
1
 Аватар для Hkr
8 / 8 / 0
Регистрация: 16.05.2012
Сообщений: 19
06.07.2016, 14:35  [ТС]
адаптер все просто
если настройки одни и те же, к примеру все приборы 96008N1, то это все из интерфейса настраивается контроллера
у меня все настроено
если разные то там другой протокол у нее, буду выпытывать как она работает
а разве мы не может отправить данные шарпом? скорость такая четность такая?
1
Эксперт .NET
 Аватар для Usaga
14303 / 9388 / 1354
Регистрация: 21.01.2016
Сообщений: 35,398
06.07.2016, 14:43
Цитата Сообщение от Hkr Посмотреть сообщение
а разве мы не может отправить данные шарпом? скорость такая четность такая?
Да всё мы можем, вот только вопрос в том в каком оно виде должно быть)))) Т.е. если адаптер требует какой-то набор команд, а не просто данные для счётчика, то тебе нужно будет знать эти команды. Т.е. к адаптеру должен быть такой же документ, как для счётчика.

Условно говоря так: посылаем ему "SET_SPEED_100" скорость переключается на 100Кб/сек. Посылаем "SEND\n[байты]" адаптер передаёт эти данные счётчику. Надеюсь я понятно выразился?))
1
 Аватар для Hkr
8 / 8 / 0
Регистрация: 16.05.2012
Сообщений: 19
06.07.2016, 20:31  [ТС]
образно я это понимаю) посмотрел пример кода так и не сообразил как его применить(
1
Эксперт .NET
 Аватар для Usaga
14303 / 9388 / 1354
Регистрация: 21.01.2016
Сообщений: 35,398
07.07.2016, 05:26
Цитата Сообщение от Hkr Посмотреть сообщение
посмотрел пример кода так и не сообразил как его применить(
Можно так:
Кликните здесь для просмотра всего текста
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
54
55
56
using System;
using System.Net;
using System.Net.Sockets;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                //Создаём подключение к указанному порту по указанному адресу
                using (TcpClient client = new TcpClient(new IPEndPoint(IPAddress.Parse("172.25.222.44"), 50)))
                {
                    //Для обмена данными с устройством нам понадобится буфер
                    //Сделаем два буфера - один для приёма, второй для передачи
                    //Судя по документации, размер команд - всего несколько байт
                    //так, что 100 байт будет просто за глаза
                    const int MAX_BUF_SIZE = 100;
                    //Буфер для приёма данных
                    byte[] recvBuf = new byte[MAX_BUF_SIZE];
                    //Буфер для отправки данных
                    byte[] sendBuf = new byte[MAX_BUF_SIZE];
 
                    //Получим объект потока - точка обмена информацией с удалённым
                    //устройством.
                    using (NetworkStream stream = client.GetStream())
                    {
                        //Отправим команду 0x63 устройству.
                        //В документации номер команды в шестнадцатиричном формате, 
                        //а не в десятичном! Поэтому 0x63, а не 63!
                        sendBuf[0] = 0x63;
                        stream.Write(sendBuf, 0, 1); //Данные отдаём потоку. Указываем где они лежат и сколько байт (1) отправить.
 
                        //Читаем ответ. Документация говорит, что мы должны получить 8 байт,
                        //но мы указываем максимальный размер нашего буфера.
                        Int32 bytes = stream.Read(recvBuf, 0, MAX_BUF_SIZE);
                        //Выведем на экран полученную информацию.
                        Console.WriteLine("Получено {0} байт", bytes);
                        for (int i = 0; i < bytes; i++)
                        {
                            Console.Write("{0:X2} ", recvBuf[i]);
                        }
                    }
                }
            }
            catch (SocketException e)
            {
                Console.WriteLine("Ахтунг! Ошибкен! {0}", e);
            }
 
            Console.ReadKey();
        }
    }
}


Но опять же, не факт, что заработает...
0
 Аватар для Hkr
8 / 8 / 0
Регистрация: 16.05.2012
Сообщений: 19
07.07.2016, 09:26  [ТС]
Code
1
2
3
4
5
6
7
8
Ахтунг! Ошибкен! System.Net.Sockets.SocketException (0x80004005): Требуемый адре
с для своего контекста неверен
   в System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress s
ocketAddress)
   в System.Net.Sockets.Socket.Bind(EndPoint localEP)
   в System.Net.Sockets.TcpClient..ctor(IPEndPoint localEP)
   в ConsoleApplication1.Program.Main(String[] args) в D:\Project\ConsoleApplica
tion1\ConsoleApplication1\Program.cs:строка 14
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
07.07.2016, 09:31
Цитата Сообщение от Hkr Посмотреть сообщение
Ахтунг! Ошибкен! System.Net.Sockets.SocketException (0x80004005): Требуемый адре
с для своего контекста неверен
Ну напиши правильный адрес
0
 Аватар для Hkr
8 / 8 / 0
Регистрация: 16.05.2012
Сообщений: 19
07.07.2016, 09:55  [ТС]
Цитата Сообщение от aquaMakc Посмотреть сообщение
Ну напиши правильный адрес
так правильный то и написан
0
Эксперт .NET
 Аватар для Usaga
14303 / 9388 / 1354
Регистрация: 21.01.2016
Сообщений: 35,398
07.07.2016, 09:55
Hkr, aquaMakc, это я фигню сделал В конструктор TcpClient не нужно IP этот совать:

Кликните здесь для просмотра всего текста

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
54
55
56
57
58
59
using System;
using System.Net;
using System.Net.Sockets;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                //Создаём подключение к указанному порту по указанному адресу
                using (TcpClient client = new TcpClient())
                {
                    //Подключимся
                    client.Connect(IPAddress.Parse("172.25.222.44"), 50);
 
                    //Для обмена данными с устройством нам понадобится буфер
                    //Сделаем два буфера - один для приёма, второй для передачи
                    //Судя по документации, размер команд - всего несколько байт
                    //так, что 100 байт будет просто за глаза
                    const int MAX_BUF_SIZE = 100;
                    //Буфер для приёма данных
                    byte[] recvBuf = new byte[MAX_BUF_SIZE];
                    //Буфер для отправки данных
                    byte[] sendBuf = new byte[MAX_BUF_SIZE];
 
                    //Получим объект потока - точка обмена информацией с удалённым
                    //устройством.
                    using (NetworkStream stream = client.GetStream())
                    {
                        //Отправим команду 0x63 устройству.
                        //В документации номер команды в шестнадцатиричном формате, 
                        //а не в десятичном! Поэтому 0x63, а не 63!
                        sendBuf[0] = 0x63;
                        stream.Write(sendBuf, 0, 1); //Данные отдаём потоку. Указываем где они лежат и сколько байт (1) отправить.
 
                        //Читаем ответ. Документация говорит, что мы должны получить 8 байт,
                        //но мы указываем максимальный размер нашего буфера.
                        Int32 bytes = stream.Read(recvBuf, 0, MAX_BUF_SIZE);
                        //Выведем на экран полученную информацию.
                        Console.WriteLine("Получено {0} байт", bytes);
                        for (int i = 0; i < bytes; i++)
                        {
                            Console.Write("{0:X2} ", recvBuf[i]);
                        }
                    }
                }
            }
            catch (SocketException e)
            {
                Console.WriteLine("Ахтунг! Ошибкен! {0}", e);
            }
 
            Console.ReadKey();
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.07.2016, 09:55
Помогаю со студенческими работами здесь

Программа опроса оборудования по интернету через прокси сервер
Программа написанная мной опрашивала оборудование на прямую по интернету (пути прописывал сетевой администратор раньше). Теперь же...

Меркурий-ERP
На рынок вышла новая система Меркурий-ERP http://soft4trade.ru Внедрена в нескольких крупных торговых сетях, производствах и фермерских...

Меркурий 230 программатор как им пользоваться
Как пользоваться программатором копировать данные и обменивать их

Почему Меркурий не повернут к Солнцу одной стороной?
Даже такое крупное небесное тело как Луна и то обращается вокруг Земли будучи повернутой к ней одной стороной. А вот Меркурий с Солнцем...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
[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-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru