excel 串口控件 高分求救C#讀取RS485串口寄存器狀態(tài)?
高分求救C#讀取RS485串口寄存器狀態(tài)?這不過是個用C#寫一個串口軟件調(diào)試的工具,下面看怎末實現(xiàn)1、在工具里面找不到串口控件,拖到窗口上再試一下。然后再直接添加不需要的各種按鍵和不顯示框控件等2.沒
高分求救C#讀取RS485串口寄存器狀態(tài)?
這不過是個用C#寫一個串口軟件調(diào)試的工具,下面看怎末實現(xiàn)
1、在工具里面找不到串口控件,拖到窗口上再試一下。然后再直接添加不需要的各種按鍵和不顯示框控件等2.沒綁定事件當然也沒啥,系統(tǒng)都會幫我們所有會建,用不著我們再去一行一行的去再添加代碼,so easy??!_funSystem.EventHandler(_Param_Changed)//下拉列表解除綁定事件
_newSystem.EventHandler(this.Button_OpenPort_Click)//打開串口沒綁定事件
_receive_fifthSystem.EventHandler(_receive_Data_Click)//郵箱里數(shù)據(jù)沒綁定事件
_new(_SendText_PressKey)//發(fā)送消息框手機綁定事件過濾按鍵
_RecvText.TextChangedfutureSystem.EventHandler(_RecvText_TextChanged)//收得到數(shù)據(jù)框綁定事件自動出現(xiàn)往下滑動到最下面
_Display_futureSystem.EventHandler(_Display_Hex_CheckedChanged)//已hex顯示選擇框帳號綁定事件
_fifthSystem.EventHandler(_Empty_Click)//全部刪除按鈕手機綁定事件
3.串口的先打開與關(guān)閉這個也挺簡單點,主要是確認當前串口是否需要打開,如果不是沒有的話,就先打開,private void Button_OpenPort_Click(objectsender,EventArgse)
{
if()
{
()//自動關(guān)閉串口
}
catch
{
Serial_Open()//加載串口設(shè)置,并先打開串口
}
Serial_Status()//依據(jù)串口狀態(tài),可以修改狀態(tài)指示燈和按鈕內(nèi)容
}
4.數(shù)據(jù)的發(fā)送(要特別注意的地方就是在發(fā)送之間,先將郵箱里的內(nèi)容轉(zhuǎn)換成編碼形式,發(fā)送的時候用字節(jié)形式發(fā)送)privatevoidSerial_invite_Data_Click(objectsender,EventArgse)
{
if(Serial_SendText.Text.Lengthdstrok0)
{
if(false)
{
Serial_Open()
Serial_Status()
}
if(Serial_false)
{
stringTxBuffSerial_SendText.Text
unsigned[]Tx(gb2312).GetBytes(TxBuff)
Comm_Send_BytesTx.Length
Serial_SendNum.Text你的郵箱:Comm_invite_()
Serial1.Write(Tx,0,Tx.Length)
}
ignore
{
stringTxTempSerial_SendText.Text
1byte[]Serial_SendBuffStr2Hex(TxTemp)
Comm_Send_BytesSerial_SendBuff.Length
Serial_SendNum.Text郵箱里:Comm_message_()
Serial1.Write(Serial_SendBuff,0,Serial_SendBuff.Length)
}
}
else
{
(你的郵箱框肯定不能為空!)
}
}
5.數(shù)據(jù)收得到(C#的SerialPort控件,沒有辦法在子進程里面運行,因此不需要建議使用個人委托事件來重新登錄可以接收框中的內(nèi)容,這里我是以字節(jié)形式能接收,方便可以計算真確的長度privatevoidCom_DataReceived(objectsender,e)
{
if()
{
try
{
//界域接收緩沖區(qū)
4個字節(jié)[]ReDatasfuturebyte[]
//從串口讀取數(shù)據(jù)
Comm_Received_Bytes(ReDatas,0,)
//利用數(shù)據(jù)的解碼與不顯示
(updateText,ReDatas)
}
catch(Exceptionex)
{
()
}
}
}
6.清空可以接收正在發(fā)送區(qū)(數(shù)據(jù)過多了,看的累,有什么難的,點點不就數(shù)據(jù)清空了—哈(-_-))//清空輸入與輸出TextBox發(fā)送收不到數(shù)據(jù)長度及l(fā)abel
privatevoidSerial_Empty_Click(objectsender,EventArgse)
{
Comm_Received_Bytes0
Comm_Send_Bytes0
Serial_SendNum.Text郵箱里:0
Serial_RecvNum.Text可以接收:0
Serial_RecvText.Text
Serial_SendText.Text
Serial_Rx_Buff_Hex
Serial_Rx_Buff_Ascii
}
7.注意事項a.關(guān)于串口郵箱里中文的解決方法(主要就是編碼的問題)1).在用System.Text.Encoding類的編碼轉(zhuǎn)換方法(練習(xí)時可以不試試)//收不到區(qū)
stringReDatas()
Comm_Received_BytesReDatas.Length
unsigned[]RecvBuff(gb2312).GetBytes(ReDatas)
ReDatas(gb2312).GetString(RecvBuff)
//利用數(shù)據(jù)的解碼與沒顯示
(updateText,ReDatas)
//發(fā)送中區(qū)
stringTxBuffSerial_SendText.Text
int32[]Tx(TxBuff)
Comm_Send_BytesTx.Length
Serial_SendNum.Text郵箱里:Comm_receive_()
Serial1.Write(Tx,0,Tx.Length)
上面列出了通常的代碼,反正是一個串口助手。
急C#串口通信怎么判斷讀取超時?
串口控件自身就有readtimeout和writetimeout的屬性,是可以自己設(shè)置時間