Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
2 / 1 / 1
Регистрация: 17.10.2015
Сообщений: 17
1

Примитивная система диспетчеризации

17.12.2018, 22:13. Показов 2197. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Разрабатываю систему диспетчеризации (точнее сказать визуализации), для простеньких САУ.
Задумка в следующем:
Программа должна опрашивать промышленные контроллеры по протоколу Modbus RTU, получать информацию о состоянии узлов управления и отображать. Работа программы предполагается под Windows.

Приблизительный дизайн приложения набросал в paint.

Состояние каждого контроллера должно отображаться в отдельном поле. В этом поле должно располагаться поле со структурной схемой системы, которой управляет контроллер (структурная схема динамическая, отображение зависит от данных с контроллера), кнопки управления, таблица со списком аварий (получаем с контроллера).
Количество подключенных контроллеров не ограничиваю. Может быть несколько десятков. Когда не влазим в размеры Frame, должна появиться полоса прокрутки.

Подскажите на каких компонентах и технике построить такое отображение?
Так же, хорошо бы реализовать возможность сворачивания каждого окошка контроллера, и оставлять минимальную информацию - Работ\авария.
Миниатюры
Примитивная система диспетчеризации  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.12.2018, 22:13
Ответы с готовыми решениями:

Примитивная система частиц?
День добрый :) подскажите пожалуйста, может есть какие не особо тяжкие для понимания новичку...

Примитивная охранная система
Задание дали. Спроектировать "охранную систему" на основе pic18f4520. Текст самого задания: "После...

Поток диспетчеризации событий
В книге Шилдта написано, что Скажите пожалуйста, о чем тут идет речь? Зачем отдельный поток...

Swing поток диспетчеризации событий
всем привет) вообщем вот только начал знакомство со swing и есть такой момент, который я пока не...

7
1246 / 858 / 265
Регистрация: 02.04.2009
Сообщений: 3,255
17.12.2018, 23:45 2
Whitephoenix1, http://zetcode.com/gfx/java2d/shapesandfills/
0
2 / 1 / 1
Регистрация: 17.10.2015
Сообщений: 17
18.12.2018, 08:44  [ТС] 3
Kukstyler, я остался не понятным.
Как нарисовать геометрические фигуры, я знаю.
Вопрос в том, какие объекты можно использовать под поля, на котором будет отображаться структурная схема, и, под общее поле для одного контроллера, на котором будут размещаться мой объект со структурной схемой, кнопки, таблица аварий и др.
И как эти все объекты правильно разместить друг относительно друга.
Я пытался использовать JPanel. Но разместить то я ее могу только в одном из 5 частей окна (Запад, Восток, Юг, Север, Центр).
А в моем случае наверное как-то нужно использовать таблицу.
0
1246 / 858 / 265
Регистрация: 02.04.2009
Сообщений: 3,255
18.12.2018, 21:44 4
Цитата Сообщение от Whitephoenix1 Посмотреть сообщение
разместить то я ее могу только в одном из 5 частей окна (Запад, Восток, Юг, Север, Центр).
Зависит от Layout. Во первых можно в каждую панель разместить ещё по несколько. А во вторых, для специфического дизайна, можно вообще всё вручную ставит, без автоматического контроля позиции и рисайзинга.

Если нет необходимости видеть все панели одновременно, то вот ещё вариант: https://docs.oracle.com/javase... dpane.html
1
2 / 1 / 1
Регистрация: 17.10.2015
Сообщений: 17
30.03.2019, 23:21  [ТС] 5
Воспользовался последним советом. Вроде пошло. На первой картинке пример.

Но дальше столкнулся с новой проблемой.
На вкладку нужно добавить таблицу (в дальнейшем 2 таблицы и кнопки).
Но, кода добавляю таблицу, функциональная схема смещается вверх за пределы экрана. Таблица принимает размеры больше, чем количество строк. Пример на 2й картинке.
Отображение JFrame:
Кликните здесь для просмотра всего текста
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
43
44
45
46
47
48
49
50
51
52
53
54
    
class MainFrame extends JFrame  implements ActionListener{
     
    private static final long serialVersionUID = 1L;
    Timer timer=new Timer(1000, this);
 
    public MainFrame(ArrayList<Plc> plc) {
        timer.start();
        setSize(800, 700);
        JPanel contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 50, 50));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);
        
        Object[][] array = new String[][] {{ "Влажность 1" , "20.0", "%" },
            { "Влажность 2"  , "40.0", "%" },
            { "Влажность 3" , "70.5" , "%" }};
            // Заголовки столбцов
        Object[] columnsHeader = new String[] {"Наименование", "Ед.измерения", "Количество"};
        DefaultTableModel  tableModel = new DefaultTableModel();
        tableModel.setColumnIdentifiers(columnsHeader);
        for (int i = 0; i < array.length; i++)
            tableModel.addRow(array[i]);
        JTable table1 = new JTable(tableModel);
                
        
        JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
        contentPane.add(tabbedPane, BorderLayout.NORTH);
        for(Plc p:plc){
            JPanel panel = new JPanel(new GridLayout(2,1));
            Drawer panelShema = new Drawer(p);
            panelShema.getGraphics();
            panel.add(panelShema);
            panel.add(table1);
            tabbedPane.addTab(p.getName(), null, panel, null);
 
        }
 
        setVisible(true);
        
     }
    
    public void windowClosing(WindowEvent e) {
            ModbusThread.endThread();
        }
 
    @Override
    public void actionPerformed(ActionEvent ev) {
        if(ev.getSource()==timer){
            repaint();
          }     
    }
    
}


Класс Drawer наследник JPanel, рисует функциональную схему.
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Drawer extends JPanel{
 
    private static final long serialVersionUID = 1L;
    private Plc plc;
    public Drawer(Plc plc)  {
        this.plc = plc;
        setPreferredSize(new Dimension(10, 100 + plc.getArrMySystem().size()*140)); //Размер панели в зависимости от количества систем.
    }
    
    public void paintComponent(Graphics g){
        plc.draw(this, g);
    }   
}

Подскажите как управлять расположение элементов? Я пробовал несколько разных Layout, но подозреваю у меня ошибка в чем-то другом.
Миниатюры
Примитивная система диспетчеризации   Примитивная система диспетчеризации  
0
296 / 149 / 67
Регистрация: 22.02.2017
Сообщений: 592
02.04.2019, 08:47 6
Простите за грубый ответ, плюньте в рож* тому кто учит применять BorderLayout или GridLayout.
Работайте с слоями через JLayeredPane и нормальным позиционированием setLocation, и ваших проблем с геморроем позиционирования существовать не будет от слова совсем.
1
10 / 10 / 0
Регистрация: 02.01.2019
Сообщений: 38
03.07.2019, 19:26 7
Какой то бред накидали. Если нужна оболочка именно для винды и оба контроллера modbus RTU, TCP, Server (MQTT), аски.. без разницы именно modbus ключевое слово.. к! И еще актуально, напиши в личку, или на емаил korotkevichov@gmail.com. Накидаю быстро или в скада системе какой, или напишу прогу в VS2019 на с# или C++.. Это быстро делается. И очень просто. Че то вы не в те дебри полезли. Смотрю уже пол года тыкаетесь.
Как пример насосов накидал за 1 минуту в скада системе, фото ниже (безобразие конечно).
Пример работы программирование VS: https://www.youtube.com/watch?v=i4aV2gvvHNE
Миниатюры
Примитивная система диспетчеризации  
0
2 / 1 / 1
Регистрация: 17.10.2015
Сообщений: 17
04.07.2019, 00:39  [ТС] 8
Суть задачи не в том, чтобы сделать СКАДА систему под конкретный проект.
Контроллер хранить в себе информацию о системе, которой управляет. Программа должна вычитывать эту информацию и по ней рисовать схему системы, выводить все показанная датчиков, параметры.

Я набросал черновой вариант:


Красота хромает, главное принцип.

А вообще, проект закрыл, по причине смены деятельности.
0
04.07.2019, 00:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.07.2019, 00:39
Помогаю со студенческими работами здесь

Моделирование дисциплины диспетчеризации задач
|FCFS, RR, SJN, SRT| - дисциплины диспетчеризации задач. Выбрать одну из &quot;дисциплин...

Как изменить дисциплину диспетчеризации для ранее созданного потока в QNX?
Как изменить дисциплину диспетчеризации для ранее созданного потока в QNX?

Примитивная рекурсия
Помогите пожалуйста,не могу понять закономерность ,из которой следует функция F(x,y)? Спасибо...

Примитивная рекурсивность
Помогите, пожалуйста показать примитивную рекурсивность функции f(x,y) f(x,y)= фигурная скобка...


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

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