serialPort串口通讯demo、参数及CRC校验记录

serialPort串口通讯参数:

///portName串口号,例:COM1、COM2

///baudRate波特率,例:9600

///parity奇偶校验位,例:parity = Parity.None

///dataBits数据位,例:int类型,8

///stopBits停止位,例:stopBits = StopBits.One

代码:

this.spVID = new SerialPort(portName, baudRate, parity, dataBits, stopBits);
this.spVID.DataReceived += new SerialDataReceivedEventHandler(Comm_DataReceived);
if (this.spVID.IsOpen) this.spVID.Close();
this.spVID.Open();

void Comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
   if (IsWork)
   {
      //myq 增加扫码
      logger.Info(string.Format("-----------------IsWork-----------------"));
      string VIN = "";
      VIN = EAPort.ReadLine();
      logger.Info(string.Format($"接收到扫码枪信息[{VIN}]"));
      AddMessage("正在检测中,扫码无效");
      return;
   }
   else
   {
      try
      {
          System.Threading.Thread.Sleep(1000);
          logger.Info(string.Format("------------扫码开始-------------"));
          string VIN = "";
          //获取串口VIN带回车符号
          VIN = EAPort.ReadLine();
          VIN = VIN.Substring(0, VIN.Length - 1);
          logger.Info(string.Format($"接收到扫码枪信息[{VIN}]开始检测"));
          IsWork = true;
          GetScanData(VIN);
      }
      catch (Exception ex)
      {
          logger.Error($"扫描VIN码出错原因:{ex.Message }***{ex.StackTrace}");
      }
   }
}

初始化:

public SerialPort(string portName, int baudRate, Parity parity, int dataBits, StopBits stopBits);

串口数据发一帧(一个字节)除了数据位还需要发开始位,停止位和校验位,共11个字节

RS232,RS485波形分析 - qiu_zhi2008 - qiu_zhi2008的博客

CRC校验的概念:

简单来说就是为了确保发送数据到接收端那边是正确的。发送一帧数据时,会通过数据位来计算出一个CRC校验码,将计算出来的CRC校验码拼接在数据包最后,发送到接收端去。在接收端会接收到数据位以及CRC校验码,接收端将使用CRC校验码来确定数据位没有发错发漏的情况。

百度百科解释:

例如胎压发送帧如下图,一帧共11位,最后两位为CRC校验:

CRC校验计算方式:

计算器链接:16进制(CRC16)(MODBUS RTU通讯)校验码在线计算器

计算结果:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值