Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 36
1

Организация программы, Modbus TCP, MQTT

18.10.2019, 08:44. Показов 2298. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Хочу написать программу, для опроса и сбора данных с устройств, по протоколу Modbus TCP и MQTT и отображение их в программе. Каждое устройство будет в виде отдельного класса со своим графическим отображением. Есть пару вопросов по организации программы:
1. Класс для отправки и приема данных по протоколу Modbus TCP должен быть один для всех классов, через синхранизацию или у каждого должен быть свой экземпляр?
2. Каждый класс устройства должно работать в отдельном потоке, чтобы отправлять и принимать данные параллельно? Если да, то как организовать 1 и 3 пункты?
3. MQTT тоже должен быть один для всех или у каждого класса свой экземпляр? К примеру если один для всех, то пришли данные, перебрали список устройств, нашли нужного и передали ему эти данные.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.10.2019, 08:44
Ответы с готовыми решениями:

Modbus TCP/IP
Здравствуйте, форумчане. Появилась задача, в которой необходимо реализовать несколько устройств...

MODBUS TCP SLAVE
Всем привет. Создать клиент модбас тсп без проблем получается на сокетах. А вот сервер сокет...

Golang Modbus TCP Server
Здравствуйте. Подскажите как реализовать модбас сервер. нашел в интернете примеры, но вот не пойму...

Как работать с modbus tcp?
кто знает как работать с modbus tcp подскажите плиз и подкинте пару примеров заранее блогадарен

4
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
18.10.2019, 10:28 2
Ты хочешь написать какую-то поделку и спрашиваешь на форуме, что она должна делать. Сам уж определись как-нибудь, чего ты хочешь
0
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 36
18.10.2019, 10:31  [ТС] 3
Я спрашиваю, как правильнее будет организовать работу программы! Я не прошу ее за меня писать.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
18.10.2019, 14:26 4
Нет, ты не знаешь, что ты хочешь и просишь, чтобы тебе рассказали, что ты хочешь, а это абсурд какой-то
0
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 36
18.10.2019, 15:05  [ТС] 5
Хорошо. Есть класс, который реализует графический интерфейс и надо постоянно опрашивать некое устройство по протоколу ModBus TCP. Я полагаю, что опрос надо запустить в отдельном потоке в бесконечном цикле и там по приходу данных обновлять GUI. Но в тоже время нам надо будет отправлять команды по некоторым событиям, а для этого надо будет дождаться, когда закончится чтение данных и отправить команду на запись значения. Данные считываются постоянно с интервалом от 100мс.
Java
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
public class MyThread extends Thread{
    
        private GUIPlc guiPlc;
        private ModbusClient modbusClient;
        
        public MyThread(GUIPlc guiPlc) {
            this.guiPlc = guiPlc;
            modbusClient = new ModbusClient(ip, port);
        }
 
        @Override
        public void run() {
            
            try {
                
                while(true){
                    
                    int[] inputRegisters = modbusClient.ReadHoldingRegisters(0,15);
                    Platform.runLater(() -> {
                        guiPlc.updateGUIData(inputRegisters);
                    });
                    
                    Thread.sleep(100);
                }
            } catch (ModbusInitException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ModbusTransportException e) {
                e.printStackTrace();
            }
 
        }
        
        public void writeRegisterTest(){
            
        }
        
        public void writeCoilTest(){
            
        }
}
В такой реализации, если мы из главного потока нажмем на кнопку, которая вызывает метод writeRegisterTest, то у нас может случится сбой. Как правильно синхронизировать, чтобы не было сбоя!?
0
18.10.2019, 15:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.10.2019, 15:05
Помогаю со студенческими работами здесь

МК vs WinCC через Modbus TCP
Добрый день. Начинаю осваивать siemens. Ранее выполняемые работы: программирование МК, ПЛИС,...

Qt Modbus ответ сервера по TCP
Приветствую! Есть готовая программа клиент для опроса инвертора по протоколу ModBus через RTU,...

Проблемы с подключенияем по Modbus TCP
Один и тот же код в разных программах. Одна библиотека подключена. Тем не менее в одной программе...

MODBUS-TCP обмен данными
Моё простенькое чудо-приложение должно принимать/посылать данные от/на внешнее устройство. Внешнее...

Мигаем лампочками ModBus TCP
Посоветуйте надёжное бюджетное решение для помигать лампочками. Протокол ModBus TCP. Чем больше...

Использование классов в modbus TCP
Вообщем, необходимо было написать для одного человека модбас, что в принципе я и сделал. Поставили...


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

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