当前位置: 首页 > 编程日记 > 正文

C#版及nodejs版的com端口监听程序

感受:

写监听程序的感受:原来有些事情并不是想象的那么难,难和简单就只在一个点上,一个点突破了,后面就豁然开朗了。所以有些问题,不能死闷,要先思考,然后查资料,然后问有经验的人。

最近写一个com端口监听程序,去读卡id,然后做相应的动作,写了两个版本的,一个是nodejs版本的,一个是C#版本的,两种语言都没有用过,通过一个上午的现学现卖,写出了一个初稿。程序写好了,发现只能读取部分卡的数据,并且读取的数据不是自己想要的,后来找了厂商的人,原来他们的波特率和我设置的不同,导致数据读取不同。这种问题果然要提前要一下各种硬件厂商的说明书,了解了他们的通信协议才能方便编程。

下面给出nodejs版和c#版的com端口监听程序。

node版:

var SerialPort = require("serialport").SerialPort;  //引入模块
var SlowBuffer = require('buffer').SlowBuffer;
var portName = 'COM3'; //定义串口名
var serialPort = new SerialPort("COM3", {baudRate: 115200,  //波特率dataBits: 8,    //数据位parity: 'none',   //奇偶校验stopBits: 1,   //停止位flowControl: false 
}, false); 
serialPort.open(function(error){ if(error){ console.log("打开端口"+portName+"错误:"+error);}else{  console.log("打开端口成功,正在监听数据中");serialPort.on('data',function(data){console.log(data);console.log(data.length);console.log(data[0]);console.log(Buffer.isBuffer(data));});serialPort.write("ls\n",function(err,results){console.log('err:'+err);console.log('results:'+results);});}
});

C#版

using System; //using 关键字的作用是导入命名空间
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Ports;namespace MyFirstApp  // namespace 命名空间
{public class SerialTest{//串口对象private SerialPort _Comm = null;//串口控件初始化public void Init(){_Comm = new SerialPort("COM3");//串口参数设定_Comm.BaudRate = 115200;_Comm.Parity = Parity.None; //Parity为C#预定义枚举型变量_Comm.DataBits = 8;_Comm.StopBits = StopBits.One; //StopBits为C#预定义的枚举量_Comm.Handshake = Handshake.None;_Comm.RtsEnable = true;_Comm.ReadBufferSize = 1024;_Comm.WriteBufferSize = 512;_Comm.DtrEnable = true;//为控件添加事件处理函数 _Comm.DataReceived +=new SerialDataReceivedEventHandler(CommDataReceived);_Comm.ReceivedBytesThreshold = 1;_Comm.Open();Console.WriteLine("Press any key to continue...");Console.WriteLine();Console.ReadKey();}//串口数据处理函数public void CommDataReceived(Object sender, SerialDataReceivedEventArgs e){//Comm.BytesToRead中为要读入的字节长度int len = _Comm.BytesToRead;Console.WriteLine("len:"+len);Byte[] readBuffer = new Byte[len];_Comm.Read(readBuffer, 0, len); //将数据读入缓存//处理readBuffer中的数据foreach (Byte b in readBuffer){Console.WriteLine("读到数据:"+b);}}public void Stop(){_Comm.Close();}static void Main(string[] args) // Main方法,程序入口  {SerialTest test = new SerialTest();test.Init();}  }}

注意,一定注意参数的设置,有时候读取不到数据,很可能是参数设置的问题,比如BaudRate(波特率)最开始我设置为9600,死活读不到数据。后来联系厂商,那边通信是115200波特率,这才解决。

相关文章:

C++各大有名库的介绍之C++标准库

C各大有名库的介绍之C标准库标准库中提供了C程序的基本设施。虽然C标准库随着C标准折腾了许多年,直到标准的出台才正式定型,但是在标准库的实现上却很令人欣慰得看到多种实现,并且已被实践证明为有工业级别强度的佳作。1、Dinkumware C Libra…

自己动手——实现 Dustjs 中间件

Dustjs是我个人比较喜欢的一个JS模版引擎,原因有两个,一是,同时支持客户端和服务端渲染,模版编译成JS后使用,性能好;二是,有大公司的支持,Linkedin有专门的Dustjs版本(本…

如何利用离散Hopfield神经网络进行高校科研能力评价(2)

如何利用离散Hopfield神经网络进行高校科研能力评价,应用部分

yyyy-MM-dd HH:mm:ss和yyyy-MM-dd hh:mm:ss

做项目,需要24小时制式的时间,误用了yyyy-MM-dd hh:mm:ss,导致出现一个很难发现的bug,现记录下,方便以后查阅。 yyyy-MM-dd hh:mm:ss 12小时制 yyyy-MM-dd HH:mm:ss 24小时制

Asp.Net开发架构设计(二)

上回说到,我们配置了一下UnityConfig层,在这个层中定义了一个IContainerAccessor的接口和一个返回IUnityContainer类型的方法,这个方法的主要作用就是把Service层中的接口类和Business层中的接口实现类装配到UnityContainer中并返回&#xff…

Matlab与线性代数 -- 稀疏矩阵的创建

本文详细介绍了在Matlab中创建稀疏矩阵的三种方法。

uva 10491 Cows and Cars

https://vjudge.net/problem/UVA-10491 题意: a头牛,b辆车,每扇门后面都有一头牛或一辆车 开始选手选择一扇门 然后主持人打开c扇有牛的门(选中的除外) 然后选手换一扇门 问最后选手选的门后面是车的概率 开始选牛的概…

ssh免密码登录的原理

工作第一天,就需要登录各种服务器,免密码登录无疑能大大的提高工作效率。以前只知道配置,今天了解了下原理。 免密码登录原理 图解,server A免登录到server B: 1.在A上生成公钥私钥。 2.将公钥拷贝给server B,要重命…

mysql-cluster 安装配置

mysql-cluster免编译包下载:https://dev.mysql.com/downloads/file/?id469881 新版本支持只把索引和用到的数据加载到内存,而不是老版本的整个数据库都得加到内存中wget https://cdn.mysql.com//Downloads/MySQL-Cluster-7.5/mysql-cluster-gpl-7.5.6-l…

ExtJs学习笔记(5)_Ajax示例

ExtJs对于Ajax的使用非常简单&#xff0c;看下面的代码: 1.Html页&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.o…

Matlab与线性代数 -- 稀疏矩阵的图形显示

本文详细说明了Matlab中稀疏矩阵可视化的过程。

浏览器及时感知服务端数据变化的方式

需求 在公司&#xff0c;有一个需求&#xff0c;是浏览器实时获取服务端数据变化&#xff0c;然后根据变化做相应的动作。需求场景如下&#xff1a;手机端扫描二维码&#xff0c;然后获取待取件订单列表&#xff0c;点击取件&#xff0c;进行取件&#xff0c;同时远端打印机打…

拥抱Node.js 8.0,N-API入门极简例子

本文摘录自《Nodejs学习笔记》&#xff0c;更多章节及更新&#xff0c;请访问 github主页地址。欢迎加群交流&#xff0c;群号 197339705。 N-API简介 Node.js 8.0 在2017年6月份发布&#xff0c;升级的特性中&#xff0c;包含了N-API。编写过或者使用过 node扩展的同学&#x…

什么是标记符控制的分水岭算法

本文首先指出传统分水岭算法的不足&#xff0c;然后介绍了标记符控制的分水岭算法&#xff0c;最后通过实例演示了该算法在图像分割中的应用。该微信图文由安晟提供。

.NE 后退刷新验证码

Response.Buffer true; Response.Expires -1; Response.ExpiresAbsolute DateTime.Now.AddDays(-1); Response.Expires0; Response.CacheControl "no-cache"; 转载于:https://www.cnblogs.com/lmjob/archive/2008/09/01/128096…

intellij打开工程在每个java文件上有个红色的无效符的解决办法

说明该类不是可编译文件。在project Structure中&#xff08;快捷键ctrlaltshifts&#xff09;选Modules将你带红圈的文件添加上&#xff0c;将你带红圈的文件夹设为Sources。一般是src文件夹&#xff0c;点Sources文件夹&#xff0c;然后点击OK。设置为可编译文件再去工程中看…

[zt] petshop4.0 详解之三

三、PetShop数据访问层之消息处理在进行系统设计时&#xff0c;除了对安全、事务等问题给与足够的重视外&#xff0c;性能也是一个不可避免的问题所在&#xff0c;尤其是一个B/S结构的软件系统&#xff0c;必须充分地考虑访问量、数据流量、服务器负荷的问题。解决性能的瓶颈&a…

windows下Bullet 2.82编译安装(Bullet Physics开发环境配置)

平台&#xff1a;Win7&#xff0c;VS2010 1. Bullet库的组织 下图是Bullet_User_Manual中的截图&#xff1a; 从中可见&#xff0c;Bullet的LinearMath&#xff08;线性数学模块&#xff09;&#xff0c;其上是BulletCollision&#xff08;碰撞检测模块&#xff09;&#xff0c…

Matlab与线性代数 -- 寻找矩阵的非零元素

本微信图文详细介绍了Matlab中find函数的用法。

java重新回顾

很不幸&#xff0c;自己的移动硬盘坏掉了&#xff0c;之前自己所做的学习笔记都没了&#xff0c;大概有300多篇&#xff0c;是大学学习java的时候整理复习的&#xff0c;这样的损失是巨大的&#xff0c;这将花费我更多的时间重新去整理&#xff0c;但是事实已经是这样的了。 基…

BestCoder 1st Anniversary ($) 1002.Hidden String

Hidden String Accepts: 437 Submissions: 2174 Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 262144/262144 K (Java/Others)问题描写叙述今天是BestCoder一周年纪念日. 比赛管理员Soda有一个长度为n的字符串s. 他想要知道是否能找到s的三个互不相交的子串s[l1..r1],…

动态生成GridView时,加入DataKeyNames属性,回调时出错解决方法

早上看到有位同学问关于自动生成GridVie并且添加DataKeyNames属性后 回调页面时&#xff0c;出现错误异常.下面是我实现的方法。注意一点。就是数据绑定的时间。 要是先绑定&#xff0c;再添加到div1中&#xff0c;回调页面时&#xff0c;就会出错。 页面代码&#xff1a; <…

如何制作风格迁移图?

本微信图文介绍了实现风格迁移图的基本原理并在此基础上制作了效果展示图。

leetcode--链表的设计--python

leetcode--链表的设计--python题目题目详情示例提示解题代码代码运行结果体会题目 设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性&#xff1a;val 和 next。val 是当前节点的值&#xff0c;next 是指向下一个节点的指针/引用。如果要使用双向…

从空间数据库中删除所有拓扑对象

/// <summary> /// //从空间数据库中删除所有拓扑对象 /// </summary> /// <returns></returns> public bool DeleteALLTopolgyFromGISDB() { bool rbc true; try { …

Altium Desgner软件,PCB设计中铺铜的作用

PS原文出自http://mp.weixin.qq.com/s/5mLNXzCDm1hGOXiKNE8Ddg 问1:为何要铺铜&#xff1f; 答&#xff1a;一般铺铜有几个方面原因。 &#xff11;、EMC.对于大面积的地或电源铺铜&#xff0c;会起到屏蔽作用&#xff0c;有些特殊地&#xff0c;如PGND起到防护作用。&#xff…

如何利用自组织竞争网络进行患者癌症发病预测

如何利用自组织竞争网络进行患者癌症发病预测 数据下载&#xff1a; http://download.csdn.net/detail/lsgo_myp/9711473

leetcode--反转链表--python

文章目录题目题目详情示例提示解题代码代码运行结果体会题目 题目详情 反转一个单链表。 示例 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL提示 你可以迭代或递归地反转链表。你能否用两种方法解决这道题&#xff1f; 解题代码 …

非递归一次性加载分类数据到TreeViw

不是经常用,发现再次用到时又要再写一遍,这次花点时间记录一下 代码:------------------------------------- private void InitView() { DataView dv CommodityClassBLL.Query().Tables[0].DefaultView; if (dv.Count > 1) { dv.Sort …

什么是SESSION?(二)

本篇图文讨论了SESSION多服务器共享问题以及SESSION操作的效率问题。本篇微信图文由钟锦提供。