C 串列埠操作實用類

2021-06-03 10:03:15 字數 2221 閱讀 4611

做工業通訊有很長時間了,特別是串列埠(232/485),有vb/vc/c各種版本的串列埠操作**,這些**也經過了多年的現場考驗,應該說是比較健壯的**,但是目前卻沒有c#相對成熟的串列埠操作**,最近用moxa的裝置開發基於wince5.0的串列埠操作**,所以就擴充完善了一下串列埠操作,特別是sendcommand函式,這是我比較常用的主從通訊**,不喜歡用事件或執行緒接資料,在規定的超時時間內直接迴圈判斷要接收的資料。

下面是具體的**:   

public

class portdata

~portdata()

public

void open()

}

public

void close()

}

//資料傳送

public

void senddata(

byte data)

}

public

void senddata(

byte data,

int offset,

int count)

}

//傳送命令

public

int sendcommand(

byte senddata, 

refbyte receivedata,

int overtime)

if (port.bytestoread >= receivedata.length) 

ret = port.read(receivedata, 0, receivedata.length);

receiveeventflag = 

false;       

//開啟事件

return ret;

}return -1;

}public

void errorevent(

object sender, serialerrorreceivedeventargs e)

//資料接收

public

void datareceived(

object sender, serialdatareceivedeventargs e)

public

bool isopen()

}

public

delegate

void portdatareceivedeventhandle(

object sender, portdatareciveeventargs e);

public

class portdatareciveeventargs : eventargs

public portdatareciveeventargs(

byte data)

private

byte data;

public

byte data

set 

}}

【附註】1~9 串列埠的名稱是 "comx:",>9的以前用.//comx:比較好使,但是在moxa 661裝置上卻不行,要用如下格式"$device//com" + portno.tostring() + "/0",也許這是moxa修改了相應的串列埠驅動。

//注:把**中的public portdata(string sportname, int baudrate,parity parity,serialinte***ce.serialmode mode) 最後乙個引數去掉。

portdata comport = new portdata("com1:", 115200, parity.even);

byte bytsendarray = new byte[2]; //傳送資料緩衝區

bytsendarray[0]=0xac;

bytsendarray[2]=0xaa;

byte bytreceivearray = new byte[5];

//該命令潛台詞是你傳送了兩個位元組的資料0xac,0xaa 下位機應該在200毫秒超時內返回5個位元組的資料

intreceivenum = comport.sendcommand(bytsenddata, ref bytreceivearray, 200);

//intreceivenum為實際返回的資料個數,返回的資料放在bytreceivearray中

comport.close();

該**適合主從式通訊(一應一答方式)

C 串列埠操作實用類

做工業通訊有很長時間了,特別是串列埠 232 485 有vb vc c各種版本的串列埠操作 這些 也經過了多年的現場考驗,應該說是比較健壯的 但是目前卻沒有c 相對成熟的串列埠操作 最近用moxa的裝置開發基於wince5.0的串列埠操作 所以就擴充完善了一下串列埠操作,特別是sendcommand...

C 串列埠操作實用類

做工業通訊有很長時間了,特別是串列埠 232 485 有vb vc c各種版本的串列埠操作 這些 也經過了多年的現場考驗,應該說是比較健壯的 但是目前卻沒有c 相對成熟的串列埠操作 最近用moxa的裝置開發基於wince5.0的串列埠操作 所以就擴充完善了一下串列埠操作,特別是sendcommand...

C 串列埠操作實用類

做工業通訊有很長時間了,特別是串列埠 232 485 有vb vc c各種版本的串列埠操作 這些 也經過了多年的現場考驗,應該說是比較健壯的 但是目前卻沒有c 相對成熟的串列埠操作 最近用moxa的裝置開發基於wince5.0的串列埠操作 所以就擴充完善了一下串列埠操作,特別是sendcommand...