社区
COM/DCOM/COM+
帖子详情
怎样在VB中对多个下位机实现多机通信,要求的是发送的奇偶校验位为1,怎么做?在给等待。
Cerike
2004-04-24 03:59:22
我要用VB写多机通信的上位机通信程序,但是VB中只有一个MSCOMM不能实现谁有办法帮个忙。
但是想了一下可以用C写一个发送程序做成的DLL的文件,可是做不出来,大家帮个忙吧!
...全文
135
6
打赏
收藏
怎样在VB中对多个下位机实现多机通信,要求的是发送的奇偶校验位为1,怎么做?在给等待。
我要用VB写多机通信的上位机通信程序,但是VB中只有一个MSCOMM不能实现谁有办法帮个忙。 但是想了一下可以用C写一个发送程序做成的DLL的文件,可是做不出来,大家帮个忙吧!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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);
}
VB
实现
与
下位机
MODBUS通讯教程
VB
实现
与
下位机
MODBUS通讯教程,与PLC等串口通讯
VB
上位机与
下位机
通讯
VB
上位机与
下位机
通讯
VB
6.0环境下利用Mscomm控件
实现
串行
通信
VB
6.0环境下利用Mscomm控件
实现
串行
通信
modbus 协议
vb
上位机 slave模拟
下位机
modbus 协议
vb
编写 程序 实例,crc验证 ,
下位机
采用 modbus slave
实现
模拟 。 初学者 比较好 的 教程实例
(完整版)采用
VB
实现
组态软件与
下位机
的串行
通信
方法研究.doc
(完整版)采用
VB
实现
组态软件与
下位机
的串行
通信
方法研究.doc
COM/DCOM/COM+
864
社区成员
3,658
社区内容
发帖
与我相关
我的任务
COM/DCOM/COM+
VB COM/DCOM/COM+
复制链接
扫一扫
分享
社区描述
VB COM/DCOM/COM+
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章