这是几年前做的了,一直都不想分享出来,后来想想为了能够给大家点想法,献出来了。。。

这是一个电脑读称的方法,一般用COMM口连接的电子设备都可参考。

如果是对串口参数不确定的,可以网上找个串口测试工具,轻松测出串口参数

网上搜索MSCOMM32.OCX

1.将上面的MSCOMM32.OCX保存到系统目录下C:\Windows\SysWOW64\MSCOMM32.OCX

然后注册:REGSVR32 C:\Windows\SysWOW64\MSCOMM32.OCX

2.修改注册表:

REGEDIT

在HKEY_CLASSES_ROOT\Licenses下建一项:

4250E830-6AC2-11cf-8ADB-00AA00C00905

修改数值数据:kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun

重新启动电脑,这样COMM组件就能使用了

以上是在PC上配置的数据。

登陆GUI

T-code: SOLE

新建条目:

OLE 应用程序         MSCOMMLIB.MSCOMM.1

版本号

类标识               {648A5600-2C6E-101B-82B6-000000000014}

CLSID 库类型

OLE 对象名

类型信息键值

包含程序

语言

检查权限

文本

FUNCTION z_bc_get_balance.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" REFERENCE(MODE) TYPE I DEFAULT 0
*" REFERENCE(COMMPORT) TYPE I DEFAULT 1
*" VALUE(SETTINGS) TYPE C DEFAULT '1200,N,8,1'
*" REFERENCE(I_INPUT) TYPE C OPTIONAL
*" EXPORTING
*" REFERENCE(E_OUTPUT) TYPE C
*" EXCEPTIONS
*" NO_CREATE_OBJECT
*"---------------------------------------------------------------------- TYPE-POOLS:sabc.
INCLUDE ole2incl.
DATA pos TYPE i.
CLEAR: pos,balance,value,e_output.
PERFORM prm_get_settings CHANGING settings.
* WAIT UP TO 3 SECONDS.
PERFORM prm_init.
PERFORM prm_open_port USING commport settings.
IF mode = ."读取串口数据
PERFORM prm_read_port CHANGING e_output.
ELSEIF mode = ."写串口数据
PERFORM prm_write_port USING i_input CHANGING e_output.
ENDIF.
PERFORM prm_final.
SEARCH balance FOR '+'.
IF sy-subrc = .
pos = sy-fdpos.
SHIFT balance BY ( pos + ) PLACES.
ENDIF.
SEARCH balance FOR 'g'.
IF sy-subrc = .
pos = sy-fdpos.
balance = balance+(pos).
CONDENSE balance NO-GAPS.
e_output = balance.
ENDIF.
COMMIT WORK
ENDFUNCTION. 此块为配置接口类型模块(自建表用IP地址来配置相应的comm口参数)
*****************************************************************************
FORM prm_get_settings CHANGING p_settings.
DATA addr TYPE ni_nodeaddr.
CLEAR addr.
CALL FUNCTION 'TH_USER_INFO'
IMPORTING
addrstr = addr.
SELECT SINGLE setting INTO p_settings FROM zbctaddr WHERE addr = addr.
IF sy-subrc = .
CLEAR addr.
ENDIF.
ENDFORM. " PRM_GET_SETTINGS 初始化接口对象
******************************************************************************
FORM prm_init .
DATA:
wa_repid LIKE sy-repid.
CLEAR wa_repid.
wa_repid = sy-repid.
CALL FUNCTION 'AUTHORITY_CHECK_OLE'
EXPORTING
program = wa_repid
activity = sabc_act_call
application = 'MSCOMMLIB.MSCOMM.1'
EXCEPTIONS
no_authority =
activity_unknown =
OTHERS = .
IF sy-subrc <> .
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CREATE OBJECT o_obj 'MSCOMMLib.MSComm.1'.
IF sy-subrc <> .
RAISE no_create_object.
ENDIF.
ENDFORM. " PRM_INIT 接口打开
***************************************************************************
FORM prm_open_port USING commport
settings. SET PROPERTY OF o_obj 'CommPort' = commport.
SET PROPERTY OF o_obj 'Settings' = settings.
SET PROPERTY OF o_obj 'InputLen' = .
SET PROPERTY OF o_obj 'PortOpen' = .
ENDFORM. " PRM_OPEN_PORT 读取接口数据:因为接口有缓存所以每次读取时都是去掉前面20次的数据
而且每次读取的数据都是不完整的,所以需要将多次读取的数据连接起来,然后截取
****************************************************************************
FORM prm_read_port CHANGING e_output.
DATA:
wa_buffer TYPE i,
inde TYPE i.
DO TIMES.
inde = inde + .
GET PROPERTY OF o_obj 'InBufferCount' = wa_buffer.
IF wa_buffer > .
GET PROPERTY OF o_obj 'Input' = e_output.
IF inde < .
ELSE.
CONCATENATE balance e_output INTO balance.
ENDIF.
ENDIF.
ENDDO.
CLEAR:wa_buffer,inde.
ENDFORM. " PRM_READ_PORT 往串口写数据,因为没有需求所以没做测试
*********************************************************************
FORM prm_write_port USING i_input
CHANGING e_output.
DATA:
wa_buffer TYPE i.
SET PROPERTY OF o_obj 'Output' = i_input.
DO TIMES.
GET PROPERTY OF o_obj 'InBufferCount' = wa_buffer.
IF wa_buffer > .
GET PROPERTY OF o_obj 'Input' = e_output.
EXIT.
ENDIF.
ENDDO.
ENDFORM. " PRM_WRITE_PORT 读数结束,关闭串口,释放对象,清空变量
************************************************************************
FORM prm_final .
SET PROPERTY OF o_obj 'PortOpen' = .
FREE OBJECT o_obj.
CLEAR o_obj.
COMMIT WORK.
ENDFORM. " PRM_FINAL

对读数做了个简单的处理

FORM PRM_READ_PORT02  CHANGING E_OUTPUT.
DATA:
WA_BUFFER TYPE I,
INDE TYPE I,LV_CHAR TYPE C.
DATA:LV_STR TYPE STRING VALUE '0123456789.'.
DATA:LV_STR2 TYPE STRING.
DATA:LV_STR3 TYPE STRING.
DATA POS TYPE I.
CLEAR:LV_CHAR,LV_STR2,INDE,LV_STR3,POS.
WHILE LV_CHAR IS INITIAL.
GET PROPERTY OF O_OBJ 'InBufferCount' = WA_BUFFER.
IF WA_BUFFER > . GET PROPERTY OF O_OBJ 'Input' = E_OUTPUT.
SEARCH E_OUTPUT FOR '+'.
IF SY-SUBRC = .
POS = SY-FDPOS.
SHIFT E_OUTPUT BY ( POS + ) PLACES.
ELSE.
CONTINUE.
ENDIF. SEARCH E_OUTPUT FOR 'g'.
IF SY-SUBRC = .
POS = SY-FDPOS.
E_OUTPUT = E_OUTPUT+(POS).
CONDENSE E_OUTPUT NO-GAPS.
E_OUTPUT = E_OUTPUT.
ELSE.
CONTINUE.
ENDIF. * SEARCH E_OUTPUT FOR '.'.
* IF SY-SUBRC = 0.
* ELSE.
* CONTINUE.
* ENDIF
*.
CLEAR:LV_STR2.
MOVE E_OUTPUT TO LV_STR2.
IF LV_STR2 CO LV_STR.
* INDE = INDE + 1.
* IF INDE = 1.
* MOVE E_OUTPUT TO LV_STR3.
* ELSEIF INDE = 2.
* CLEAR:INDE.
* IF LV_STR2 = LV_STR3.
LV_CHAR = 'X'.
* ENDIF.
* ENDIF.
ENDIF.
ENDIF.
ENDWHILE.
CLEAR:WA_BUFFER,INDE.
ENDFORM. " PRM_READ_PORT02

以字符流传过来的,在处理的时候,自己看着办了。。。

SAP连接电脑串口读数(电子称,磅等数据读取)的更多相关文章

  1. C#:蓝牙串口读数据和写数据

    首次使用C#编写与COM口有关的程序,期间遇到了很多问题,写下自己的经验总结,如有错漏,欢迎批评指正! 1.新建一个串口类( SerialPort类) //Create a serial port f ...

  2. 手机通过数据线连接电脑后,找不到设备--Android Studio

    手机通过数据线连接电脑后,找不到可用的设备.允许USB调试,,因为小米手机还要设置USB开发者模式. 1.打开设置/关于手机 四次点击“MIUI版本”如图: 2.返回上一页打开更多设置 看到开发者选项 ...

  3. 使用RXTX获取电脑串口

    RXTX是javacomm串口通信的一个扩展 RXTX开发所需文件的下载地址:http://rxtx.qbang.org/wiki/index.php/Download 解压之后可以看到支持各个平台的 ...

  4. 【android】安卓手机连接电脑了,但是adb devices找不到设备及找到设备但无权限的问题

    安卓手机连接电脑的时候,会遇到adb连接失败,adb devices为空,或者连接成功,但是显示unauthorized的情况.遇到这种情况,一般认为是手机驱动安装失败,会选择重新下载安装驱动,如果还 ...

  5. iPhone如何设置自定义铃声?无需连接电脑,轻松几步就搞定!

    转载自: https://baijiahao.baidu.com/s?id=1594988016778457969&wfr=spider&for=pc 受够了iPhone自带的千篇一律 ...

  6. 连接电脑时,无法启用USB调试

    原因: 手机悬浮球 解决方案: 取消悬浮球,停止一切悬浮应用 (下面的废话可以不听) 预置条件: 手机已经打开开发者模式 开启USB调试模式 电脑能检测到手机 故事背景: 经常用手机连接电脑进行adb ...

  7. 手机连接电脑,使用adb命令

    手机连接电脑使用adb命令,主要是有2种方式,其中最常见的就是第一种,用usb连线使用 1:adb usb - restarts the adbd daemon listening on USB ad ...

  8. 真机连接电脑后,adb devices显示为空-解决方案

    真机:小米6x,adb版本 真机连接电脑后,在cmd中输入adb devices,显示为空. 原因是真机没开启开发者选项和USB调试. 解决方案: 手机的[设置]-[我的设备]-[全部参数],多次点击 ...

  9. C#读取Excel文件:通过OleDb连接,把excel文件作为数据源来读取

    转载于:http://developer.51cto.com/art/200908/142392.htm C#读取Excel文件可以通过直接读取和OleDb连接,把excel文件作为数据源来读取:   ...

随机推荐

  1. c# 动态调用.net编写的webservices接口

    创建类WebServiceHelper: public class WebServiceHelper { #region 动态调用WebService动态调用地址 /// < summary&g ...

  2. MySQL Group Replication 技术点

    mysql group replication,组复制,提供了多写(multi-master update)的特性,增强了原有的mysql的高可用架构.mysql group replication基 ...

  3. ping命令脚本实现显示网络状态、学生姓名、学号

    #!/bin/bash a=. ####定义一个固定变量 h=(wanghao xieyunshen 刘桃) ####定义数组 ..} ####for循环,后面的in是条件即从多少循环到多少 do # ...

  4. Unity四元数小问题整理

    1.Unity中,四元数不能保存超过360度的旋转,所以如此大范围的旋转不能直接两个四元数做插值(当你用0度和721度的四元数做插值,它只会转1度,而不会转两圈). 2.要把旋转设置成某个方向,用Lo ...

  5. CentOS 7 最小化安装的无线网络配置

    1.首先下载iw工具. yum -y install iw 2.获取无线网卡的名称 执行iw dev,假设获得名称为 wlp3s0(示例) 3.激活无线网络接口 执行ip link set wlp3s ...

  6. 【intellij idea】Project Structure 讲解

    项目的左侧面板 项目设置->Project Project Settings -> Modules Sources面板 Paths面板 dependencies面板 Project Set ...

  7. python连接mysql的驱动

    对于py2.7的朋友,直接可以用MySQLdb去连接,但是MySQLdb不支持python3.x.这是需要注意的~ 那应该用什么python连接mysql的驱动呢,在stackoverflow上有人解 ...

  8. pandas应用之分组因子暴露和分位数分析

    pandas应用之分组因子暴露和分位数分析 首先感谢原书作者Mes McKinney和batteryhp网友的博文, 俺在此基础上继续探索python的神奇功能. 用A股的实际数据, 以书里的代码为蓝 ...

  9. Spring的注解方式实现AOP

    Spring对AOP的实现提供了很好的支持.下面我们就使用Spring的注解来完成AOP做一个例子. 首先,为了使用Spring的AOP注解功能,必须导入如下几个包.aspectjrt.jar,asp ...

  10. 在web.xml注册applicationContext.xml配置文件

    概要: Spring配置文件是集成了Spring框架的项目的核心,引擎的开始是:容器先是加载web.xml,接着是applicationContext.xml在web.xml里的注册.以下我们将介绍a ...