我在
java中为串口发送和接收数据做了简单的程序.我将串口设备连接到环回测试(Rx到Tx).它工作正常.但我无法发送和接收十六进制数据到串口和recive串口.在我的设备中使用了FT232BL芯片.所以有任何dll或其他库需要发送和接收十六进制数据到串口设备.我的代码如下.
enter code here package x.rayimagecapture; import gnu.io.CommPort; import gnu.io.CommPortIdentifier; import gnu.io.SerialPort; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.Timer; public class TwoWaySerialComm extends JPanel implements ActionListener { OutputStream out; private javax.swing.JButton btn; private javax.swing.JScrollPane jScrollPane1; public static javax.swing.JLabel jLabel1; public static javax.swing.JTextField textField; public static boolean flag = false; public static int count = 50; // TimerWindow tmr=new TimerWindow(); public static Timer tmr = new Timer(1000,new ActionListener() { public void actionPerformed(ActionEvent evt) { count++; jLabel1.setText("" + count); } }); public TwoWaySerialComm() { super(); textField = new javax.swing.JTextField(); btn = new javax.swing.JButton(); jScrollPane1 = new javax.swing.JScrollPane(); jLabel1 = new javax.swing.JLabel(); textField.setText(""); // NOI18N // tmr.setDelay(0); btn.setFont(new java.awt.Font("Tahoma",12)); // NOI18N btn.setText("Send"); // NOI18N btn.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { serialwrite(); } }); // textArea.setColumns(20); // textArea.setRows(20); // textArea.setTabSize(0); jScrollPane1.setViewportView(jLabel1); javax.swing.GroupLayout panelLayout = new javax.swing.GroupLayout(this); this.setLayout(panelLayout); panelLayout.setHorizontalGroup( panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelLayout.createSequentialGroup() .addComponent(textField,javax.swing.GroupLayout.PREFERRED_SIZE,300,javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(btn,javax.swing.GroupLayout.DEFAULT_SIZE,84,Short.MAX_VALUE) .addContainerGap()) .addComponent(jScrollPane1)); panelLayout.setVerticalGroup( panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelLayout.createSequentialGroup() .addGroup(panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(textField,47,javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(btn,37,javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jScrollPane1,218,Short.MAX_VALUE))); } void connect(String portName) throws Exception { CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName); if (portIdentifier.isCurrentlyOwned()) { System.out.println("Error: Port is currently in use"); } else { CommPort commPort = portIdentifier.open(this.getClass().getName(),2000); if (commPort instanceof SerialPort) { SerialPort serialPort = (SerialPort) commPort; serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE); serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE); InputStream in = serialPort.getInputStream(); out = serialPort.getOutputStream(); (new Thread(new SerialReader(in))).start(); // (new Thread(new SerialWriter(out))).start(); } else { System.out.println("Error: Only serial ports are handled by this example."); } } } @Override public void actionPerformed(ActionEvent e) { serialwrite(); } public void serialwrite() { try { this.out.write(textField.getText().toString().getBytes()); count = 00; // tmr.start(); tmr.start(); this.out.flush(); } catch (IOException ex) { Logger.getLogger(TwoWaySerialComm.class.getName()).log(Level.SEVERE,null,ex); } } /** * */ public static class SerialReader implements Runnable { InputStream in; public SerialReader(InputStream in) { this.in = in; } public void run() { byte[] buffer = new byte[1024]; int len = -1; try { while ((len = this.in.read(buffer)) != -1) { // textArea.append(" " + new String(buffer,len)); String str = new String(buffer,len); System.out.print(str); if (!str.isEmpty()) { // tmr.stop(); } } } catch (IOException e) { e.printStackTrace(); } } } /** * */ public static class SerialWriter implements Runnable { OutputStream out; public SerialWriter(OutputStream out) { this.out = out; } public void run() { try { int c = 0; while ((c = System.in.read()) != -1) { // this.out.write(c); } } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) { TwoWaySerialComm tws = new TwoWaySerialComm(); JFrame frame = new JFrame(); frame.setSize(400,300); frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE); frame.add(tws); try { tws.connect("COM11"); } catch (Exception ex) { Logger.getLogger(TwoWaySerialComm.class.getName()).log(Level.SEVERE,ex); } frame.setVisible(true); } }
解决方法
字符串到十六进制
Integer.decode(hexString);
十六进制到字符串
Integer.toHexString(integer);