作者:不详出处:网络转载2011/10/1016:01:52阅读0次
我们知道对于标准DLL,可以采用DllImport进行调用。例如:[DllImport("XXX")]
privatestatice_ternintOpenPort(intPortNum,intBaudRate);
(报表生成控件)(完美的用户界面解决方案)(慧都独家
)如果一些厂家比较懒的话,没有提供相应的dll,我们只能对它进行串口通信编程了。以前从没接触过串口编程,最近在一个项目中有几个地方都需要采用串口通信,跟公司一个老手请教后,感觉学到了很多东西,特在此做个总结:
一:首先我们来认识下什么是串口:
右键我的电脑-管理-设备管理器-端口,选择一个端口,点击属性。串口通信总结C
我们可以看到该串口的属性,在C中我们使用SerialPort类来表示串口
ConfigClassconfig=newConfigClass();
XXX.PortName=XXX("SendHealCard");
波特率
XXX.BaudRate=9600;
数据位
XXX.DataBits=8;
两个停止位
XXX.StopBits=XXXXXX.One;
无奇偶校验位
XXX.Parity=XXXXXX.None;
XXX.ReadTimeout=100;
XXX.WriteTimeout=-1;
二:串口调试工具:
在对串口进行编程时候,我们要向串口发送指令,然后我们解析串口返回的指令。在这里向大家推荐一款工具。
串口调试助手.e_e
将要发送的指令用空格隔开,选择HE_显示为放回的字符串。三:正式编程:
编写Comm类:
publicclassComm
publicdelegatevoidEventHandle(byte[]readBuffer);
publiceventEventHandleDataReceived;
publicSerialPortserialPort;
Threadthread;
volatilebool_keepReading;
publicComm()
serialPort=newSerialPort();
thread=null;
_keepReading=false;
publicboolIsOpen
XXX;
privatevoidStartReading()
if(!_keepReading)
_keepReading=true;
thread=newThread(newThreadStart(ReadPort));
XXX();
privatevoidStopReading(){
if(_keepReading)
_keepReading=false;
XXX();
thread=null;
privatevoidReadPort(){
while(_keepReading)
if(XXX)
intcount=XXX;if(count>0)
byte[]readBuffer=newbyte[count];try
XXX();
XXX(readBuffer,0,count);if(DataReceived!=null)
DataReceived(readBuffer);XXX(100);
catch(TimeoutE_ception){
publicvoidOpen(){
Close();
XXX();
if(XXX)
StartReading();
else
XXX("串口打开失败!");
publicvoidClose()
StopReading();
XXX();
publicvoidWritePort(byte[]send,intoffSet,intcount){
if(IsOpen)
XXX(send,offSet,count);
注册串口:
Commcomm=newComm();
ConfigClassconfig=newConfigClass();
XXX.PortName=XXX("SendHealCard");波特率
XXX.BaudRate=9600;
数据位
XXX.DataBits=8;
两个停止位
XXX.StopBits=XXXXXX.One;
无奇偶校验位
XXX.Parity=XXXXXX.None;
coXXX.ReadTimeout=100;
coXXX.WriteTimeout=-1;
XXX();
if(XXX)
XXX.EventHandle(comm_DataReceived);}
发送指令:
/
/发卡到机口
/
privatevoidSendCardToOut()
is_read_card=false;
sendCardToOut=true;
byte[]send={0_02,0_46,0_43,0_34,0_03,0_30};
if(XXX)
XXX(send,0,XXX);
收到指令,并解析:
voidcomm_DataReceived(byte[]readBuffer1)
XXX(XXX(readBuffer));
if(XXX)
receive=XXX(readBuffer1);
stringstr="06";
if(XXX(XXX(),str,XXX)){
if(is_read_card)
byte[]send=newbyte[1];
send[0]=0_05;
XXX(send,0,XXX);
XXX(500);
XXXceived-=XXX(comm_DataReceived);
InitReadComm();
if(sendCardToOut)
byte[]send=newbyte[1];
send[0]=0_05;
XXX(send,0,XXX);
readComm.DataReceived-=XXX(readComm_DataReceived);XXX();
XXX("发卡完成!");
XXX"发卡成功!";
XXX"发卡完成,请收好卡!";
XXX(timer1_Tick);
PlaySound();
XXXXXX;
catch(E_ceptione_)
XXX(XXX());
至此,串口通信编程告一段落