资源描述:
《modbus协议_PC实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、modbus协议-PC端的实现我使用C++Builder6.0调用Win32API实现的。首先开一个线程。void__fastcallTForm1::FormCreate(TObject*Sender){ReadComm=newTRead232(true);ReadComm->FreeOnTerminate=true;}通过一个按钮实现打开/关闭串口void__fastcallTForm1::Button1Click(TObject*Sender){if(Button1->Caption=="打开通讯端口")//按钮名称是"打开通讯端
2、口"?{char*ComNo;DCBdcb;StringTemp;Temp="COM"+IntToStr(rdCom->ItemIndex+1);//TRadioGroup*rdCom;定义要选择的串口ComNo=Temp.c_str();hComm=CreateFile(ComNo,GENERIC_READ
3、GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);if(hComm==INVALID_HANDLE_VALUE){MessageBox(0,"打开串口失败!!","SetError",MB_OK);
4、return;}GetCommState(hComm,&dcb);dcb.BaudRate=CBR_9600;dcb.ByteSize=8;dcb.Parity=NOPARITY;dcb.StopBits=ONESTOPBIT;if(!SetCommState(hComm,&dcb)){MessageBox(0,"打通讯端口设置错误!!","SetError",MB_OK);CloseHandle(hComm);return;}Timer1->Enabled=True;Button1->Caption="关闭串口";Shape1->B
5、rush->Color=clRed;//启动接收线程ReadComm->Resume();}else{Button1->Caption="打开通讯端口";CloseHandle(hComm);Shape1->Brush->Color=clBlack;Timer1->Enabled=False;ReadComm->Terminate();}}接收由线程TRead232完成void__fastcallTRead232::Execute(){SetName();//----Placethreadcodehere----if(!Termina
6、ted)Synchronize(ReadData);}//---------------------------------------------------------------------------void__fastcallTRead232::ReadData(){Form1->Caption="Updatedinathread";StringTemp;charinbuff[1024];DWORDnBytesRead,dwEvent,dwError;COMSTATcs;if(hComm==INVALID_HANDLE_VA
7、LUE){MessageBox(0,"串口失败!!","SetError",MB_OK);return;}ClearCommError(hComm,&dwError,&cs);Form1->Edit1->Text=cs.cbInQue;if(cs.cbInQue>sizeof(inbuff)){PurgeComm(hComm,PURGE_RXCLEAR);return;}ReadFile(hComm,inbuff,cs.cbInQue,&nBytesRead,NULL);inbuff[cs.cbInQue]=' ';Form1->M
8、emo1->Text=Form1->Memo1->Text+inbuff;}发送是定时器TIMER1触发,定时发送的。void__fastcallTForm1::Timer1Timer(TObject*Sender){charSendData[20];bytech;inti;unsignedlonglrc,BS;if(hComm==0)return;SendData[0]=0x41;SendData[1]=0x03;SendData[2]=0x00;SendData[3]=0x01;SendData[4]=0x00;SendData[
9、5]=0x04;SendData[6]=0x1b;SendData[7]=0x09;SendData[8]=' ';//BS=8;//StrLen(SendData);for(i=0;i<=7;i++){ch=Send