博客
关于我
C#串口通讯+BigEndian+Little-Endian(大端和小端方案)
阅读量:534 次
发布时间:2019-03-09

本文共 12168 字,大约阅读时间需要 40 分钟。

C#串口通讯

#region 串口        ///         /// 2 3 4G DTU短信收发说明        ///         public static void TestDTU4G()        {            var PortNames = SerialPort.GetPortNames();            foreach (var item in PortNames)            {                Console.WriteLine($"端口:{item}");            }            serialPort = new SerialPort();            var result = SerialPortInit(PortNames[0]);            if (result)            {                //while (true)                {                    var txt = "测试消息123AB";                    byte[] unicodeBytes = null;                    string sendString = null;                    StringBuilder stringBuilder = new StringBuilder();                    if (Regex.IsMatch(txt, @"[\u4e00-\u9fa5]"))//是否包含中文                    {                        //BigEndian------6D4B 8BD5 6D88 606F 0031 0032 0033 0041 0042                        foreach (var i in txt.ToCharArray())                        {                            stringBuilder.Append(((int)i).ToString("X").PadLeft(4, '0'));                        }                        sendString = stringBuilder.ToString();                        //下面的也是大端方案                        //unicodeBytes = Encoding.BigEndianUnicode.GetBytes(txt);                    }                    else                    {                        //Little-Endian-----4B6D D58B 886D 6F60 3100 3200 3300 4100 4200                        unicodeBytes = Encoding.Unicode.GetBytes(txt);                    }                    if (unicodeBytes != null && unicodeBytes.Length > 0)                    {                        foreach (var item in unicodeBytes)                        {                            stringBuilder.Append(item.ToString("X2"));                        }                    }                                       sendString = stringBuilder.ToString();                    Console.WriteLine($"{sendString}");                    Console.WriteLine("AT*MSGS=18052060345,0,12,123456ABCDEF");                    //serialPort.Write("AT*MSGS=18052060345,0,12,123456ABCDEF");                    if (!string.IsNullOrEmpty(sendString))                    {                        while (true)                        {                            serialPort.Write($"AT*MSGS=18052060793,3,{sendString.Length},{sendString}");                            Thread.Sleep(TimeSpan.FromSeconds(2));                        }                        //serialPort.Write($"AT*MSGS=18052060345,3,{sendString.Length},{sendString}");                        //serialPort.Write("AT*MSGS=18052060345,3,36,6D4B8BD56D88606F00310032003300410042");                     }                    //var data = Encoding.Default.GetBytes($"AT*MSGS=18052060345,0,12,123456ABCDEF");                    //SerialPortWrite(data, data.Length);                    //Thread thread = new Thread(() =>                    //{                    //    while (true)                    //    {                    //        Thread.Sleep(TimeSpan.FromSeconds(10));                    //        serialPort.Write("AT*MSGS=18052060793,0,12,123456ABCDEF");                    //    }                                            //});                    //thread.IsBackground = true;                    //thread.Start();                }            }        }        static SerialPort serialPort = null;        public static bool SerialPortInit(string comx)        {            serialPort.PortName = comx;            try            {                if (serialPort.IsOpen)                    serialPort.Close();            }            catch            {            }            serialPort.PortName = comx;          // 串口号            serialPort.BaudRate = 9600;          // 波特率:9600            serialPort.DataBits = 8;             // 数据位数:8            serialPort.StopBits = StopBits.One;  // 停止位            serialPort.Parity = Parity.None;     // 奇偶校验无            serialPort.Encoding = Encoding.Default;            serialPort.DataReceived += new SerialDataReceivedEventHandler(SerialPortReceive);            try            {                serialPort.Open();// 打开串口                return true;            }            catch            {                Console.WriteLine(comx + "端口被占用");                return false;            }        }        ///         /// 串口写数据        ///         ///         ///         public static void SerialPortWrite(byte[] data, int len)        {            try            {                if (serialPort.IsOpen)                {                    serialPort.Write(data, 0, len);                }            }            catch { }        }        ///         /// 串口接收数据        ///         ///         ///         public static void SerialPortReceive(object sender, SerialDataReceivedEventArgs e)        {            int bufflen = serialPort.BytesToRead;    //返回接收到的数据个数            byte[] dat = new byte[bufflen];            serialPort.Read(dat, 0, bufflen);            Console.WriteLine($"串口收到信息:{Encoding.Default.GetString(dat)}");        }        public enum HardwareEnum        {            // 硬件            Win32_Processor,         // CPU 处理器            Win32_PhysicalMemory,    // 物理内存条            Win32_Keyboard,          // 键盘            Win32_PointingDevice,    // 点输入设备,包括鼠标。            Win32_FloppyDrive,       // 软盘驱动器            Win32_DiskDrive,         // 硬盘驱动器            Win32_CDROMDrive,        // 光盘驱动器            Win32_BaseBoard,         // 主板            Win32_BIOS,              // BIOS 芯片            Win32_ParallelPort,      // 并口            Win32_SerialPort,        // 串口            Win32_SerialPortConfiguration,   // 串口配置            Win32_SoundDevice,               // 多媒体设置,一般指声卡。            Win32_SystemSlot,                // 主板插槽 (ISA & PCI & AGP)            Win32_USBController,             // USB 控制器            Win32_NetworkAdapter,            // 网络适配器            Win32_NetworkAdapterConfiguration, // 网络适配器设置            Win32_Printer,                  // 打印机            Win32_PrinterConfiguration,     // 打印机设置            Win32_PrintJob,                 // 打印机任务            Win32_TCPIPPrinterPort,         // 打印机端口            Win32_POTSModem,                // MODEM            Win32_POTSModemToSerialPort,    // MODEM 端口            Win32_DesktopMonitor,           // 显示器            Win32_DisplayConfiguration,     // 显卡            Win32_DisplayControllerConfiguration,    // 显卡设置            Win32_VideoController,                  // 显卡细节。            Win32_VideoSettings,                    // 显卡支持的显示模式。            // 操作系统            Win32_TimeZone,                    // 时区            Win32_SystemDriver,                // 驱动程序            Win32_DiskPartition,               // 磁盘分区            Win32_LogicalDisk,                 // 逻辑磁盘            Win32_LogicalDiskToPartition,      // 逻辑磁盘所在分区及始末位置。            Win32_LogicalMemoryConfiguration,  // 逻辑内存配置            Win32_PageFile,                    // 系统页文件信息            Win32_PageFileSetting,             // 页文件设置            Win32_BootConfiguration,           // 系统启动配置            Win32_ComputerSystem,              // 计算机信息简要            Win32_OperatingSystem,             // 操作系统信息            Win32_StartupCommand,              // 系统自动启动程序            Win32_Service,                     // 系统安装的服务            Win32_Group,                       // 系统管理组            Win32_GroupUser,                   // 系统组帐号            Win32_UserAccount,                 // 用户帐号            Win32_Process,                     // 系统进程            Win32_Thread,                      // 系统线程            Win32_Share,                       // 共享            Win32_NetworkClient,               // 已安装的网络客户端            Win32_NetworkProtocol,             // 已安装的网络协议            Win32_PnPEntity,                   //all device        }        //如果是设备字符串中存在COM,则保存该字符串,则找到串口名。        private static string[] GetHarewareInfo(HardwareEnum hardType, string propKey)        {            List
strs = new List
(); try { using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from " + hardType)) { var hardInfos = searcher.Get(); foreach (var hardInfo in hardInfos) { if (hardInfo.Properties[propKey].Value != null) { String str = hardInfo.Properties[propKey].Value.ToString(); if (str.Contains("COM")) { strs.Add(str); } } } } return strs.ToArray(); } catch { //MessageBox.Show("硬件端口查找错误", "程序猿的提示", MessageBoxButtons.OK, MessageBoxIcon.Error); return null; } finally { strs = null; } } //自动检测新的硬件插入,如果存在则开启定时器,刷新端口名 //protected override void WndProc(ref Message m) //{ // const int WM_DEVICECHANGE = 0x219; // if (m.Msg == WM_DEVICECHANGE) // { // timer3.Interval = 100; // timer3.Enabled = true; // DeviceTimer3Flag = true; // } // base.WndProc(ref m); //将系统消息传递自父类的WndProc //} //定时器函数,刷新端口名 //private void timer3_Tick(object sender, EventArgs e) //{ // if (DeviceTimer3Flag) // { // DeviceTimer3Flag = false; // RefreshComList(); // timer3.Enabled = false; // this.comboBox1.SelectedIndex = -1; // } // if (ShowTimer3Flag) // { // ShowTimer3Flag = false; // timer3.Enabled = false; // toolStripStatusLabel4.Text = ""; // } //} //刷新端口名信息 protected void RefreshComList() { string[] str = GetHarewareInfo(HardwareEnum.Win32_PnPEntity, "Name");//获取全部驱动名称 //foreach (string vPortName in SerialPort.GetPortNames()) //try //{ // comboBox1.Items.Clear(); // for (byte i = 0; i < str.Length; i++) // { // //this.comboBox1.Text = vPortName ; // comboBox1.Items.Add(str[i]); // } //} //catch (Exception) //{ // ShowMessage("没有可用端口", 1000); //} //this.Refresh(); } //获取端口信息后,提取出COM口,初始化端口。 //private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) //{ // if (button2.Text == "停止发送") // { // button2.Text = "配置发送"; // timer2.Enabled = false; // } // string comPortName; // string TempByte; // string ConstByte = "-"; // int startIndex = comboBox1.SelectedItem.ToString().LastIndexOf("("); // int endIndex = comboBox1.SelectedItem.ToString().LastIndexOf(")"); // if ((endIndex - startIndex) > 5) // { // TempByte = comboBox1.SelectedItem.ToString().Substring(startIndex + 6, 1); // if (TempByte == ConstByte) // { // comPortName = comboBox1.SelectedItem.ToString().Substring(startIndex + 1, 5); // } // else // { // comPortName = comboBox1.SelectedItem.ToString().Substring(startIndex + 1, 4); // } // } // else // { // comPortName = comboBox1.SelectedItem.ToString().Substring(startIndex + 1, 4); // } // if (SerialCommx.SeriaInit(comPortName)) // { // ShowMessage(SerialCommx.GetPortName() + "已打开", 1000); // button2.Enabled = true; // } // else // { // ShowMessage(SerialCommx.GetPortName() + "未打开", 1000); // button2.Enabled = false; // } // CurrentCOM = comboBox1.SelectedItem.ToString(); //} #endregion

 

转载地址:http://cjmiz.baihongyu.com/

你可能感兴趣的文章
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>
MYSQL8.0以上忘记root密码
查看>>
Mysql8.0以上重置初始密码的方法
查看>>
mysql8.0新特性-自增变量的持久化
查看>>
Mysql8.0注意url变更写法
查看>>
Mysql8.0的特性
查看>>
MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
查看>>
MySQL8修改密码的方法
查看>>
Mysql8在Centos上安装后忘记root密码如何重新设置
查看>>
Mysql8在Windows上离线安装时忘记root密码
查看>>
MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案
查看>>
mysql8的安装与卸载
查看>>
MySQL8,体验不一样的安装方式!
查看>>
MySQL: Host '127.0.0.1' is not allowed to connect to this MySQL server
查看>>
Mysql: 对换(替换)两条记录的同一个字段值
查看>>
mysql:Can‘t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock‘解决方法
查看>>
MYSQL:基础——3N范式的表结构设计
查看>>
MYSQL:基础——触发器
查看>>
Mysql:连接报错“closing inbound before receiving peer‘s close_notify”
查看>>
mysqlbinlog报错unknown variable ‘default-character-set=utf8mb4‘
查看>>