使用JS获得串口数据

JavaScript语言通常是一种网页编程语言,比较适合前台的一些应用设计。对于本地设备和数据的操作有比较大的限制。由于项目的需要,我需要获得本机的串口数据并显示在web端。我们有很多中方法实现功能,在实际的操作过程中我测试两种方式获得数据。第一种方法是使用ActiveX控件,JS调用MSCOMM32.dll的串口控件对串口进行控制。第二种方法是使用C#语言的控件对串口进行控制,然后使用JS+AJAX与C#进行交互获得串口数据。

先说说两种方法各自的特点:方法一使用的是微软的ActiveX控件MSCOMM32.dll,该控件可以直接对串口进行操作,而JS也可以通过调用接口进行控制。不过ActiveX控件目前只针对IE浏览器支持较好,我用的是Chrome那就爱莫能助了。方法二目前应该是比较流行的,C#用来做后台控制个人觉得还是很不错的,而AJAX在前后台数据交互方面的作用应该也是有目共睹的。唯一的不足可能就是在数据同步方面可能会稍有延迟,毕竟AJAX是一个异步传输的标准。

首先,我尝试了方法一。实现一个htm文件和一个js文件。关于串口调用的代码很简单,htm文件中的主要工作是添加MSCOMM32.dll控件的调用。

  1. <object classid="clsid:648A5600-2C6E-101B-82B6-000000000014" id="MSComm1" codebase="MSCOMM32.OCX"
  2. type="application/x-oleobject" style="left: 54px; top: 14px">
  3. <param name="CommPort" value="4"><!--设置并返回通讯端口号。-->
  4. <param name="DTREnable" value="1">
  5. <param name="Handshaking" value="0">
  6. <param name="InBufferSize" value="1024">
  7. <param name="InputLen" value="0">
  8. <param name="NullDiscard" value="0">
  9. <param name="OutBufferSize" value="512">
  10. <param name="ParityReplace" value="?">
  11. <param name="RThreshold" value="1">
  12. <param name="RTSEnable" value="1">
  13. <param name="SThreshold" value="2">
  14. <param name="EOFEnable" value="0">
  15. <param name="InputMode" value="0"><!--comInputModeText 0 (缺省) 通过 Input 属性以文本方式取回数据。comInputModeBinary 1  通过 Input 属性以二进制方式检取回数据。-->
  16. <param name="DataBits" value="8">
  17. <param name="StopBits" value="1">
  18. <param name="BaudRate" value="38400">
  19. <param name="Settings" value="38400,N,8,1">
  20. </object>

以上代码主要设置了串口号,波特率,收发缓冲等等(具体使用说明网上有很多)。

而在js文件中则主要实现打开关闭串口,以及收发数据的操作。

  1. function OpenPort()
  2. {
  3. var cmd_send = "";
  4. var result = $('txtReceive').value;
  5. var results = result.split(',');
  6. for(var i=0;i<results.length;i++)
  7. {
  8. cmd_send += String.fromCharCode(eval(results[i]));
  9. }
  10. if(MSComm1.PortOpen==false)
  11. {
  12. MSComm1.PortOpen=true;
  13. MSComm1.Output=cmd_send;//发送命令
  14. }
  15. else
  16. {
  17. window.alert   ("已经开始接收数据!");
  18. }
  19. }
  20. function ClosePort()
  21. {
  22. if(MSComm1.PortOpen==true)
  23. {
  24. MSComm1.PortOpen=false;
  25. }
  26. else
  27. {
  28. window.alert   ("串口已经关闭!");
  29. }
  30. }
  31. function SendMessage()
  32. {
  33. var cmd_send = "";
  34. var result = $('txtReceive').value;
  35. var results = result.split(',');
  36. for(var i=0;i<results.length;i++)
  37. {
  38. cmd_send += String.fromCharCode(eval(results[i]));
  39. }
  40. if(MSComm1.PortOpen==false)
  41. {
  42. window.alert   ("串口已经关闭!!");
  43. }
  44. else
  45. {
  46. MSComm1.Output=cmd_send;//发送命令
  47. }
  48. }

实现之后的效果是这样的:

我们看到的上面的文本框使我发送的指令,而下面的文本框就是我收到的数据。

然后,我使用方法二。使用C#打开串口,使用jQuery的函数和C#进行通讯获取当前的数据(包括当前经纬度,时间日期)。C#的代码如下:

  1. public static void Read()
  2. {
  3. sp = new SerialPort("COM4", 38400, Parity.None, 8, StopBits.One);
  4. sp.Close();
  5. sp.ReadBufferSize = 512;
  6. sp.ReceivedBytesThreshold = 1;
  7. sp.Open();
  8. while (true)
  9. {
  10. try
  11. {
  12. Databuffer += sp.ReadExisting();
  13. }
  14. catch (TimeoutException) { }
  15. }
  16. }

其中sp为串口类SerialPort。打开串口之后调用ReadExisting函数读取串口数据。

JS中获取当前数据的代码如下:

  1. function GPSGetDataTimer() {
  2. Referece = "data";  //获得GPS数据
  3. $.post("GetGPSDataComm.aspx",
  4. { REF: encodeURI(Referece)
  5. },
  6. function (data) {
  7. alert(data);
  8. });
  9. }

我按照一定的频度向GetGPSDataComm.aspx文件发出请求,然后获得当前的数据,并且把字符串显示出来。效果如下图:

下一步我计划在前台将字符串以图形化的方式显示,这样便会更加直观的观测到串口的数据。

asp.net 使用JS获得串口数据的更多相关文章

  1. [转]WEB页获取串口数据

    本文转自:https://www.cnblogs.com/rockyhm/p/3434200.html 最近做一个B/S的项目,需要读取电子秤的值,之前一直没做过,也没有经验,于是在网上找到很多  大 ...

  2. WEB页获取串口数据

    最近做一个B/S的项目,需要读取电子秤的值,之前一直没做过,也没有经验,于是在网上找到很多  大致分两种 使用ActiveX控件,JS调用MSCOMM32.dll的串口控件对串口进行控制 使用C#语言 ...

  3. 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中

    摘自:http://blog.csdn.net/mazhaojuan/article/details/8592015 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来 ...

  4. Jquery zTree结合Asp.net实现异步加载数据

    zTree结合Asp.net实现异步加载数据 实现简单操作 zTree 下载 api 访问 :http://www.ztree.me/v3/main.php 例子中用到json数据转化 newtons ...

  5. 初探原生js根据json数据动态创建table

    初探原生js根据json数据动态创建table 小生以实习生的职位进入了一家非纯软件的公司做asp.net开发,大半个月下来发现公司里居然没有前端工程师,这令我很诧异,跟着公司做项目,发现前端后台没有 ...

  6. ASP.NET+d3.js实现Sqlserver数据库的可视化展示

    效果: 数据库端: 前端展示: 实现原理: 1.在数据段建立两个存储过程 queryUserAnsawer(id) 根据用户ID返回每一题的得分,主要是bcp exe时不能直接在sqlserver中执 ...

  7. 基于MQTT的串口数据转发器

    问: ComHub能做什么?ComHub使用MQTT协议,将串口数据经TCP分发出去.这种结构可以实现很多功能:1.COM-Over-TCP: 将COM数据使用TCP远程传送;2.COM多播:一个CO ...

  8. ASP模拟POST请求异步提交数据的方法

    这篇文章主要介绍了ASP模拟POST请求异步提交数据的方法,本文使用MSXML2.SERVERXMLHTTP.3.0实现POST请求,需要的朋友可以参考下 有时需要获取远程网站的某些信息,而服务器又限 ...

  9. C#SerialPort如何读取串口数据并显示在TextBox上

    SerialPort中串口数据的读取与写入有较大的不同.由于串口不知道数据何时到达,因此有两种方法可以实现串口数据的读取.一.线程实时读串口:二.事件触发方式实现. 由于线程实时读串口的效率不是十分高 ...

随机推荐

  1. 【机器学习算法-python实现】决策树-Decision tree(2) 决策树的实现

    (转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景      接着上一节说,没看到请先看一下上一节关于数据集的划分数据集划分.如今我们得到了每一个特征值得 ...

  2. PostgreSQL SystemTap on Linux 转

    PostgreSQL 支持动态跟踪, 可以通过dtrace或者systemtap工具统计相关探针的信息. 安装systemtap yum install systemtap kernel-debugi ...

  3. Delphi7下使用FastMM4

    1> 将文件Replacement BorlndMM DLL/Precompiled/for Delphi IDE/Performance/BorlndMM.dll,替换掉Delphi/Bin下 ...

  4. JDBC 连Sql Server 接数据库--The TCP/IP connection to the host localhost, port 1433 has failed

    原文:https://blog.csdn.net/qq_39241986/article/details/80848855 这样的错误,你有遇到过吗? The TCP/IP connection to ...

  5. Python脚本报错AttributeError: 'module' object has no attribute 'maketrans'

    出现此错误的原因:是此文件smtp02.py 所在的目录下有string.pyc 的文件存在,与python库里的string.pyc冲突造成无法确认编译所取的类库.

  6. LR杂记-nmon+analyser监控linux系统资源

    1.查看linux具体版本号信息 file /sbin/init 2.下载相应nmon版本号 http://pkgs.repoforge.org/nmon/ 3.安装 rpm -ivh nmon-14 ...

  7. python笔记25-mock-server之moco

    前言 mock除了用在单元测试过程中,还有一个用途,当前端开发在开发页面的时候,需要服务端提供API接口 此时服务端没开发完成,或者说没搭建测试环境,这个时候前端开发会自己mock一个api服务端,自 ...

  8. ldap安装配置过程中遇到的错误,以及解决方法

    错误1: [root@openldap openldap]# ldapsearch -LLL-W -x -H ldap://etiantian.org -D "cn=admin,dc=eti ...

  9. 如何搭建 LNMP环境

    和LAMP不同的是LNMP中的N指的是是Nginx(类似于Apache的一种web服务软件)其他都一样.目前这种环境应用的也是非常之多. Nginx设计的初衷是提供一种快速高效多并发的web服务软件. ...

  10. google protocol buffer的原理和使用(二)

    本文主要会介绍怎么使用Google Protocol的Lib来序列化我们的数据,方法非常多种,本文仅仅介绍当中的三种.其它的方法读者能够通过自行研究摸索.但总的来说,序列化数据总的来说分为下面俩步: ...