RS-232 通信程序设计
来源:互联网 发布:网络综合布线报价单 编辑:程序博客网 时间:2024/05/17 20:01
代码改自:https://msdn.microsoft.com/zh-cn/library/system.io.ports.serialport
1. 使用RS-232线连接两台PC(无RS-232线,可以使用两台虚拟机,并设置串行端口)
2. 在两台PC上都创建C#控制台项目,复制运行下面的代码就可以了
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication1{ using System; using System.IO.Ports; using System.Threading; public class Program { static bool _continue; static SerialPort _serialPort; public static void Main() { string message; StringComparer stringComparer = StringComparer.OrdinalIgnoreCase; Thread readThread = new Thread(Read); // 创建串口对象 _serialPort = new SerialPort(); // 设置端口对象的属性 _serialPort.PortName = SetPortName(_serialPort.PortName); _serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate); _serialPort.Parity = SetPortParity(_serialPort.Parity); _serialPort.DataBits = SetPortDataBits(_serialPort.DataBits); _serialPort.StopBits = SetPortStopBits(_serialPort.StopBits); _serialPort.Handshake = SetPortHandshake(_serialPort.Handshake); //超时时间 _serialPort.ReadTimeout = 500; _serialPort.WriteTimeout = 500; _serialPort.Open(); _continue = true; readThread.Start(); Console.WriteLine("退出请输入“quit”"); while (_continue) { message = Console.ReadLine(); if (stringComparer.Equals("quit", message)) { _continue = false; } else { System.DateTime currentTime = new System.DateTime(); currentTime = System.DateTime.Now; string strTime = currentTime.ToString(); message = "[SENT " + strTime + "] " + message;//发送信息 Console.WriteLine(message);//在控制台输出发送的信息 _serialPort.WriteLine( String.Format("{0}", message)); } } readThread.Join(); _serialPort.Close(); } public static void Read() { while (_continue) { try { string message = _serialPort.ReadLine(); System.DateTime currentTime = new System.DateTime(); currentTime = System.DateTime.Now; string strTime = currentTime.ToString(); message = "[REVC " + strTime + "] " + message;//接收串口信息 Console.WriteLine(message);//在控制台输出接收的信息 } catch (TimeoutException) { } } } //设置端口 public static string SetPortName(string defaultPortName) { string portName; Console.WriteLine("可用端口:"); foreach (string s in SerialPort.GetPortNames()) { Console.WriteLine(" {0}", s); } Console.Write("输出 COM 端口值 (默认: {0}): ", defaultPortName); portName = Console.ReadLine(); if (portName == "" || !(portName.ToLower()).StartsWith("com")) { portName = defaultPortName; } return portName; } // 设置波特率 public static int SetPortBaudRate(int defaultPortBaudRate) { string baudRate; Console.Write("波特率(默认:{0}): ", defaultPortBaudRate); baudRate = Console.ReadLine(); if (baudRate == "") { baudRate = defaultPortBaudRate.ToString(); } return int.Parse(baudRate); } // 设置端口奇偶值 public static Parity SetPortParity(Parity defaultPortParity) { string parity; Console.WriteLine("可用奇偶值:"); foreach (string s in Enum.GetNames(typeof(Parity))) { Console.WriteLine(" {0}", s); } Console.Write("可用奇偶值(默认: {0}):", defaultPortParity.ToString(), true); parity = Console.ReadLine(); if (parity == "") { parity = defaultPortParity.ToString(); } return (Parity)Enum.Parse(typeof(Parity), parity, true); } //设置数据位 public static int SetPortDataBits(int defaultPortDataBits) { string dataBits; Console.Write("设置数据位 (默认: {0}): ", defaultPortDataBits); dataBits = Console.ReadLine(); if (dataBits == "") { dataBits = defaultPortDataBits.ToString(); } return int.Parse(dataBits.ToUpperInvariant()); } //设置停止位 public static StopBits SetPortStopBits(StopBits defaultPortStopBits) { string stopBits; Console.WriteLine("可用停止位:"); foreach (string s in Enum.GetNames(typeof(StopBits))) { Console.WriteLine(" {0}", s); } Console.Write("输入停止位 (默认: {0}):", defaultPortStopBits.ToString()); stopBits = Console.ReadLine(); if (stopBits == "") { stopBits = defaultPortStopBits.ToString(); } return (StopBits)Enum.Parse(typeof(StopBits), stopBits, true); } public static Handshake SetPortHandshake(Handshake defaultPortHandshake) { string handshake; Console.WriteLine("可用握手协议:"); foreach (string s in Enum.GetNames(typeof(Handshake))) { Console.WriteLine(" {0}", s); } Console.Write("输入握手协议 (默认: {0}):", defaultPortHandshake.ToString()); handshake = Console.ReadLine(); if (handshake == "") { handshake = defaultPortHandshake.ToString(); } return (Handshake)Enum.Parse(typeof(Handshake), handshake, true); } }}
1 0
- RS-232 通信程序设计
- RS-232通信
- 串行通信接口RS-232C
- RS-485通信
- RS-232串口通信原理,电气特性及主要参数介绍
- 单片机与RS-232的串口通信+VB程序
- TTL RS-232 RS-485 RS-422
- RS-232
- RS-232
- RS-232
- RS-232与RS-485
- RS-232、RS-422与RS-485标准及应用
- RS-232、RS-422与RS-485标准及应用
- RS-232、RS-422与RS-485标准及应用
- RS-232至RS-485/RS-422智能转换器电路图
- RS-232、RS-422与RS-485标准及应用
- RS-232/RS-485/RS-422 接口简介与编程
- RS-232、RS-422与RS-485串口标准简介
- 搭建vim IDE
- 上拉电阻作用
- 香农定理
- [LeetCode]29. Divide Two Integers
- C++操作Redis数据库
- RS-232 通信程序设计
- struts2 S2-045问题,升级struts版本的解决方案
- 微信网页PC端登录扫二维码登录
- JavaScript—事件流、事件处理程序、事件侦听器、冒泡
- 卷积神经网络(一)
- 开源跳板机-堡垒机jumpserver安装
- python 解决No module named 'MySQLdb'的问题
- nodejs返回html代码 引入路径问题+静态文件问题
- iOS应用架构谈 网络层设计方案