怎样在VB中对多个下位机实现多机通信,要求的是发送的奇偶校验位为1,怎么做?在给等待。

Cerike 2004-04-24 03:59:22
我要用VB写多机通信的上位机通信程序,但是VB中只有一个MSCOMM不能实现谁有办法帮个忙。
但是想了一下可以用C写一个发送程序做成的DLL的文件,可是做不出来,大家帮个忙吧!
...全文
124 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sendwb 2004-05-12
  • 打赏
  • 举报
回复
用API函数打开串口进行通讯,这样灵活得多
hhyttppd 2004-05-04
  • 打赏
  • 举报
回复
gys_yxr(毛毛) 给他个DLL和调用说明不就行了,偶没搞过,但偶是学机械的,将来肯定要接触这方面的东西,学习。
Cerike 2004-05-04
  • 打赏
  • 举报
回复
我是用VB写的,不太明白,
tangxiaosan001 2004-05-04
  • 打赏
  • 举报
回复
同意。
dongge2000 2004-05-02
  • 打赏
  • 举报
回复
同意楼上
gys_yxr 2004-04-27
  • 打赏
  • 举报
回复
HANDLE hidcomdrv;
bool opened=false ;
extern"C"_declspec(dllexport)bool open(int nport,LPSTR Settings)
{

if (opened) return(true);
char spname[8];
DWORD dwerror;
DCB dcb;
wsprintf(spname,"COM%d",nport);
hidcomdrv=::CreateFile(spname,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,NULL);
if (hidcomdrv==INVALID_HANDLE_VALUE)
{
dwerror=::GetLastError();
AfxMessageBox("Can not Open Comm");
return(false);
}
if(::GetCommState(hidcomdrv,&dcb))
{
dcb.BaudRate=9600;
dcb.ByteSize =8;
dcb.fParity =0;
dcb.StopBits =0;
dcb.Parity =0;
// ::Beep(500,100);
if(!::SetCommState(hidcomdrv,&dcb))
{
AfxMessageBox("Can not Open Comm");
return(false);
}
else
{
opened=true;
AfxMessageBox(" Com is Opened");
return(opened);
}

}
else
{
opened=false;
AfxMessageBox(" Com is not Opened");
return(opened);
}

}
extern"C"_declspec(dllexport)bool close()
{
if(!opened||hidcomdrv==NULL)return(true);
::PurgeComm(hidcomdrv,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
::EscapeCommFunction(hidcomdrv,CLRDTR);
::CloseHandle (hidcomdrv);
AfxMessageBox("Comm is Colsed");
opened=false;
hidcomdrv=NULL;
return(true);
}
extern"C"_declspec(dllexport)int readStr(LPSTR buffer)
{
int rlen;
if (!opened||hidcomdrv==NULL)return(0);
DWORD dwbytesread,dwerrorflags;
COMSTAT comstat;
static OVERLAPPED ovread;
::ClearCommError (hidcomdrv,&dwerrorflags,&comstat);
dwbytesread=(DWORD)comstat.cbInQue ;
rlen=(int)dwbytesread;
::Beep(500,100);
if (rlen>300)
{
dwbytesread=(DWORD)300;
}
if(!::ReadFile(hidcomdrv,buffer,dwbytesread,&dwbytesread,&ovread))
{
::GetLastError ();
::Beep(5000,1000);
return(0);
}
else
{
rlen=(int)dwbytesread;
::Beep(500,100);
return(rlen);
}
}
extern"C"_declspec(dllexport)int writeStr(LPSTR buffer,int wlen)
{
// char spname[8];
if (!opened||hidcomdrv==NULL)return(0);
DWORD dwbyteswritten=0;
static OVERLAPPED ovwrite;
dwbyteswritten=(DWORD)wlen;
if(!::WriteFile (hidcomdrv,buffer,dwbyteswritten,&dwbyteswritten,&ovwrite))
{
::GetLastError();
::Beep(5000,1000);
return(0);
}
else
{
// wsprintf(spname,"Ret%d",(int)dwbyteswritten);
// AfxMessageBox(" ");
::Beep(500,100);
return((int)dwbyteswritten);
}
}
extern"C"_declspec(dllexport)bool settime(int time)
{
LPCOMMPROP cp;
COMMTIMEOUTS to;
cp=(LPCOMMPROP)malloc(1000);
if(!::GetCommProperties(hidcomdrv,cp))
{
return(false);
}
if (!(cp->dwProvCapabilities &PCF_TOTALTIMEOUTS))
{
AfxMessageBox("Comm OUTTIME SET IS CLOSED");
return(false);
}
to.ReadIntervalTimeout =0;
to.ReadTotalTimeoutMultiplier =0;
to.ReadTotalTimeoutConstant =time;
to.WriteTotalTimeoutMultiplier =0;
to.WriteTotalTimeoutConstant =time;
// ::Beep(500,100);
if(!::SetCommTimeouts (hidcomdrv,&to))
{
return(false);
}
return (true);
}

863

社区成员

发帖
与我相关
我的任务
社区描述
VB COM/DCOM/COM+
c++ 技术论坛(原bbs)
社区管理员
  • COM/DCOM/COM+社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧