UI5 JS 读取 COM 口数据

文摘   2024-11-28 06:20   上海  

1业务场景介绍


在UI5自开发页面中获取电子秤的称重数量,电子秤连接电脑COM口,或者通过USB连接电脑。(还可以蓝牙这里不讨论,地磅和SAP GUI 也可以这样获取数据)


2实现方法


使用的是微软的ActiveX控件,JS调用MSCOMM32.dll的串口控件对串口进行控制,过ActiveX控件目前只针对IE浏览器支持较好,所以建议在IE浏览器上就行开发。

ActiveX控件是Microsoft的ActiveX技术的一部分,创建它的主要技术是Microsoft的ActiveX技术,其中主要是组件对象模型(COM),ActiveX控件等价于以前的OLE控件或OCX


3前提条件


3.1插件下载


网上搜索、下载最新版本的MSCOMM32.OCX,解压后将mscomm32.ocx文件,保存至系统目录:

C:\Windows\SysWOW64\MSCOMM32.OCX(64位)

C:\Windows\System32\MSCOMM32.OCX(32位)


3.2注册


以管理员身份运行命令提示符(win+x),执行:

regsvr32 c:\Windows\SysWOW64\mscomm32.ocx(64位)

regsvr32 c:\Windows\ System32\mscomm32.ocx(32位)


3.3修改注册表


打开注册表(开始—>运行,输入命令regedit,打开注册表),在HKEY_CLASSES_ROOT\Licenses右键,新建—>项4250E830-6AC2-11cf-8ADB-00AA00C00905

数值数据:kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun


3.4浏览器设置


在IE浏览器,internet选项中,安全选择项中的Internet和本地Internet自定义安全级别。

有关ActiveX控件的使用设置为启动或者提示。


4借助串口调试助手测试


推荐友善串口调试助手进行测试。

电子称连接电脑后,可在设备管理器中查看连接的是电脑的哪个端口,

再调试助手中设置对应的端口和参数,进行测试:

点击打开,就会接收到称重数据。


5实现过程


5.1代码实现

在view中定义一个输入框和按钮,点击按钮获取电子称上的称重数量。



<Page title="克重">       <content>           <f:Form id="SearchSCDDForm" maxContainerCols="12" editable="true">              <f:layout>                  <f:ResponsiveGridLayout labelSpanL="3"                     labelSpanM="3" emptySpanL="0" emptySpanM="0" columnsL="4"                     columnsM="1" />              </f:layout>              <f:formContainers>                  <f:FormContainer>                     <f:formElements>                         <f:FormElement label="称重数量">                            <f:fields>                                <Input id="Menge" width="8em" />                            </f:fields>                         </f:FormElement>                     </f:formElements>                  </f:FormContainer>                                    <f:FormContainer>                     <f:formElements>                         <f:FormElement>                            <f:fields>                                <Button id="Accept" width="10em" text="获取数量" press="GetData" />                            </f:fields>                         </f:FormElement>                     </f:formElements>                  </f:FormContainer>              </f:formContainers>           </f:Form>       </content>    </Page>


Controller中实现按钮的方法。

GetData: function(evt){//创建MSComm对象    var Menge = this.byId("Menge");    var MSComm1 = new ActiveXObject("MSCOMMLib.MSComm.1");    if (MSComm1.PortOpen == true) {       try {           MSComm1.PortOpen = false;       } catch (ex) {           alert(ex.message);       }    }    MSComm1.RThreshold = 1; // 接收一个字节就触发omcom事件    var inputvalue = "";    for(var com = 1;com<=7;com++){       if (MSComm1.PortOpen == false       {           MSComm1.CommPort = com;           MSComm1.Settings = "9600,o,7,1"           MSComm1.OutBufferCount = 0; // 清空发送缓冲区           MSComm1.InBufferCount = 0; // 滑空接收缓冲区           MSComm1.RThreshold = 1; // 接收一个字节就触发omcom事件           try {              MSComm1.PortOpen = true;           } catch (ex) {           }                               if (MSComm1.PortOpen == true) {              var controller = this;              setTimeout(function() {                  inputvalue = MSComm1.Input;                  if (inputvalue != "") {                  var Arry1 = inputvalue.split("+");                  if(Arry1.length==1){              messages.showText("请先连接电子秤称重");                     return;                  }                  var Arry2 = Arry1[1].split("[ ]");                  var zczsl = parseFloat(Arry2[0]);                  Menge.setValue(zczsl)                  MSComm1.PortOpen = "false";                  }                  }, 100);              }           }          }       } 


代码说明:

首先创建MSComm对象



关闭串口(设置了串口号,波特率,收发缓冲等等,参数是在电子秤端进行设置的,还需将电子秤设置成稳定后自动持续输出),设置完参数,打开串口;for循环的作用是,没法确定数据从哪个端口传出,这里默认7个端口,哪个端口有数据传过来,就接收。


接收电子秤发出的数据,并进行处理;


5.2结果展示


曰天曰地
我要到哪里去↔️ 灵台方寸山,斜月三星洞。假如有一天全人类不存在,怎么证明人类存在过。AI怎么考古?会怎么考古⚠️
 最新文章