西門(mén)子PLC: | 西門(mén)子伺服電機(jī) |
西門(mén)子觸摸屏: | 西門(mén)子電纜 |
西門(mén)子變頻器: | 西門(mén)子模塊 |
單價(jià): | 面議 |
發(fā)貨期限: | 自買(mǎi)家付款之日起 天內(nèi)發(fā)貨 |
所在地: | 廣東 惠州 |
有效期至: | 長(zhǎng)期有效 |
發(fā)布時(shí)間: | 2024-07-23 10:16 |
最后更新: | 2024-07-23 10:16 |
瀏覽次數(shù): | 114 |
采購(gòu)咨詢(xún): |
請(qǐng)賣(mài)家聯(lián)系我
|
先來(lái)看看運(yùn)行結(jié)果
最近在研究串口通訊,其中有幾個(gè)比較重要的概念,RS-232這種適配于上位機(jī)和PC端進(jìn)行連接,RS-232只限于PC串口和設(shè)備間點(diǎn)對(duì)點(diǎn)的通信。它很簡(jiǎn)單的就可以進(jìn)行連接,由于串口通訊是異步的,也就是說(shuō)你可以同時(shí)向兩端或者更多進(jìn)行數(shù)據(jù)發(fā)送,它們之間的傳輸數(shù)據(jù)類(lèi)型是byte,串口通信最重要的參數(shù)是波特率、數(shù)據(jù)位、停止位和奇偶校驗(yàn)。對(duì)于兩個(gè)進(jìn)行通信的端口,這些參數(shù)必須匹配。接下來(lái)先解釋一下幾個(gè)關(guān)于串口通訊的術(shù)語(yǔ):
第一個(gè)波特率,這個(gè)東西在不同領(lǐng)域都有涉及,在串口通訊中兩個(gè)串口之間通訊之間的信號(hào)單元叫做碼元,每分鐘傳遞的信號(hào)(碼元)也就是波特率;
第二個(gè)數(shù)據(jù)位、停止位:這個(gè)聽(tīng)名字就知道是啥意思了,在傳遞數(shù)據(jù)過(guò)程之前,機(jī)器會(huì)識(shí)別你的數(shù)據(jù)是個(gè)啥,然后根據(jù)這個(gè)類(lèi)型,去調(diào)整不同的起始位、停止位。
第三個(gè)奇偶校驗(yàn):就是想知道你這個(gè)數(shù)據(jù)有多大,多長(zhǎng),因?yàn)閭鬏敹际? 和 0 ,具體校驗(yàn)方法如下:
奇校驗(yàn):就是讓原有數(shù)據(jù)序列中(包括你要加上的一位)1的個(gè)數(shù)為奇數(shù) ---- 1000110(0)你必須添0這樣原來(lái)有3個(gè)1已經(jīng)是奇數(shù)了所以你添上0之后1的個(gè)數(shù)還是奇數(shù)個(gè)。
偶校驗(yàn):就是讓原有數(shù)據(jù)序列中(包括你要加上的一位)1的個(gè)數(shù)為偶數(shù) ---- 1000110(1)你就必須加1了這樣原來(lái)有3個(gè)1要想1的個(gè)數(shù)為偶數(shù)就只能添1了。
如果想要在C#中玩轉(zhuǎn)串口通訊或者模擬串口,你必須先搞個(gè)硬件,當(dāng)然我們是在模擬,那你就弄個(gè)模擬的工具唄,
安裝好了之后,桌面會(huì)有圖標(biāo),然后打開(kāi),添加一個(gè)串口,具體請(qǐng)看下圖:
下面我們就開(kāi)始代碼的實(shí)現(xiàn)了,創(chuàng)建一個(gè).NET Fwk的 Winform 項(xiàng)目,然后開(kāi)始我們的代碼:
SerialPort sp1 = new SerialPort();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string[] strCom = SerialPort.GetPortNames();
if (strCom == null)
{
MessageBox.Show("本機(jī)沒(méi)有串口!", "Error");
return;
}
foreach (string com in System.IO.Ports.SerialPort.GetPortNames())
{
cbCom.Items.Add(com);
}
cbCom.SelectedIndex = 0;
sp1.BaudRate = 9600;
Control.CheckForIllegalCrossThreadCalls = false;
sp1.DataReceived += Sp1_DataReceived;
sp1.DtrEnable = true;
sp1.RtsEnable = true;
sp1.ReadTimeout = 1000;
sp1.Close();
}