0

ライン ディスプレイまたはカスタマー ディスプレイのモデル VFD220E、ボー レート 9600 N 8 1、および 20 文字 2 ライン ディスプレイと通信するタスクが割り当てられました。マニュアルはありましたが、コマンドを送信しようとしています。それを拾うのではなく、文字列のように印刷するだけです。事前に感謝します。以下は私のコードです。

  CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier("COM1");
  if (portIdentifier.isCurrentlyOwned())
  {
      System.out.println("Port in use!");
  }
  else {
  System.out.println(portIdentifier.getName());

  SerialPort serialPort = (SerialPort) portIdentifier.open("ListPortClass", 300);
  int b = serialPort.getBaudRate();
  System.out.println(Integer.toString(b));
  serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1,    SerialPort.PARITY_NONE);


  OutputStream mOutputToPort = serialPort.getOutputStream();
  InputStream mInputFromPort = serialPort.getInputStream();
  String ESC=" 1B  51  41  ";//hex codes
  String CR="0D";//hex codes
  String mValue = ESC+" Testing Phase"+CR;//to display on top line.
  String clear ="0C";
  System.out.println("beginning to Write . \r\n");
  mOutputToPort.write(clear.getBytes());
  mOutputToPort.write( mValue.getBytes());
  mOutputToPort.flush();
  System.out.println("Command Written to Port. \r\n");
  mOutputToPort.flush();
  System.out.println("Waiting for Reply \r\n");
  //Thread.sleep(500);
  byte mBytesIn [] = new byte[20];
  mInputFromPort.read(mBytesIn);
  mInputFromPort.read(mBytesIn);
  String value = new String(mBytesIn);
  System.out.println("Response from Serial Device: "+value);
  mOutputToPort.close();
  mInputFromPort.close();
  serialPort.close();
4

1 に答える 1

1

制御コマンドをテキストとして送信しているようです。" 1B 51 41 "文字列として記述してディスプレイに送信することはできません。String の getBytes() メソッドは、バイト 0x1B、0x51、および 0x41 ではなく、UTF-8 String のバイト表現を提供します。

実際のバイト値 0x1B、0x51、および 0x41 をディスプレイに送信する必要があります。バイトを送信するか、文字列でエスケープ シーケンスを使用するか、つまり 10 進表記で使用します\027\081\065

16 進数および 10 進数表記の一般的なコマンドについては、このリンクを参照してください。

于 2012-09-28T19:30:36.517 に答える