zoukankan      html  css  js  c++  java
  • C#串口编程 操作硬件

    -------通过USB将硬件连接PC, 更新USB驱动,使用下面方法可控制相关设备。

    //1声明一个串口对象
    public static SerialPort MainModule_Port_ = new SerialPort();
    //2给串口设置参数
    CreateSerialPort(MainNode.MainModule_Port_, comboBox2.Text.Trim(), "9600", "2");
    //3设置参数方法
    /// <summary>
    /// 公共创建串口
    /// </summary>
    /// <param name="SP">串口对象</param>
    /// <param name="SerialPortName">串口名</param>
    /// <param name="BaudRate">波特率</param>
    /// <param name="Parity">校验位</param>
    public void CreateSerialPort(SerialPort SP, string SerialPortName, string BaudRate, string Parity)
    {
    try
    {
    //串口属性类
    //SerialPortParamter app = new SerialPortParamter();
    SP.PortName = SerialPortName;//串口号
    SP.BaudRate = Convert.ToInt32(BaudRate);//波特率
    SP.Parity = StringToParity(Parity);//校验位
    SP.DataBits = 8;//数据位
    SP.StopBits = StringToStopBits("1");//解析停止位
    //SP = app.setParatemer();
    SP.DtrEnable = true;
    SP.RtsEnable = true;
    }
    catch (Exception ex)
    {
    MessageBox.Show("创建串口失败!" + SerialPortName);
    }
    }
    //3.1串口属性校验位
    public static System.IO.Ports.Parity StringToParity(string parity)
    {
    if (string.IsNullOrEmpty(parity))
    {
    return System.IO.Ports.Parity.None;
    }
    return (System.IO.Ports.Parity)Enum.Parse(typeof(System.IO.Ports.Parity), parity);
    }
    //3.2串口属性停止位
    public static System.IO.Ports.StopBits StringToStopBits(string stopBits)
    {
    if (string.IsNullOrEmpty(stopBits))
    {
    return System.IO.Ports.StopBits.None;
    }
    return (System.IO.Ports.StopBits)Enum.Parse(typeof(System.IO.Ports.StopBits), stopBits);
    }
    //////////目前已经创建好了一个串口,下面用来发送指令,下面为16进制的645协议
    string mess="68 19 00 00 19 67 37 68 91 08 33 33 34 33 33 35 34 35 d7 16";
    byte[] messArray=StrSplitToByte(mess);
    MainNode.MainModule_Port_.Write(messArray, 0, messArray.Length);//从串口发送协议,正常会将发送或收到帧保持到一个集合,供展示
    ///字符串 转 byte 数组
    public static byte[] StrSplitToByte(string inSplitString)
    {
    string[] byteStrings;
    byteStrings = inSplitString.Split(" ".ToCharArray());
    byte[] byteOut;
    byteOut = new byte[byteStrings.Length];
    for (int i = 0; i < byteStrings.Length; i++)
    {
    if (string.IsNullOrEmpty(byteStrings[i]))
    {
    continue;
    }
    byteOut[i] = Convert.ToByte(byteStrings[i], 16);
    }
    return byteOut;
    }
    //////////////发送了协议 ,我们希望得到回复,下面为如何接收协议
    //接收帧方法,1376.2协议测试
    private void __RecvThread_Agreement_13762()
    {
    while (1 == 1)
    {
    try
    {
    if (MainNode.MainModule_Port_.IsOpen)
    {
    int iReadSize = MainNode.MainModule_Port_.BytesToRead;
    if (iReadSize == 0)
    {
    Thread.Sleep(10);
    continue;
    }
    byte[] readBuffer = new byte[iReadSize];
    MainNode.MainModule_Port_.Read(readBuffer, 0, iReadSize);
    //该方法是将接收的帧,在方法中根据帧格式进行判断,正确后放入同发送一起的集合中。
    ProcessRecvData(readBuffer);//处理接收数据
    }
    }
    catch (Exception e) { ;}
    }
    }
    
    ///////////////////////////////下面是算帧的校验位的方法
    /// <summary>
    /// 更新校验码645
    /// 参数无需" "分隔
    /// </summary>
    public static string UpdateCS645(string baowen)
    {
    baowen = baowen.Trim();
    string[] mess = null;// AnalysisMessage.separate(baowen, 2).Split(' ');
    if (baowen.Trim().IndexOf(' ') == -1)
    {
    mess = AnalysisMessage.separate(baowen, 2).Split(' ');
    }
    else
    {
    mess = baowen.Split(' ');
    }
    
    int cs = 0;
    for (int i = 0; i < mess.Length; i++)
    {
    cs += Convert.ToInt32((HexConvert.BCDstrToBin(mess[i])), 2);
    }
    string csV = HexConvert.Mess10to16((cs % 256).ToString());
    if (csV.Length == 2)
    return csV;
    else if (csV.Length == 4)
    return csV.Substring(2, 2);
    return csV.Substring(1, 2);
    }
    /// <summary>
    /// 更新校验码1376.2
    /// </summary>
    public static int UpdateCS(byte[] bs)
    {
    int cs = 0;
    for (int i = 3; i < bs.Length - 2; i++)
    {
    cs += bs[i];
    }
    return cs;
    }
  • 相关阅读:
    Flutter实战视频-移动电商-35.列表页_上拉加载更多制作
    Flutter实战视频-移动电商-34.列表页_小BUG的修复
    Flutter实战视频-移动电商-33.列表页_子类和商品列表交互效果
    Flutter实战视频-移动电商-32.列表页_小类高亮交互效果制作
    Flutter实战视频-移动电商-31.列表页_列表切换交互制作
    Flutter实战视频-移动电商-30.列表页_商品列表UI界面布局
    Flutter实战视频-移动电商-29.列表页_商品列表数据模型建立
    Flutter实战视频-移动电商-28.列表页_商品列表后台接口调试
    Flutter实战视频-移动电商-27.列表页_现有Bug修复和完善
    Flutter实战视频-移动电商-26.列表页_使用Provide控制子类-2
  • 原文地址:https://www.cnblogs.com/Evan-Pei/p/6372848.html
Copyright © 2011-2022 走看看