set(s,'BaudRate',9600,'StopBits',1,'Parity','none','DataBits',8,'InputBufferSize',255)
//串口的一些设置,注意,'none'有引号,有些值如InputBufferSize只能在串口关闭时才能设置,
//所以不建议先打开串口
fopen(s)//打开串口
fwrite(s,100)//打100(十进制)写入串口也可以是一维数组,可以用示波器测com的第3个引脚
a=fread(s)
//读出串口数据,由于matlab是顺序执行的,所以这里读不到100,
//程序会卡在这里直到读到数据为止,好像是存完buffer吧,这里忘了。
//自己从com的第2个引脚给数据试试看就清楚了
fclose(s)//关闭串口
由于项目要求,项目为(B/S)架构 ,需要在页面上读取串口数据,于是就需要nodejs了
使用 nodejs 的一个插件 :serialport
现在先做个测试demo
1、先建立测试文件夹
2、在文件夹中安装serialport ,在文件夹下的 cmd 中输入
3、可能会出现 一个警告可用忽略
4、安装后 编写读取串口 js 文件 testport.js
5、运行 js 在文件夹下 cmd 中输入
执行成功:
可能的问题:
问题一: Flie not found
这个是电脑上没有安装串口驱动,或者虚拟串口
可用 虚拟串口程序
建立测试串口
问题二:Port is opening
需要加入 串口属性 autoOpen:false
使用System.IO.Port.SerialPort类实现串口通信
System.IO.Port.SerialPort类介绍
System.IO.Port.SerialPort是.NET Framework提供的 *** 作串行端口的类,里面提供了一些方法、属性和和事件供开发者调用 *** 作串口。
调用流程
1. 直接调用SerialPort的静态方法GetPortNames()获取当前计算机的串行端口名称数组
2.根据串口名称,初始化SerialPort对象,设置参数,调用Open()方法打开串口
3.调用Write()方法发送数据
4.注册接收数据的监听,获取数据(或者另起线程循环读取接收数据,本文使用注册监听方式接收数据)
具体代码实现
using System
using System.IO.Ports
using System.Text
namespace PortControlDemo
{
public class PortControlHelper
{
#region 字段/属性/委托
/// <summary>
/// 串行端口对象
/// </summary>
private SerialPort sp
/// <summary>
/// 串口接收数据委托
/// </summary>
public delegate void ComReceiveDataHandler(string data)
public ComReceiveDataHandler OnComReceiveDataHandler = null
/// <summary>
/// 端口名称数组
/// </summary>
public string[] PortNameArr { getset}
/// <summary>
/// 串口通信开启状态
/// </summary>
public bool PortState { getset} = false
/// <summary>
/// 编码类型
/// </summary>
public Encoding EncodingType { getset} = Encoding.ASCII
#endregion
#region 方法
public PortControlHelper()
{
PortNameArr = SerialPort.GetPortNames()
sp = new SerialPort()
sp.DataReceived += new SerialDataReceivedEventHandler(DataReceived)
}
/// <summary>
/// 打开端口
/// </summary>
/// <param name="portName">端口名称</param>
/// <param name="boudRate">波特率</param>
/// <param name="dataBit">数据位</param>
/// <param name="stopBit">停止位</param>
/// <param name="timeout">超时时间</param>
public void OpenPort(string portName , int boudRate = 115200, int dataBit = 8, int stopBit = 1, int timeout = 5000)
{
try
{
sp.PortName = portName
sp.BaudRate = boudRate
sp.DataBits = dataBit
sp.StopBits = (StopBits)stopBit
sp.ReadTimeout = timeout
sp.Open()
PortState = true
}
catch (Exception e)
{
throw e
}
}
/// <summary>
/// 关闭端口
/// </summary>
public void ClosePort()
{
try
{
sp.Close()
PortState = false
}
catch (Exception e)
{
throw e
}
}
/// <summary>
/// 发送数据
/// </summary>
/// <param name="sendData"></param>
public void SendData(string sendData)
{
try
{
sp.Encoding = EncodingType
sp.Write(sendData)
}
catch (Exception e)
{
throw e
}
}
/// <summary>
/// 接收数据回调用
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte[] buffer = new byte[sp.BytesToRead]
sp.Read(buffer, 0, buffer.Length)
string str = EncodingType.GetString(buffer)
if (OnComReceiveDataHandler != null)
{
OnComReceiveDataHandler(str)
}
}
#endregion
}
}
View Code
三、编写Winform串口通信工具界面
界面预览
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)