SAP连接电脑串口读数(电子称,磅等数据读取)
这是几年前做的了,一直都不想分享出来,后来想想为了能够给大家点想法,献出来了。。。
这是一个电脑读称的方法,一般用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连接电脑串口读数(电子称,磅等数据读取)的更多相关文章
- C#:蓝牙串口读数据和写数据
首次使用C#编写与COM口有关的程序,期间遇到了很多问题,写下自己的经验总结,如有错漏,欢迎批评指正! 1.新建一个串口类( SerialPort类) //Create a serial port f ...
- 手机通过数据线连接电脑后,找不到设备--Android Studio
手机通过数据线连接电脑后,找不到可用的设备.允许USB调试,,因为小米手机还要设置USB开发者模式. 1.打开设置/关于手机 四次点击“MIUI版本”如图: 2.返回上一页打开更多设置 看到开发者选项 ...
- 使用RXTX获取电脑串口
RXTX是javacomm串口通信的一个扩展 RXTX开发所需文件的下载地址:http://rxtx.qbang.org/wiki/index.php/Download 解压之后可以看到支持各个平台的 ...
- 【android】安卓手机连接电脑了,但是adb devices找不到设备及找到设备但无权限的问题
安卓手机连接电脑的时候,会遇到adb连接失败,adb devices为空,或者连接成功,但是显示unauthorized的情况.遇到这种情况,一般认为是手机驱动安装失败,会选择重新下载安装驱动,如果还 ...
- iPhone如何设置自定义铃声?无需连接电脑,轻松几步就搞定!
转载自: https://baijiahao.baidu.com/s?id=1594988016778457969&wfr=spider&for=pc 受够了iPhone自带的千篇一律 ...
- 连接电脑时,无法启用USB调试
原因: 手机悬浮球 解决方案: 取消悬浮球,停止一切悬浮应用 (下面的废话可以不听) 预置条件: 手机已经打开开发者模式 开启USB调试模式 电脑能检测到手机 故事背景: 经常用手机连接电脑进行adb ...
- 手机连接电脑,使用adb命令
手机连接电脑使用adb命令,主要是有2种方式,其中最常见的就是第一种,用usb连线使用 1:adb usb - restarts the adbd daemon listening on USB ad ...
- 真机连接电脑后,adb devices显示为空-解决方案
真机:小米6x,adb版本 真机连接电脑后,在cmd中输入adb devices,显示为空. 原因是真机没开启开发者选项和USB调试. 解决方案: 手机的[设置]-[我的设备]-[全部参数],多次点击 ...
- C#读取Excel文件:通过OleDb连接,把excel文件作为数据源来读取
转载于:http://developer.51cto.com/art/200908/142392.htm C#读取Excel文件可以通过直接读取和OleDb连接,把excel文件作为数据源来读取: ...
随机推荐
- JS弹出浮层
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- gulp编译sass
前言:前段时间学习了sass语法,但是一直用的是"考拉"这个软件工具将我写的sass代码编译成css,然后再引用到项目里面去的,随着对sass的更加深入的了解,我开始尝试着将sas ...
- css新笔记
这里的黑科技其实就是一些CSS中不怎么为人所知但在解决某些问题的时候很溜的属性. border-radius 很多开发者估计都没有正确认识这个border-radius,因为基本上很多人都是这么用的: ...
- Photoshop学习笔记(待续)
1. 界面设置 新建 设置 自动选择快捷键:单击时按住cmd 标尺和智能参考线 右侧的四大面板 单位与标尺 保存工作区 其他 每一种颜色模式对应一种媒介 HSB(色相.饱和度.亮度) => 人眼 ...
- 一看便知_配置linux 网络配置的几种方法
一. - setup 进入设置 - /etc/rc.d/init.d/network restart 运行完才会生效刚才的修改 二.命令设置 [临时生效]- i ...
- MySQL5.0+提示字段没有默认值(doesn’t have a default value)的解决方法
方法一: 打开my.ini,查找 sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION” 修改为 sql ...
- JavaScript 中的对象
JavaScript 中的对象 在 JavaScript 中,对象是数据(变量),拥有属性和方法. JavaScript 中的所有事物都是对象:字符串.数字.数组.日期,等等. 访问对象的属性 访 ...
- JS存取Cookie值
一:存Cookie //存Cookie document.cookie = "id=" + escape(value); 二:取Cookie //提取Cookie值 functio ...
- Mac 使用技巧
1.快捷键(Mac 键盘快捷键https://support.apple.com/zh-cn/HT201236) Command-Shift-Z:重做,也就是撤销(Command-Z)的逆向操作 Co ...
- kali更新源
原文链接:http://www.cnblogs.com/dunitian/p/4712852.html kali2.0官方下载地址: https://www.kali.org/downloads/ 可 ...