之前对接了一个pos机设备,设备使用了RS232进行通讯,现在也完成该需求并在线上运行使用当中了,此次对接实现的功能主要是应用程序向POS机设备发送应收金额和收费时间;至此想记录一下开发过程。

一、首先,POS机设备一旦上电则会处于接收以及发送数据的状态;下面的代码片段是打开串口并写数据的一个过程:

       //设置参数String port=portname;String rate = "115200";String dataBit = ""+SerialPort.DATABITS_8;String stopBit = ""+SerialPort.STOPBITS_1;String parity = ""+SerialPort.PARITY_NONE;int parityInt = SerialPort.PARITY_NONE;params.put( SerialReader.PARAMS_PORT, port ); // 端口名称params.put( SerialReader.PARAMS_RATE, rate ); // 波特率params.put( SerialReader.PARAMS_DATABITS,dataBit  ); // 数据位params.put( SerialReader.PARAMS_STOPBITS, stopBit ); // 停止位params.put( SerialReader.PARAMS_PARITY, parityInt ); // 无奇偶校验params.put( SerialReader.PARAMS_TIMEOUT,100 ); // 设备超时时间 1秒params.put( SerialReader.PARAMS_DELAY, 100 ); // 端口数据准备时间 1秒
        //打开串口通道并加入端口监听事件portId = CommPortIdentifier.getPortIdentifier( port );serialPort = ( SerialPort ) portId.open( "SerialReader", timeout );serialPort.addEventListener( this );serialPort.notifyOnDataAvailable( true );serialPort.setSerialPortParams( rate, dataBits, stopBits, parity );
        //往串口写数据outputStream = serialPort.getOutputStream();outputStream.write(bytes3); //往串口发送数据,是双向通讯的。outputStream.flush();outputStream.close();

二、下面是端口监听的实现代码片段

 private static byte[] readBuffer = new byte[1024]; // 4k的buffer空间,缓存串口读入的数据public void serialEvent( SerialPortEvent event ){try{Thread.sleep( delayRead );}catch ( InterruptedException e ){LoggerUtil.error(this.getClass(), e, e.getMessage());e.printStackTrace();}switch ( event.getEventType() ){case SerialPortEvent.BI: // 10case SerialPortEvent.OE: // 7case SerialPortEvent.FE: // 9case SerialPortEvent.PE: // 8case SerialPortEvent.CD: // 6case SerialPortEvent.CTS: // 3case SerialPortEvent.DSR: // 4case SerialPortEvent.RI: // 5case SerialPortEvent.OUTPUT_BUFFER_EMPTY: // 2break;case SerialPortEvent.DATA_AVAILABLE: // 1try{// 多次读取,将所有数据读入while (inputStream.available() > 0) {numBytes = inputStream.read(readBuffer);}//打印接收到的字节数据的ASCII码for(int i=0;i<numBytes;i++){System.out.println("msg[" + numBytes + "]: [" +readBuffer[i] + "]:"+(char)readBuffer[i]);}
//                    numBytes = inputStream.read( readBuffer );}catch ( IOException e ){LoggerUtil.error(this.getClass(), e, e.getMessage());e.printStackTrace();}break;}}

上面一中的writebytes是应用程序往POS机发送的数据;二中的readBuffer是接收POS发送过来的数据;而这些发送和接收的数据都是根据程序与POS机之间的协议而形成的。

在这里就先不记录pos协议方面的内容了;有需要交流的就在下面留言吧。

RS232实现串口双向通讯相关推荐

  1. USART HMI智能串口屏与单片机双向通讯

    目录 ·HMI串口屏介绍 ·HMI串口屏开发实操 ·准备 ·界面认识 ·写命令 ·下载 ·HMI串口屏与单片机(stm32)双向通信 [ 功能实现: STM32控制串口屏对应的数值.文本完成相应变化 ...

  2. RS232与串口通信的4个注意事项详解

    RS232和串口通信,用于串口设备的数据采集软件,包括仪表.天平.秤或任何RS232仪器.WinWedge直接将数据捕获到Excel.Access或任何Windows应用程序或网页.它甚至可以从COM ...

  3. 智能工厂的IGT数据采集网关-PLC与数据库双向通讯的多种SQL语句配置

    IGT-DSER智能网关模块,支持各种PLC.智能仪表.远程IO与数据库之间双向通讯,既可以读取设备的数据上报到SQL数据库,也可以从数据库查询数据后写入到设备:数据库软件支持MySQL.SQLSer ...

  4. 如何实现RS232/485串口转CANbus总线以及介绍使用说明

    智能CAN/串口协议转换器LCNET Pro RS-232/485提供一路RS-485.一路RS-232和一路CAN通道,实现CAN与串口RS-485或RS-232之间的双向数据智能转换.每个通道独立 ...

  5. 【如何实现RS232/485串口转CANbus总线以及介绍使用说明】

    智能CAN/串口协议转换器LCNET Pro RS-232/485提供一路RS-485.一路RS-232和一路CAN通道,实现CAN与串口RS-485或RS-232之间的双向数据智能转换.每个通道独立 ...

  6. RS232/485串口转CANbus总线网关模块CAN232/485MB转换器CANCOM的简介

    1,智能CAN/串口协议转换器LCNET Pro RS-232/485提供一路RS-485.一路RS-232和一路CAN通道,实现CAN与串口RS-485或RS-232之间的双向数据智能转换.每个通道 ...

  7. 蓝牙双向通讯【可自定义协议】SDK

    一.简介: 此文档主要是介绍蓝牙双向通讯sdk的调用方法以及蓝牙双向传输的核心功能逻辑,用户可以根据需要自定义协议进行蓝牙双向通讯 二.SDK接入步骤: 1: 增加sdk库依赖: a)libs文件夹下 ...

  8. GD32F303基于USBD库的usb custom hid 双向通讯实现

    默认已经建立好需要移植的GD32F303空白工程 环境:keil   GD库版本:V2.1.4 通讯工具: 链接:https://pan.baidu.com/s/1Ukuy0u52C9ufPGz9Qc ...

  9. RS232/485串口转TCP/IP串口服务器,串口上网,串口转以太网

    LM-8051NET RS232/RS485串口网桥/串口设备联网服务器,美丽小巧的流线型外壳,拿到它,还没开始使用,就让您爱不释手,LM-8051NET RS232/RS485串口网桥/串口设备联网 ...

最新文章

  1. 构建一个react项目_您想要了解更多有关React的内容吗? 让我们构建一个游戏,然后玩。...
  2. 神经网络的分类准确率到底是一个什么物理量
  3. 自相关函数,功率谱,时间序列信号模型三者的关系
  4. sql 合并相同条件的字段
  5. Cannot resolve method ‘getTableEnvironment(org.apache.flink.api.java.ExecutionEnvironment)‘
  6. 拼接符 防注入正则校验_Apache Kylin 命令注入漏洞调试分析(CVE-2020-1956)
  7. angualr 单选全选方法(适用购物车/各种列表删除等)
  8. 疑似小米7工程机在咸鱼开售,售价100万起?
  9. 50个常用的sql语句
  10. python捕获键盘按键_Python中捕获键盘的方式详解
  11. python输入一个整数_Python中实现输入一个整数的案例
  12. 计算机如何寻址,计算机运算之直接寻址法与间接寻址法
  13. 读《潜伏在办公室》第二季
  14. 【python 去除文件名后缀或提取后缀】
  15. ChemDraw使用不了怎么办
  16. 【软件】DVDStyler报错找不到VOB文件
  17. 数学建模算法与应用——整数规划
  18. Python实现分布式服务器部署维护
  19. 局域网内终端设备观看电脑上的视频/图片
  20. VC编程给工具栏添加提示信息

热门文章

  1. 键入传真服务器位置是什么意思,2014传真服务器主要功能与技术参数说明.doc
  2. 机器学习-华为mindspore入门-波士顿房价回归
  3. 苹果iOS系统下的推送机制及实现
  4. 职业生涯规划(career planning)
  5. 原生js时间格式化方法封装
  6. T470P笔记本安装固态以及固态中安装系统_完整步骤
  7. super()的两个参数
  8. 【AP】a pratical guide to robust optimization(2)
  9. 绘制CAD图纸的过程中CAD快捷键失灵了怎么办?
  10. 外贸企业邮箱域名是什么?企业内部邮箱域名注册解析怎么做?