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

这是一个电脑读称的方法,一般用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. Safari浏览器中对js Date对象的支持

    看了一下自己上一次写博客还是3月份,那是还没有毕业,实习也没那么多事情,毕业设计也才刚开始做,那时天天晚上都把电脑带回家继续学习,而现在一工作忙为借口已经不怎么进行什么知识总结了,只是在印象笔记里做做 ...

  2. C++中 OOP相关的类型转换

    我们都知道,在C++中有很多类型转换.今天在这里,我们不讨论普通变量的类型转换(比如int转换成double等等).本文主要讨论面向对象相关的类型转换:向上转换和向下转换. 首先,我们定义一个基类Ba ...

  3. Java,double类型转换成String,String装换成double型

    今天,老师布置了小系统,银行用户管理系统,突然发现自己的基础知识好薄弱,就把这些记录一下, double类型转化string:Double.toString(double doub); String类 ...

  4. 【前端】require函数实现原理

    // require函数实现原理: function require(modulePath) { var regExp = /\w+$/g; var moduleName = regExp.exec( ...

  5. Cheatsheet: 2016 04.01 ~ 04.30

    .NET String format Setting up Ubuntu for .NET Development ASP.​NET Core and Angular2 - Part 1 - Upda ...

  6. Upload Files To FTP in Oracle Forms D2k

    Upload Files To FTP in Oracle Forms D2k Use following procedure to upload files to Ftp.   PROCEDURE ...

  7. Selenium碰到的异常记录

    .markdown-preview:not([data-use-github-style]) { padding: 2em; font-size: 1.2em; color: rgb(171, 178 ...

  8. nginx 日志变量含义

    log_format logstash "remote_addr | $time_local | $request | $status | $body_bytes_sent | " ...

  9. SQLServer语句执行效率及性能测试

    写程序的人,往往需要分析所写的SQL语句是否已经优化过了,服务器的响应时间有多快,这个时候就需要用到SQL的STATISTICS状态值来查看了. 通过设置STATISTICS我们可以查看执行SQL时的 ...

  10. [poj1679]The Unique MST(最小生成树)

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 28207   Accepted: 10073 ...