Налаштування портів на передачу та прийом інформації через COM порт

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2017
Тип роботи:
Лабораторна робота
Предмет:
Переферійних пристроїв

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет “Львівська політехніка” Кафедра ЕОМ / Лабораторна робота №4 з Переферійних пристроїв на тему: «Налаштування портів на передачу та прийом інформації через COM порт» МЕТА РОБОТИ: ознайомитися з процесом налаштування основних параметрів прийому – передачі пакетних даних через послідовний асинхронний інтерфейс RS-232C (COM-порт). Хід роботи Для того, щоб виконати передачу, потрібно викликати запуск передавача і приймача і виконати налаштування параметрів передачі. / Рис. 4. Налаштування основних параметрів передачі через інтерфейс RS-232C / Рис. 6. Передавання даних через інтерфейс RS-232C Висновок: я ознайомився з процесом передачі даних через послідовний асинхронний інтерфейс RS-232C (COM-порт). Додаток: Код програми передавача і приймача: Файл Main.java package sample; import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.geometry.*; import javafx.scene.Scene; import javafx.scene.image.Image; import javafx.scene.layout.FlowPane; import javafx.stage.Stage; import javafx.scene.control.*; import jssc.SerialPort; import java.util.Objects; public class Main extends Application { static public String data; @Override public void start(Stage primaryStage) throws Exception{ FlowPane root = new FlowPane(); primaryStage.setTitle("ArchCOM"); primaryStage.setScene(new Scene(root, 300, 350)); root.setPadding(new Insets(10, 10, 10, 10)); root.setOrientation(Orientation.VERTICAL); root.setAlignment(Pos.CENTER); root.setVgap(8); root.setHgap(4); root.setPrefWrapLength(210); root.setColumnHalignment(HPos.CENTER); primaryStage.getIcons().add(new Image("file:com-6643314834.png")); final String[] portName = {"NULL"}; Label listOfports = new Label("Виберіть порт:"); ObservableList<String> comList = FXCollections.observableArrayList(Controller.getPortList()); ComboBox<String> comViewer = new ComboBox<>(comList); comViewer.setPrefSize(80, 30); SelectionModel<String> comModel = comViewer.getSelectionModel(); comModel.selectedItemProperty().addListener(new ChangeListener<String>() { @Override public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { portName[0] = newValue; } }); Button push = new Button("Відправити дані"); Button pull = new Button("Прийняти дані"); TextField inputFild = new TextField(); inputFild.setPromptText("Вводьте дані тут"); inputFild.setPrefColumnCount(15); TextField outputFild = new TextField(); outputFild.setPrefColumnCount(15); outputFild.setPromptText("Поле для прочитаних даних"); push.setOnAction(new javafx.event.EventHandler<javafx.event.ActionEvent>() { @Override public void handle(javafx.event.ActionEvent event) { if(!Objects.equals(portName[0], "NULL")){ Controller port = new Controller(portName[0]); port.writeByteInPort(inputFild.getText()); inputFild.setPromptText("Дані відправлено"); } else { inputFild.setPromptText("Виберіть будь ласка порт"); } } }); pull.setOnAction(new javafx.event.EventHandler<javafx.event.ActionEvent>() { boolean pred = false; @Override public void handle(javafx.event.ActionEvent event) { if(!Objects.equals(portName[0], "NULL") & !pred){ Controller port = new Controller(portName[0]); port.readByteFromPort(); outputFild.setPromptText("Читаю дані..."); outputFild.setText(data); pred = true; Button stop = new Button("Завершити читання"); stop.setOnAction(new javafx.event.EventHandler<javafx.event.ActionEvent>() { @Override public void handle(javafx.event.ActionEvent event) { port.forceEnd(); outputFild.setPromptText("Поле для прочитаних даних"); root.getChildren().remove(stop); pred = false; } }); root.getChildren().add(stop); } else if (pred){ outputFild.setText(data); } else { outputFild.setPromptText("Виберіть будь ласка порт"); } } }); Separator firstLine = new Separator(); firstLine.setPrefWidth(180); Separator secondLine = new Separator(); secondLine.setPrefWidth(180); Separator lastLine = new Separator(); lastLine.setPrefWidth(180); Button setup = new Button("Параметри COM портів"); setup.setOnAction(new javafx.event.EventHandler<javafx.event.ActionEvent>() { @Override public void handle(javafx.event.ActionEvent event) { FlowPane subRoot = new FlowPane(); Stage subStage = new Stage(); subStage.setTitle("Налаштування"); subStage.setScene(new Scene(subRoot, 300, 275)); subRoot.setPadding(new Insets(10, 10, 10, 10)); subRoot.setOrientation(Orientation.VERTICAL); subRoot.setAlignment(Pos.CENTER); subRoot.setVgap(8); subRoot.setHgap(4); subRoot.setPrefWrapLength(210); subRoot.setColumnHalignment(HPos.CENTER); subStage.getIcons().add(new Image("file:com-6643314834.png")); Label comSpead = new Label("Швидкість передачі:"); ObservableList<String> comList = FXCollections.observableArrayList("9600 біт/с", "4800 біт/с", "256000 біт/с", "1200 біт/с", "600 біт/с"); ComboBox<String> comViewer = new ComboBox<>(comList); SelectionModel<String> comModel = comViewer.getSelectionModel(); comViewer.getSelectionModel().selectFirst(); comModel.selectedItemProperty().addListener(new ChangeListener<String>() { @Override public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { switch(newValue){ case "9600 біт/с" : Controller.spead = SerialPort.BAUDRATE_9600; case "4800 біт/с" : Controller.spead = SerialPort.BAUDRATE_4800; case "256000 біт/с" : Controller.spead = SerialPort.BAUDRATE_256000; case "1200 біт/с" : Controller.spead = SerialPort.BAUDRATE_1200; case "600 біт/с" : Controller.spead = SerialPort.BAUDRATE_600; }; } }); Label comParity = new Label("Паритет:"); ObservableList<String> parityList = FXCollections.observableArrayList("Непарність", "Парність"); ComboBox<String> parityViewer = new ComboBox<>(parityList); SelectionModel<String> parityModel = parityViewer.getSelectionModel(); parityViewer.getSelectionModel().selectFirst(); parityModel.selectedItemProperty().addListener(new ChangeListener<String>() { @Override public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { switch(newValue){ case "Непарність" : Controller.parity = SerialPort.PARITY_NONE; case "Парність" : Controller.parity = SerialPort.PARITY_ODD; } } }); Label comStopbits = new Label("Стопові біти:"); ObservableList<String> comStopbitsList = FXCollections.observableArrayList("1 біт", "2 біт"); ComboBox<String> comStopbitsViewer = new ComboBox<>(comStopbitsList); SelectionModel<String> comStopbitsModel = comStopbitsViewer.getSelectionModel(); comStopbitsViewer.getSelectionModel().selectFirst(); comStopbitsModel.selectedItemProperty().addListener(new ChangeListener<String>() { @Override public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { switch(newValue){ case "1 біт" : Controller.stopbits = SerialPort.STOPBITS_1; case "2 біт" : Controller.stopbits = SerialPort.STOPBITS_2; }; } }); Button ok = new Button("OK"); ok.setOnAction(new javafx.event.EventHandler<javafx.event.ActionEvent>() { @Override public void handle(javafx.event.ActionEvent event) { subStage.close(); } }); subRoot.getChildren().addAll(comSpead, comViewer, comParity, parityViewer, comStopbits, comStopbitsViewer, ok); subStage.show(); } }); root.getChildren().addAll(listOfports, comViewer, setup, firstLine, inputFild, push, secondLine, outputFild, pull, lastLine); primaryStage.show(); } public static void main(String[] args) { launch(args); } } Файл Controller.java package sample; import jssc.*; public class Controller { private static SerialPort serialPort; public static int spead = SerialPort.BAUDRATE_9600; public static int parity = SerialPort.PARITY_NONE; public static int stopbits = SerialPort.STOPBITS_1; Controller(String portName){ serialPort = new SerialPort(portName); } public static String[] getPortList() { return SerialPortList.getPortNames(); } public void writeByteInPort(String massage) { try { serialPort.openPort(); serialPort.setParams(spead, SerialPort.DATABITS_8, stopbits, parity); serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN | SerialPort.FLOWCONTROL_RTSCTS_OUT); serialPort.writeBytes(massage.getBytes()); serialPort.closePort(); } catch (SerialPortException ex) { System.out.println(ex); } } public void readByteFromPort() { try { serialPort.openPort(); serialPort.setParams(spead, SerialPort.DATABITS_8, stopbits, parity); serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN | SerialPort.FLOWCONTROL_RTSCTS_OUT); serialPort.addEventListener(new PortReader(), SerialPort.MASK_RXCHAR); } catch (SerialPortException ex) { System.out.println(ex); } } public void forceEnd(){ try { serialPort.closePort(); } catch (SerialPortException ex) { System.out.println(ex); } } private static class PortReader implements SerialPortEventListener { public void serialEvent(SerialPortEvent event) { if (event.isRXCHAR() && event.getEventValue() > 0) { try { String data = serialPort.readString(event.getEventValue()); Main.data = data; } catch (SerialPortException ex) { System.out.println(ex); } } } } }
Антиботан аватар за замовчуванням

24.11.2018 19:11-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!