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

这是一个电脑读称的方法,一般用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 对象名

类型信息键值

包含程序

语言

检查权限

文本

  1. FUNCTION z_bc_get_balance.
  2. *"----------------------------------------------------------------------
  3. *"*"本地接口:
  4. *" IMPORTING
  5. *" REFERENCE(MODE) TYPE I DEFAULT 0
  6. *" REFERENCE(COMMPORT) TYPE I DEFAULT 1
  7. *" VALUE(SETTINGS) TYPE C DEFAULT '1200,N,8,1'
  8. *" REFERENCE(I_INPUT) TYPE C OPTIONAL
  9. *" EXPORTING
  10. *" REFERENCE(E_OUTPUT) TYPE C
  11. *" EXCEPTIONS
  12. *" NO_CREATE_OBJECT
  13. *"----------------------------------------------------------------------
  14.  
  15. TYPE-POOLS:sabc.
  16. INCLUDE ole2incl.
  17. DATA pos TYPE i.
  18. CLEAR: pos,balance,value,e_output.
  19. PERFORM prm_get_settings CHANGING settings.
  20. * WAIT UP TO 3 SECONDS.
  21. PERFORM prm_init.
  22. PERFORM prm_open_port USING commport settings.
  23. IF mode = ."读取串口数据
  24. PERFORM prm_read_port CHANGING e_output.
  25. ELSEIF mode = ."写串口数据
  26. PERFORM prm_write_port USING i_input CHANGING e_output.
  27. ENDIF.
  28. PERFORM prm_final.
  29. SEARCH balance FOR '+'.
  30. IF sy-subrc = .
  31. pos = sy-fdpos.
  32. SHIFT balance BY ( pos + ) PLACES.
  33. ENDIF.
  34. SEARCH balance FOR 'g'.
  35. IF sy-subrc = .
  36. pos = sy-fdpos.
  37. balance = balance+(pos).
  38. CONDENSE balance NO-GAPS.
  39. e_output = balance.
  40. ENDIF.
  41. COMMIT WORK
  42. ENDFUNCTION.
  43.  
  44. 此块为配置接口类型模块(自建表用IP地址来配置相应的comm口参数)
  45. *****************************************************************************
  46. FORM prm_get_settings CHANGING p_settings.
  47. DATA addr TYPE ni_nodeaddr.
  48. CLEAR addr.
  49. CALL FUNCTION 'TH_USER_INFO'
  50. IMPORTING
  51. addrstr = addr.
  52. SELECT SINGLE setting INTO p_settings FROM zbctaddr WHERE addr = addr.
  53. IF sy-subrc = .
  54. CLEAR addr.
  55. ENDIF.
  56. ENDFORM. " PRM_GET_SETTINGS
  57.  
  58. 初始化接口对象
  59. ******************************************************************************
  60. FORM prm_init .
  61. DATA:
  62. wa_repid LIKE sy-repid.
  63. CLEAR wa_repid.
  64. wa_repid = sy-repid.
  65. CALL FUNCTION 'AUTHORITY_CHECK_OLE'
  66. EXPORTING
  67. program = wa_repid
  68. activity = sabc_act_call
  69. application = 'MSCOMMLIB.MSCOMM.1'
  70. EXCEPTIONS
  71. no_authority =
  72. activity_unknown =
  73. OTHERS = .
  74. IF sy-subrc <> .
  75. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  76. WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  77. ENDIF.
  78. CREATE OBJECT o_obj 'MSCOMMLib.MSComm.1'.
  79. IF sy-subrc <> .
  80. RAISE no_create_object.
  81. ENDIF.
  82. ENDFORM. " PRM_INIT
  83.  
  84. 接口打开
  85. ***************************************************************************
  86. FORM prm_open_port USING commport
  87. settings.
  88.  
  89. SET PROPERTY OF o_obj 'CommPort' = commport.
  90. SET PROPERTY OF o_obj 'Settings' = settings.
  91. SET PROPERTY OF o_obj 'InputLen' = .
  92. SET PROPERTY OF o_obj 'PortOpen' = .
  93. ENDFORM. " PRM_OPEN_PORT
  94.  
  95. 读取接口数据:因为接口有缓存所以每次读取时都是去掉前面20次的数据
  96. 而且每次读取的数据都是不完整的,所以需要将多次读取的数据连接起来,然后截取
  97. ****************************************************************************
  98. FORM prm_read_port CHANGING e_output.
  99. DATA:
  100. wa_buffer TYPE i,
  101. inde TYPE i.
  102. DO TIMES.
  103. inde = inde + .
  104. GET PROPERTY OF o_obj 'InBufferCount' = wa_buffer.
  105. IF wa_buffer > .
  106. GET PROPERTY OF o_obj 'Input' = e_output.
  107. IF inde < .
  108. ELSE.
  109. CONCATENATE balance e_output INTO balance.
  110. ENDIF.
  111. ENDIF.
  112. ENDDO.
  113. CLEAR:wa_buffer,inde.
  114. ENDFORM. " PRM_READ_PORT
  115.  
  116. 往串口写数据,因为没有需求所以没做测试
  117. *********************************************************************
  118. FORM prm_write_port USING i_input
  119. CHANGING e_output.
  120. DATA:
  121. wa_buffer TYPE i.
  122. SET PROPERTY OF o_obj 'Output' = i_input.
  123. DO TIMES.
  124. GET PROPERTY OF o_obj 'InBufferCount' = wa_buffer.
  125. IF wa_buffer > .
  126. GET PROPERTY OF o_obj 'Input' = e_output.
  127. EXIT.
  128. ENDIF.
  129. ENDDO.
  130. ENDFORM. " PRM_WRITE_PORT
  131.  
  132. 读数结束,关闭串口,释放对象,清空变量
  133. ************************************************************************
  134. FORM prm_final .
  135. SET PROPERTY OF o_obj 'PortOpen' = .
  136. FREE OBJECT o_obj.
  137. CLEAR o_obj.
  138. COMMIT WORK.
  139. ENDFORM. " PRM_FINAL

对读数做了个简单的处理

  1. FORM PRM_READ_PORT02 CHANGING E_OUTPUT.
  2. DATA:
  3. WA_BUFFER TYPE I,
  4. INDE TYPE I,LV_CHAR TYPE C.
  5. DATA:LV_STR TYPE STRING VALUE '0123456789.'.
  6. DATA:LV_STR2 TYPE STRING.
  7. DATA:LV_STR3 TYPE STRING.
  8. DATA POS TYPE I.
  9. CLEAR:LV_CHAR,LV_STR2,INDE,LV_STR3,POS.
  10. WHILE LV_CHAR IS INITIAL.
  11. GET PROPERTY OF O_OBJ 'InBufferCount' = WA_BUFFER.
  12. IF WA_BUFFER > .
  13.  
  14. GET PROPERTY OF O_OBJ 'Input' = E_OUTPUT.
  15. SEARCH E_OUTPUT FOR '+'.
  16. IF SY-SUBRC = .
  17. POS = SY-FDPOS.
  18. SHIFT E_OUTPUT BY ( POS + ) PLACES.
  19. ELSE.
  20. CONTINUE.
  21. ENDIF.
  22.  
  23. SEARCH E_OUTPUT FOR 'g'.
  24. IF SY-SUBRC = .
  25. POS = SY-FDPOS.
  26. E_OUTPUT = E_OUTPUT+(POS).
  27. CONDENSE E_OUTPUT NO-GAPS.
  28. E_OUTPUT = E_OUTPUT.
  29. ELSE.
  30. CONTINUE.
  31. ENDIF.
  32.  
  33. * SEARCH E_OUTPUT FOR '.'.
  34. * IF SY-SUBRC = 0.
  35. * ELSE.
  36. * CONTINUE.
  37. * ENDIF
  38. *.
  39. CLEAR:LV_STR2.
  40. MOVE E_OUTPUT TO LV_STR2.
  41. IF LV_STR2 CO LV_STR.
  42. * INDE = INDE + 1.
  43. * IF INDE = 1.
  44. * MOVE E_OUTPUT TO LV_STR3.
  45. * ELSEIF INDE = 2.
  46. * CLEAR:INDE.
  47. * IF LV_STR2 = LV_STR3.
  48. LV_CHAR = 'X'.
  49. * ENDIF.
  50. * ENDIF.
  51. ENDIF.
  52. ENDIF.
  53. ENDWHILE.
  54. CLEAR:WA_BUFFER,INDE.
  55. 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. Dell DRAC的重启方法

    SSH 22连接后:racadm racreset

  2. C语言共用体(Union)

    通过前面的讲解,我们知道结构体(Struct)是一种构造类型或复杂类型,它可以包含多个类型不同的成员.在C语言中,还有另外一种和结构体非常类似的语法,叫做共用体(Union),它的定义格式为: uni ...

  3. 通过GCC编译器编译c语言

    GCC编译C源代码的四个步骤 GCC编译C源代码有四个步骤:预处理---->编译---->汇编---->链接. 可以利用GCC的参数来控制执行的过程,这样就可以更深入的了解编译C程序 ...

  4. easyui DataGrid 工具类之 util js

    var jq;                var tab;                var tabsIndex;                                /**     ...

  5. 20161014001 DataGridView 单元格内容 自动计算

    private void T_Form_CY_CBD_D_CellValueChanged(object sender, DataGridViewCellEventArgs e)        {   ...

  6. java如何修改java.library.path并且不重启jvm也能生效

    先说一下需求吧, 目前在用JCEF实现java程序桌面版包装,源码中需要加载编译好的几个dll文件,而这些文件的路径必然是根据程序安装的路径而变化的,这就需要在程序运行的时候,去动态修改java.li ...

  7. mkforsela

    -- #!/bin/bash #sela.gao # #History: # .根据每行查找出来的结果push进去手机 #result: # :没有编译生成文件 # :没有设置编译环境 echoMsg ...

  8. python 学习笔记十五 django基础

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  9. jquery 设置页面元素不可点击、不可编辑、只读(备忘)

    $("input").attr('readonly', true); $("textarea").attr('readonly', true); $(':rad ...

  10. 长时间停留在calculating requirements and dependencies 解决方案

    如果Eclipse花费了很长的时间calculating requirements and dependencies(计算需求和依赖性 ) 这个问题通常就是在点击安装之后显示“Calculating ...