Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
C#ʵÏÖ¼òµ¥µÄ´®¿ÚͨÐÅ
 
×÷Õߣº ElijahZeng
  5682  次浏览      31
 2020-11-16  
 
±à¼­ÍƼö:

±¾ÎÄÖ÷Òª½éÉÜÁË´®¿ÚͨÐÅÔ­Àí¡¢Ê¹ÓÃSystem.IO.Port.SerialPortÀàʵÏÖ´®¿ÚͨÐÅ¡¢±àдWinform´®¿ÚͨÐŹ¤¾ß½çÃæµÈÏà¹ØÄÚÈÝ¡£
±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°£¬ÓÉ»ðÁú¹ûAnna±à¼­ÍƼö

ǰÑÔ

±¾×ÅѧϰÑо¿µÄ̬¶È£¬ÓÃc#ÓïÑÔʵÏÖ¼òµ¥µÄ´®¿ÚͨÐŹ¤¾ß¡£

Ò»¡¢´®¿ÚͨÐÅÔ­Àí

´®¿ÚͨÐÅ

´®¿ÚͨÐÅ£¨Serial Communications£©µÄ¸ÅÄî·Ç³£¼òµ¥£¬´®¿Ú°´Î»£¨bit£©·¢ËͺͽÓÊÕ×Ö½Ú¡£¾¡¹Ü±È°´×Ö½Ú£¨byte£©µÄ²¢ÐÐͨÐÅÂý£¬µ«ÊÇ´®¿Ú¿ÉÒÔÔÚʹÓÃÒ»¸ùÏß·¢ËÍÊý¾ÝµÄͬʱÓÃÁíÒ»¸ùÏß½ÓÊÕÊý¾Ý¡£ËüºÜ¼òµ¥²¢ÇÒÄܹ»ÊµÏÖÔ¶¾àÀëͨÐÅ¡£ÓÉÓÚ´®¿ÚͨÐÅÊÇÒì²½µÄ£¬¶Ë¿ÚÄܹ»ÔÚÒ»¸ùÏßÉÏ·¢ËÍÊý¾ÝͬʱÔÚÁíÒ»¸ùÏßÉϽÓÊÕÊý¾Ý¡£ÆäËûÏßÓÃÓÚÎÕÊÖ£¬µ«²»ÊDZØÐëµÄ¡£´®¿ÚͨÐÅ×îÖØÒªµÄ²ÎÊýÊDz¨ÌØÂÊ¡¢Êý¾Ýλ¡¢Í£Ö¹Î»ºÍÆæÅ¼Ð£Ñé¡£¶ÔÓÚÁ½¸ö½øÐÐͨÐŵĶ˿ڣ¬ÕâЩ²ÎÊý±ØÐëÆ¥Åä¡£

³£ÓÃÊõÓï½éÉÜ

²¨ÌØÂÊ£ºÕâÊÇÒ»¸öºâÁ¿·ûºÅ´«ÊäËÙÂʵIJÎÊý¡£Ö¸µÄÊÇÐźű»µ÷ÖÆÒÔºóÔÚµ¥Î»Ê±¼äÄڵı仯£¬¼´µ¥Î»Ê±¼äÄÚÔØ²¨²ÎÊý±ä»¯µÄ´ÎÊý£¬ÈçÿÃëÖÓ´«ËÍ240¸ö×Ö·û£¬¶øÃ¿¸ö×Ö·û¸ñʽ°üº¬10루1¸öÆðʼ룬1¸öֹͣ룬8¸öÊý¾Ý룩£¬ÕâʱµÄ²¨ÌØÂÊΪ240Bd£¬±ÈÌØÂÊΪ10λ*240¸ö/Ãë=2400bps¡£Ò»°ãµ÷ÖÆËÙÂÊ´óÓÚ²¨ÌØÂÊ£¬±ÈÈçÂü³¹Ë¹ÌرàÂ룩¡£Í¨³£µç»°ÏߵIJ¨ÌØÂÊΪ14400£¬28800ºÍ36600¡£²¨ÌØÂÊ¿ÉÒÔÔ¶Ô¶´óÓÚÕâЩֵ£¬µ«ÊDz¨ÌØÂʺ;àÀë³É·´±È¡£¸ß²¨ÌØÂʳ£³£ÓÃÓÚ·ÅÖõĺܽüµÄÒÇÆ÷¼äµÄͨÐÅ£¬µäÐ͵ÄÀý×Ó¾ÍÊÇGPIBÉ豸µÄͨÐÅ¡£

Êý¾Ýλ£ºÕâÊǺâÁ¿Í¨ÐÅÖÐʵ¼ÊÊý¾ÝλµÄ²ÎÊý¡£µ±¼ÆËã»ú·¢ËÍÒ»¸öÐÅÏ¢°ü£¬Êµ¼ÊµÄÊý¾ÝÍùÍù²»»áÊÇ8λµÄ£¬±ê×¼µÄÖµÊÇ6¡¢7ºÍ8λ¡£ÈçºÎÉèÖÃÈ¡¾öÓÚÄãÏë´«Ë͵ÄÐÅÏ¢¡£±ÈÈ磬±ê×¼µÄASCIIÂëÊÇ0¡«127£¨7룩¡£À©Õ¹µÄASCIIÂëÊÇ0¡«255£¨8룩¡£Èç¹ûÊý¾ÝʹÓüòµ¥µÄÎı¾£¨±ê×¼ ASCIIÂ룩£¬ÄÇôÿ¸öÊý¾Ý°üʹÓÃ7λÊý¾Ý¡£Ã¿¸ö°üÊÇÖ¸Ò»¸ö×Ö½Ú£¬°üÀ¨¿ªÊ¼/ֹͣ룬Êý¾ÝλºÍÆæÅ¼Ð£Ñéλ¡£ÓÉÓÚʵ¼ÊÊý¾Ýλȡ¾öÓÚͨÐÅЭÒéµÄѡȡ£¬ÊõÓï"°ü"Ö¸ÈκÎͨÐŵÄÇé¿ö¡£

ֹͣλ£ºÓÃÓÚ±íʾµ¥¸ö°üµÄ×îºóһλ¡£µäÐ͵ÄֵΪ1£¬1.5ºÍ2λ¡£ÓÉÓÚÊý¾ÝÊÇÔÚ´«ÊäÏßÉ϶¨Ê±µÄ£¬²¢ÇÒÿһ¸öÉ豸ÓÐÆä×Ô¼ºµÄʱÖÓ£¬ºÜ¿ÉÄÜÔÚͨÐÅÖÐÁ½Ì¨É豸¼ä³öÏÖÁËССµÄ²»Í¬²½¡£Òò´Ëֹͣλ²»½ö½öÊDZíʾ´«ÊäµÄ½áÊø£¬²¢ÇÒÌṩ¼ÆËã»úУÕýʱÖÓͬ²½µÄ»ú»á¡£ÊÊÓÃÓÚֹͣλµÄλÊýÔ½¶à£¬²»Í¬Ê±ÖÓͬ²½µÄÈÝÈ̶̳ÈÔ½´ó£¬µ«ÊÇÊý¾Ý´«ÊäÂÊͬʱҲԽÂý¡£

ÆæÅ¼Ð£Ñéλ£ºÔÚ´®¿ÚͨÐÅÖÐÒ»ÖÖ¼òµ¥µÄ¼ì´í·½Ê½¡£ÓÐËÄÖÖ¼ì´í·½Ê½£ºÅ¼¡¢Ææ¡¢¸ßºÍµÍ¡£µ±È»Ã»ÓÐУÑéλҲÊÇ¿ÉÒԵġ£¶ÔÓÚżºÍÆæÐ£ÑéµÄÇé¿ö£¬´®¿Ú»áÉèÖÃУÑé루Êý¾ÝλºóÃæµÄһ룩£¬ÓÃÒ»¸öֵȷ±£´«ÊäµÄÊý¾ÝÓÐż¸ö»òÕ߯æ¸öÂß¼­¸ßλ¡£ÀýÈ磬Èç¹ûÊý¾ÝÊÇ011£¬ÄÇô¶ÔÓÚżУÑ飬УÑéλΪ0£¬±£Ö¤Âß¼­¸ßµÄλÊýÊÇżÊý¸ö¡£Èç¹ûÊÇÆæÐ£Ñ飬УÑéλΪ1£¬ÕâÑù¾ÍÓÐ3¸öÂß¼­¸ßλ¡£¸ßλºÍµÍλ²»ÕæÕýµÄ¼ì²éÊý¾Ý£¬¼òµ¥ÖÃλÂß¼­¸ß»òÕßÂß¼­µÍУÑé¡£ÕâÑùʹµÃ½ÓÊÕÉ豸Äܹ»ÖªµÀÒ»¸öλµÄ״̬£¬Óлú»áÅжÏÊÇ·ñÓÐÔëÉù¸ÉÈÅÁËͨÐÅ»òÕßÊÇ·ñ´«ÊäºÍ½ÓÊÕÊý¾ÝÊÇ·ñ²»Í¬²½¡£

´®¿ÚÒý½Åͼ½â

1 ÔØ²¨¼ì²â(DCD) 2 ½ÓÊÜÊý¾Ý(RXD) 3 ·¢³öÊý¾Ý(TXD) 4 Êý¾ÝÖÕ¶Ë×¼±¸ºÃ(DTR)

5 ÐźŵØÏß(SG) 6 Êý¾Ý×¼±¸ºÃ(DSR) 7 ÇëÇó·¢ËÍ(RTS) 8 Çå³ý·¢ËÍ(CTS) 9 ÕñÁåָʾ(RI)

¶þ¡¢Ê¹ÓÃ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 { get; set; }

/// <summary>
/// ´®¿ÚͨÐÅ¿ªÆô״̬
/// </summary>
public bool PortState { get; set; } = false;

/// <summary>
/// ±àÂëÀàÐÍ
/// </summary>
public Encoding EncodingType { get; set; } = 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
}
}

 

Èý¡¢±àдWinform´®¿ÚͨÐŹ¤¾ß½çÃæ

½çÃæÔ¤ÀÀ

²Ù×÷½éÉÜ

±¾½çÃæÖ÷Òª¹¦ÄÜÊDzÙ×÷Á½¸ö´®¿Ú£¬Ò»¸ö·¢ËÍÊý¾ÝÁíÒ»¸ö½ÓÊÕÊý¾Ý¡£×ó²àÉèÖÃÁ½´®¿ÚµÄһЩ²ÎÊý£¬ÉèÖÃÍê³Éºóµã»÷"´ò¿ª·¢ËͽÓÊÕ´®¿Ú"£¬ÈçÁ½´®¿Ú³É¹¦´ò¿ª£¬ÓÒ²à±ã¿É²Ù×÷·¢ËͺͽÓÊÜÊý¾Ý¡£

¾ßÌå´úÂëʵÏÖ

using System;
using System.Windows.Forms;
namespace PortControlDemo
{
public partial class FrmPortControl : Form
{
#region ×Ö¶Î/ÊôÐÔ
int[] BaudRateArr = new int[] { 110, 300, 1200, 2400, 4800, 115200 };
int[] DataBitArr = new int[] { 6, 7, 8 };
int[] StopBitArr = new int[] { 1, 2, 3};
int[] TimeoutArr = new int[] { 500, 1000, 2000, 5000, 10000 };
object[] CheckBitArr = new object[] { "None"};
private bool ReceiveState = false;
private PortControlHelper pchSend;
private PortControlHelper pchReceive;
#endregion


#region ·½·¨
/// <summary>
/// ³õʼ»¯¿Ø¼þ
/// </summary>
private void InitView()
{
cb_portNameSend.DataSource = pchSend.PortNameArr;
cb_portNameReceive.DataSource = pchReceive.PortNameArr;
cb_baudRate.DataSource = BaudRateArr;
cb_dataBit.DataSource = DataBitArr;
cb_stopBit.DataSource = StopBitArr;
cb_checkBit.DataSource = CheckBitArr;
cb_timeout.DataSource = TimeoutArr;
FreshBtnState (pchSend.PortState && pchReceive.PortState);
}
/// <summary>
/// ˢа´Å¥×´Ì¬
/// </summary>
/// <param name="state"></param>
private void FreshBtnState(bool state)
{
if (state)
{
Btn_open.Text = "¹Ø±Õ·¢ËͽÓÊÕ´®¿Ú";
Btn_send.Enabled = true;
Btn_receive.Enabled = true;
}
else
{
Btn_open.Text = "´ò¿ª·¢ËͽÓÊÕ´®¿Ú";
Btn_send.Enabled = false;
Btn_receive.Enabled = false;
}
}
#endregion
#region ʼþ
public FrmPortControl()
{
InitializeComponent();
pchSend = new PortControlHelper();
pchReceive = new PortControlHelper();
InitView();
}
/// <summary>
/// µã»÷ ·¢ËÍÊý¾Ý °´Å¥£¬·¢ËÍÎı¾ÄÚÊý¾Ý
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Btn_send_Click (object sender, EventArgs e)
{
pchSend.SendData(tb_send.Text);
}
/// <summary>
/// µã»÷ ¿ªÊ¼½ÓÊÕ °´Å¥£¬¿ªÊ¼¼àÌý´®¿Ú½ÓÊÕÈë¿ÚÊý¾Ý
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Btn_receive_Click (object sender, EventArgs e)
{
if (ReceiveState)
{
pchReceive.OnComReceiveDataHandler -= new PortControlHelper.ComReceiveDataHandler (ComReceiveData);
Btn_receive.Text = "¿ªÊ¼½ÓÊÕ";
ReceiveState = false;
}
else
{
pchReceive.OnComReceiveDataHandler += new PortControlHelper.ComReceiveDataHandler (ComReceiveData);
Btn_receive.Text = "Í£Ö¹½ÓÊÕ";
ReceiveState = true;
}
}
/// <summary>
/// ¿ªÆô»ò¹Ø±Õ Á½¸öͨÐŵĴ®¿Ú£¬Ë¢Ð°´Å¥×´Ì¬
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Btn_open_Click(object sender, EventArgs e)
{
if (pchSend.PortState)
{
pchSend.ClosePort();
pchReceive.ClosePort();
}
else
{
pchSend.OpenPort (cb_portNameSend.Text, int.Parse(cb_baudRate.Text),
int.Parse(cb_dataBit.Text), int.Parse(cb_stopBit.Text),
int.Parse(cb_timeout.Text));
pchReceive.OpenPort(cb_portNameReceive.Text, int.Parse(cb_baudRate.Text),
int.Parse(cb_dataBit.Text), int.Parse(cb_stopBit.Text),
int.Parse(cb_timeout.Text));
}
FreshBtnState(pchSend.PortState && pchReceive.PortState);
pchReceive.OnComReceiveDataHandler += new PortControlHelper.ComReceiveDataHandler(ComReceiveData);
Btn_receive.Text = "Í£Ö¹½ÓÊÕ";
ReceiveState = true;
}
/// <summary>
/// ½ÓÊÕµ½µÄÊý¾Ý£¬Ð´ÈëÎı¾¿òÄÚ
/// </summary>
/// <param name="data"></param>
private void ComReceiveData(string data)
{
this.Invoke(new EventHandler(delegate
{
tb_receive.AppendText($"½ÓÊÕ£º{data}\n");
}));
}
#endregion
}
}

 

 

×ܽá

Óпò¼ÜÌṩµÄ°ïÖúÀ࣬ÎÒÃÇʵÏÖ´®¿ÚͨÐÅËäÈ»²»ÄÑ£¬µ«ÊÇ»¹ÊÇÓкܶàϸ½ÚҪעÒâµÄ¡£

   
5682 ´Îä¯ÀÀ       31
 
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
 
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
 
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
.NET Core 3.0 Õýʽ¹«²¼£ºÐÂÌØÐÔÏêϸ½â¶Á
.NET Core²¿ÊðÖÐÄã²»Á˽âµÄ¿ò¼ÜÒÀÀµÓë¶ÀÁ¢²¿Êð
C# eventḬ̈߳²È«
¼òÎö .NET Core ¹¹³ÉÌåϵ
C#¼¼ÊõÂþ̸֮À¬»ø»ØÊÕ»úÖÆ(GC)
×îпγÌ
.NetÓ¦Óÿª·¢
C#¸ß¼¶¿ª·¢¼¼Êõ
.NET ¼Ü¹¹Éè¼ÆÓëµ÷ÊÔÓÅ»¯
ASP.NET Core Web ¿ª·¢
ASP.Net MVC¿ò¼ÜÔ­ÀíÓëÓ¦Óÿª·¢
³É¹¦°¸Àý
º½Ìì¿Æ¹¤¼¯ÍÅ×Ó¹«Ë¾ DotNetÆóÒµ¼¶Ó¦ÓÃÉè¼ÆÓ뿪·¢
ÈÕÕÕ¸Û¼¯ .NET Framewor
Éñ»ªÐÅ .NETµ¥Ôª²âÊÔ
̨´ïµç×Ó .NET³ÌÐòÉè¼ÆÓ뿪·¢
Éñ»ªÐÅÏ¢ .NETµ¥Ôª²âÊÔ