java串口通信.docx

上传人:b****4 文档编号:4032539 上传时间:2022-11-27 格式:DOCX 页数:45 大小:29.82KB
下载 相关 举报
java串口通信.docx_第1页
第1页 / 共45页
java串口通信.docx_第2页
第2页 / 共45页
java串口通信.docx_第3页
第3页 / 共45页
java串口通信.docx_第4页
第4页 / 共45页
java串口通信.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

java串口通信.docx

《java串口通信.docx》由会员分享,可在线阅读,更多相关《java串口通信.docx(45页珍藏版)》请在冰豆网上搜索。

java串口通信.docx

java串口通信

Java串口通信实例

前言:

如果你对串口了解的不是太多,还请你稍微拿出点时间来学习点(大致了解下就行,毕竟本篇文档主要是软件的通信开发)。

在初次做这个java串口实现时,如果你用的是台式机,那么机箱后面一般有一个串口的(笔记本现在一般很少有了,USB技术通信逐渐流行开来)。

在真正用java实现串口之前,大家可以下载一个虚拟串口生成工具,以及串口调试工具,来模拟一下串口通信的大致情况。

正文:

这是一个用java代码实现的串口通信的小实例,仅供大家学习参考。

下面共有六个java文件

(SerialDemo.java,SerialConnection.java,AlertDialog.java,PortRequestedDialog.java,SerialConnectionException.java,SerialParameters.java)

以下的java代码放在一个java包下面即可。

Java串口,本实例大致工作流程是:

将以下的所有java类都放在一个包下面,runas---javaapplication,打开的是一个图形化界面,最上面的是一个输入文本框(也就是你要发射的指令输入框),下面是一个接收的返回数据显示框,最下面的是串口的配置参数设置,最低端是几个按钮(打开串口,发送指令,关闭串口,发送中断,将接收数据框清空)。

图形化界面的左上角有个File字样,这是个menu点击后可以看到有,save,load,exit(save用于以文件的形式保存设置的串口通信参数,load正好相反,是读取串口通信的参数文件,exit是退出整个程序)。

使用此代码之前的环境配置:

首先用的是javacomm20-win32.zip这个压缩包(m,自己可以到网上下载)

前提条件是:

将这种配置放在外部的JDK环境之下(供参考)

①.解压完之后将win32com.dll放到C:

\ProgramFiles\Java\jdk1.7.0_03\bin下

②.将comm.jar价包拷贝到C:

\ProgramFiles\Java\jre7\lib\ext

③m.properties拷贝到C:

\ProgramFiles\Java\jre7\lib

 

用rxtxComm来配置环境的话步骤如下:

step1.在eclipse中新建一个工程(根据你自己的需要,Applet,tomcat,java工程等均可)。

step2.在工程下建一个lib文件夹。

step3.将rxtx-2.1-7-bins-r2.zip解压缩,得到文件夹[rxtx-2.1-7-bins-r2]。

step4.将[rxtx-2.1-7-bins-r2]/RXTXcomm.jar这个文件copy到step2创建的lib中。

step5.将[rxtx-2.1-7-bins-r2]/Windows/i368-mingw32目录下的两个dll文件copy到step2创建的lib中。

step6.在工程上右键->Properties->JavaBuilderPath->Libraries->AddJARs->选择step2中创建的lib目录下的RXTXcomm.jar->OK。

step7.最关键的一步。

点RXTXcomm.jar前面的小加号(+)->选择Nativelibrarylocation->点右边一列按钮中的Edit…->选择step2中创建的lib目录->OK。

补充:

如果你的代码需要调用本地dll,你可以通过同样的方式设置Nativelibrarylocation。

注意:

电脑上有一个默认的物理串口COM1,使用虚拟串口生成器时,会自动从COM2开始(一般一次生成两个虚拟的,与COM1有区别),用JavaxComm环境配置时(由于其版本的不再升级),可能做的程序界面上不会显示COM1,可以用RxtxComm来配置,或者两种配置都用上(应该不会出现不兼容)。

自己在测试时用的是COM1串口(直接就是在机箱后面接上通信线)。

Ps:

java串口实现有很多种方法,希望这个实例能帮助java开发专业人员及爱好者进一步地学习。

代码:

SerialDemo.java

importjava.awt.Button;

importjava.awt.Choice;

importjava.awt.Cursor;

importjava.awt.Dimension;

importjava.awt.FileDialog;

importjava.awt.Frame;

importjava.awt.GridBagConstraints;

importjava.awt.GridBagLayout;

importjava.awt.GridLayout;

importjava.awt.Label;

importjava.awt.Menu;

importjava.awt.MenuBar;

importjava.awt.MenuItem;

importjava.awt.Panel;

importjava.awt.TextArea;

importjava.awt.Toolkit;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.awt.event.ItemEvent;

importjava.awt.event.ItemListener;

importjava.awt.event.WindowAdapter;

importjava.awt.event.WindowEvent;

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.FileNotFoundException;

importjava.io.FileOutputStream;

importjava.io.IOException;

importjava.util.Enumeration;

importjava.util.Properties;

importm.CommPortIdentifier;

importjavax.swing.JComboBox;

/**

*MainfileforSerialDemoprogram.Thisprogramillustratesmanyofthe

*abilitiesofthemapi.ThisfilecontainstheGUIframeworkthat

*theprogramrunsin.

*/

publicclassSerialDemoextendsFrameimplementsActionListener{

finalintHEIGHT=450;

finalintWIDTH=410;

privateMenuBarmb;

privateMenufileMenu;

privateMenuItemopenItem;

privateMenuItemsaveItem;

privateMenuItemexitItem;

privateJComboBoxtype;

privateButtonopenButton;

privateButtoncloseButton;

privateButtonbreakButton;

privateButtonsendButton;

privateButtonclearButton;

privatePanelbuttonPanel;

privatePanelmessagePanel;

privateTextAreamessageAreaOut;

privateTextAreamessageAreaIn;

privateConfigurationPanelconfigurationPanel;

privateSerialParametersparameters;

privateSerialConnectionconnection;

privatePropertiesprops=null;

/**

*Mainmethod.Checkstoseeifthecommandlineagrumentisrequesting

*usageinformaition(-h,-help),ifitis,displayausagemessageand

*exit,otherwisecreateanewSerialDemoandsetitvisible.

*/

publicstaticvoidmain(String[]args){

System.out.println("进入主函数");

if((args.length>0)

&&(args[0].equals("-h")||args[0].equals("-help"))){

System.out.println("usage:

javaSerialDemo[configurationFile]");

System.exit

(1);

}

SerialDemoserialDemo=newSerialDemo(args);

serialDemo.setVisible(true);

serialDemo.repaint();

}

/**

*CreatenewSerialDemoandinitilizesit.Parsesargstofind

*configurationfile.Iffound,initialstateitsettoparametersin

*configurationfile.

*

*@paramargs

*commandlineargumentsusedwhenprogramwasinvoked.

*/

publicSerialDemo(String[]args){

super("SerialDemo");

if(!

(args.length>0)){

System.out.println("serialdemo的args传过来还是为空");

}

//添加到面板的初始化参数

parameters=newSerialParameters();

//SetuptheGUIfortheprogram

addWindowListener(newCloseHandler(this));

mb=newMenuBar();

fileMenu=newMenu("File");

openItem=newMenuItem("Load");

openItem.addActionListener(this);

fileMenu.add(openItem);

saveItem=newMenuItem("Save");

saveItem.addActionListener(this);

fileMenu.add(saveItem);

exitItem=newMenuItem("Exit");

exitItem.addActionListener(this);

fileMenu.add(exitItem);

mb.add(fileMenu);

setMenuBar(mb);

messagePanel=newPanel();

messagePanel.setLayout(newGridLayout(2,1));

//信息码的输入(并且应该是可以编辑的):

messageAreaOut=newTextArea();

messagePanel.add(messageAreaOut);

//解析信息码(只可接收不可编辑)

messageAreaIn=newTextArea();

messageAreaIn.setEditable(false);

messagePanel.add(messageAreaIn);

add(messagePanel,"Center");

//底面的button

configurationPanel=newConfigurationPanel(this);

buttonPanel=newPanel();

openButton=newButton("OpenPort");

openButton.addActionListener(this);

buttonPanel.add(openButton);

sendButton=newButton("SendData");

sendButton.addActionListener(this);

sendButton.setEnabled(false);

buttonPanel.add(sendButton);

closeButton=newButton("ClosePort");

closeButton.addActionListener(this);

closeButton.setEnabled(false);

buttonPanel.add(closeButton);

breakButton=newButton("SendBreak");

breakButton.addActionListener(this);

breakButton.setEnabled(false);

buttonPanel.add(breakButton);

clearButton=newButton("Clear");

clearButton.addActionListener(this);

clearButton.setEnabled(false);

buttonPanel.add(clearButton);

PanelsouthPanel=newPanel();

GridBagLayoutgridBag=newGridBagLayout();

GridBagConstraintscons=newGridBagConstraints();

southPanel.setLayout(gridBag);

cons.gridwidth=GridBagConstraints.REMAINDER;

gridBag.setConstraints(configurationPanel,cons);

cons.weightx=1.0;

southPanel.add(configurationPanel);

gridBag.setConstraints(buttonPanel,cons);

southPanel.add(buttonPanel);

add(southPanel,"South");

parseArgs(args);

connection=newSerialConnection(this,parameters,messageAreaOut,

messageAreaIn);

//将设置好的参数传到connection

setConfigurationPanel();

DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();

setLocation(screenSize.width/2-WIDTH/2,screenSize.height/2

-HEIGHT/2);

setSize(WIDTH,HEIGHT);

}

/**

*SetstheGUIelementsontheconfigurationPanel.

*/

publicvoidsetConfigurationPanel(){

configurationPanel.setConfigurationPanel();

}

/**

*Respondstothemenuitemsandbuttons.

*/

//监听选择及按钮操作

publicvoidactionPerformed(ActionEvente){

Stringcmd=e.getActionCommand();

//Loadsaconfigurationfile.应该就是将配置好的参数的文件从外部直接导入

if(cmd.equals("Load")){

if(connection.isOpen()){

AlertDialogad=newAlertDialog(this,"PortOpen!

",

"Configurationmaynot","beloaded",

"whileaportisopen.");

}else{

FileDialogfd=newFileDialog(this,"LoadPortConfiguration",

FileDialog.LOAD);

fd.setVisible(true);

Stringfile=fd.getFile();

if(file!

=null){

Stringdir=fd.getDirectory();

Filef=newFile(dir+file);

try{

FileInputStreamfis=newFileInputStream(f);

props=newProperties();

props.load(fis);

fis.close();

}catch(FileNotFoundExceptione1){

System.err.println(e1);

}catch(IOExceptione2){

System.err.println(e2);

}

loadParams();

}

}

}

//Savesaconfigurationfile.应该就是将配置好的参数以文件的形式保存

if(cmd.equals("Save")){

configurationPanel.setParameters();

FileDialogfd=newFileDialog(this,"SavePortConfiguration",

FileDialog.SAVE);

fd.setFile("serialdemo.properties");

fd.setVisible(true);

StringfileName=fd.getFile();

Stringdirectory=fd.getDirectory();

if((fileName!

=null)&&(directory!

=null)){

writeFile(directory+fileName);

}

}

//Callsshutdown,whichexitstheprogram.

if(cmd.equals("Exit")){

shutdown();

}

//Opensaport.打开串口

if(cmd.equals("OpenPort")){

portOpened();

}

if(cmd.equals("SendData")){

openButton.setEnabled(false);

//将光标等待

CursorpreviousCursor=getCursor();

setNewCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

//参数已经设置完成,然后再打开串口后将参数一并记录下来

configurationPanel.setParameters();

try{

connection.openConnection();

}catch(SerialConnectionExceptione1){

//TODOAuto-generatedcatchblock

e1.printStackTrace();

}

setNewCursor(previousCursor);

}

//Closesaport.

if(cmd.equals("ClosePort")){

portClosed();

}

//Sendsabreaksignaltotheport.

if(cmd.equals("SendBreak")){

connection.sendBreak();

}

//将接收到得数据清空处理

if(cmd.equals("Clear")){

clear_data();

}

}

/**

*Togglesthebuttonstoanopenportstate.

*/

publicvoidportOpened(){

openButton.setEnabled(false);

closeButton.setEnabled(true);

breakButton.setEnabled(true);

sendButton.setEnabled(true);

clearButton.setEnabled(true);

}

/**

*CallscloseConnectionontheS

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学案例设计

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1