asp.net 使用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控件的调用。
- <object classid="clsid:648A5600-2C6E-101B-82B6-000000000014" id="MSComm1" codebase="MSCOMM32.OCX"
- type="application/x-oleobject" style="left: 54px; top: 14px">
- <param name="CommPort" value="4"><!--设置并返回通讯端口号。-->
- <param name="DTREnable" value="1">
- <param name="Handshaking" value="0">
- <param name="InBufferSize" value="1024">
- <param name="InputLen" value="0">
- <param name="NullDiscard" value="0">
- <param name="OutBufferSize" value="512">
- <param name="ParityReplace" value="?">
- <param name="RThreshold" value="1">
- <param name="RTSEnable" value="1">
- <param name="SThreshold" value="2">
- <param name="EOFEnable" value="0">
- <param name="InputMode" value="0"><!--comInputModeText 0 (缺省) 通过 Input 属性以文本方式取回数据。comInputModeBinary 1 通过 Input 属性以二进制方式检取回数据。-->
- <param name="DataBits" value="8">
- <param name="StopBits" value="1">
- <param name="BaudRate" value="38400">
- <param name="Settings" value="38400,N,8,1">
- </object>
以上代码主要设置了串口号,波特率,收发缓冲等等(具体使用说明网上有很多)。
而在js文件中则主要实现打开关闭串口,以及收发数据的操作。
- function OpenPort()
- {
- var cmd_send = "";
- var result = $('txtReceive').value;
- var results = result.split(',');
- for(var i=0;i<results.length;i++)
- {
- cmd_send += String.fromCharCode(eval(results[i]));
- }
- if(MSComm1.PortOpen==false)
- {
- MSComm1.PortOpen=true;
- MSComm1.Output=cmd_send;//发送命令
- }
- else
- {
- window.alert ("已经开始接收数据!");
- }
- }
- function ClosePort()
- {
- if(MSComm1.PortOpen==true)
- {
- MSComm1.PortOpen=false;
- }
- else
- {
- window.alert ("串口已经关闭!");
- }
- }
- function SendMessage()
- {
- var cmd_send = "";
- var result = $('txtReceive').value;
- var results = result.split(',');
- for(var i=0;i<results.length;i++)
- {
- cmd_send += String.fromCharCode(eval(results[i]));
- }
- if(MSComm1.PortOpen==false)
- {
- window.alert ("串口已经关闭!!");
- }
- else
- {
- MSComm1.Output=cmd_send;//发送命令
- }
- }
实现之后的效果是这样的:
我们看到的上面的文本框使我发送的指令,而下面的文本框就是我收到的数据。
然后,我使用方法二。使用C#打开串口,使用jQuery的函数和C#进行通讯获取当前的数据(包括当前经纬度,时间日期)。C#的代码如下:
- public static void Read()
- {
- sp = new SerialPort("COM4", 38400, Parity.None, 8, StopBits.One);
- sp.Close();
- sp.ReadBufferSize = 512;
- sp.ReceivedBytesThreshold = 1;
- sp.Open();
- while (true)
- {
- try
- {
- Databuffer += sp.ReadExisting();
- }
- catch (TimeoutException) { }
- }
- }
其中sp为串口类SerialPort。打开串口之后调用ReadExisting函数读取串口数据。
JS中获取当前数据的代码如下:
- function GPSGetDataTimer() {
- Referece = "data"; //获得GPS数据
- $.post("GetGPSDataComm.aspx",
- { REF: encodeURI(Referece)
- },
- function (data) {
- alert(data);
- });
- }
我按照一定的频度向GetGPSDataComm.aspx文件发出请求,然后获得当前的数据,并且把字符串显示出来。效果如下图:

下一步我计划在前台将字符串以图形化的方式显示,这样便会更加直观的观测到串口的数据。
asp.net 使用JS获得串口数据的更多相关文章
- [转]WEB页获取串口数据
本文转自:https://www.cnblogs.com/rockyhm/p/3434200.html 最近做一个B/S的项目,需要读取电子秤的值,之前一直没做过,也没有经验,于是在网上找到很多 大 ...
- WEB页获取串口数据
最近做一个B/S的项目,需要读取电子秤的值,之前一直没做过,也没有经验,于是在网上找到很多 大致分两种 使用ActiveX控件,JS调用MSCOMM32.dll的串口控件对串口进行控制 使用C#语言 ...
- 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中
摘自:http://blog.csdn.net/mazhaojuan/article/details/8592015 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来 ...
- Jquery zTree结合Asp.net实现异步加载数据
zTree结合Asp.net实现异步加载数据 实现简单操作 zTree 下载 api 访问 :http://www.ztree.me/v3/main.php 例子中用到json数据转化 newtons ...
- 初探原生js根据json数据动态创建table
初探原生js根据json数据动态创建table 小生以实习生的职位进入了一家非纯软件的公司做asp.net开发,大半个月下来发现公司里居然没有前端工程师,这令我很诧异,跟着公司做项目,发现前端后台没有 ...
- ASP.NET+d3.js实现Sqlserver数据库的可视化展示
效果: 数据库端: 前端展示: 实现原理: 1.在数据段建立两个存储过程 queryUserAnsawer(id) 根据用户ID返回每一题的得分,主要是bcp exe时不能直接在sqlserver中执 ...
- 基于MQTT的串口数据转发器
问: ComHub能做什么?ComHub使用MQTT协议,将串口数据经TCP分发出去.这种结构可以实现很多功能:1.COM-Over-TCP: 将COM数据使用TCP远程传送;2.COM多播:一个CO ...
- ASP模拟POST请求异步提交数据的方法
这篇文章主要介绍了ASP模拟POST请求异步提交数据的方法,本文使用MSXML2.SERVERXMLHTTP.3.0实现POST请求,需要的朋友可以参考下 有时需要获取远程网站的某些信息,而服务器又限 ...
- C#SerialPort如何读取串口数据并显示在TextBox上
SerialPort中串口数据的读取与写入有较大的不同.由于串口不知道数据何时到达,因此有两种方法可以实现串口数据的读取.一.线程实时读串口:二.事件触发方式实现. 由于线程实时读串口的效率不是十分高 ...
随机推荐
- service redis does not support chkconfig 的解决办法
问题解决办法如下: 必须把下面两行注释放在/etc/init.d/redis文件靠前的注释中(加入以下注释): # chkconfig: # description: Redis is a persi ...
- 怎样用Java代码来把SSL的证书自己主动导入到Java的秘钥存储文件(keystore)
我们在开发或者使用SSL的过程中,非常多的软件须要我们提供java的keystore.特别是一些基于Java的中间件产品. 我们常规的做法是JDK自带的工具命令(keytool)去做.比方,以下的样例 ...
- codeforces 558B Amr and The Large Array-yy
题意:有一个数组.如今要削减它的尺寸.数组中同样元素的个数的最大值为数组的魅力值,要求削减后魅力值不能降低,同一时候要尽可能的把尺寸减到最小 分析:水题,主要是不要想复杂了.还有就是沉下心来做 代码: ...
- Android 手电筒源代码
近期因为公司须要,做了一个手电筒,事实上手电筒原理非常easy,就是调用照相机的闪光灯,控制闪光灯的开关,就能够实现手电筒的效果, 强调一下,代码中一定要注意在结束的时候对闪光灯进行释放,否则就会导致 ...
- CLR基础,CLR运行过程,使用dos命令创建、编译、运行C#文件,查看IL代码
CLR是Common Language Runtime的缩写,是.NET程序集或可执行程序运行的一个虚拟环境.CLR用于管理托管代码,但是它本身是由非托管代码编写的,并不是一个包含了托管代码的程序集, ...
- zookeeper原理及功能介绍(转)
本文转自https://www.cnblogs.com/onetwo/p/6420062.html 1.ZooKeeper是什么? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务, ...
- arcgis runtime 100 Create geometries
1 /* Copyright 2016 EsriEsri 2 * 3 * Licensed under the Apache License, Version 2.0 (the "Licen ...
- ie不支持max-height的解决之法
.div{ max-height: 100px; _height:expression(this.scrollHeight > 100 ? "100px" : "a ...
- iOS Sprite Kit最新特性Physics Field虚拟物理场Swift測试
在WWDC2014上,Sprite Kit又有了非常多新的提升! 当中一个非常有意思的东西就是Physics Field!也就是物理场! 这意味着我们在Sprite kit上编写虚拟物理场的游戏将变得 ...
- CASpringAnimation的使用
CASpringAnimation的使用 效果 源码 https://github.com/YouXianMing/Animations // // CASpringAnimationControll ...