社区
硬件/系统
帖子详情
如何通过AT命令来操作MODEM;
linwd
2004-07-02 02:16:20
如题,急
怎样建立连接,发送及接受数据等
有示例代码更佳
感激不尽!!
...全文
555
34
打赏
收藏
如何通过AT命令来操作MODEM;
如题,急 怎样建立连接,发送及接受数据等 有示例代码更佳 感激不尽!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
34 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
linwd
2004-07-03
打赏
举报
回复
我们周末也要上班!
搞定了,原来是每个命令后面要加\r\n才能发送出去。因为在CreateFile的时候没指定读。
感谢!
zhangnanonnet
2004-07-02
打赏
举报
回复
明天是周末哦。。。。。。。
linwd
2004-07-02
打赏
举报
回复
还是不行,不知道什么问题。我下班了,明天再向你请教
今天麻烦你了,先谢过了。
zhangnanonnet
2004-07-02
打赏
举报
回复
或者你直接在LINK的代码中加入设置波特率
在createfile之后
int ZComm::set_baudrate(int baud_rate)
{
DCB dcb;
BOOL fsuccess;
fsuccess = GetCommState(idComDev, &dcb);
if (!fsuccess) return 0;
dcb.BaudRate =baud_rate;
dcb.ByteSize =8; //number of bits/byte, 4-8
dcb.Parity =NOPARITY;
dcb.StopBits =ONESTOPBIT;
dcb.EvtChar=0x02;
/*
dcb.fOutxCtsFlow = 1;
dcb.fDtrControl = 1;
dcb.fRtsControl = 2;
dcb.EofChar = 0;
*/
dcb.fOutxCtsFlow = 0;
dcb.fDtrControl = 0;
dcb.fRtsControl = 2;
dcb.EofChar = 0;
//dcb.fNull=TRUE;
fsuccess=SetCommState(idComDev, &dcb);
if (!fsuccess) return 0;
return 1;
}
应该就可以了
zhangnanonnet
2004-07-02
打赏
举报
回复
szPort 赋值"\\\\.\\com3", Baud_rate就是波特率,比如9600,115200之类的
zhangnanonnet
2004-07-02
打赏
举报
回复
可能是波特率的问题,你把打开串口的那部分(link)换成下面的代码试试
ZComm::open(char *szPort,int Baud_rate)
{
int retbuflength=0;
idComDev=CreateFile( szPort, GENERIC_READ | GENERIC_WRITE,
0, // exclusive access
NULL, // no security attrs
OPEN_EXISTING,
0, //is overlapped or no
NULL );
if (idComDev==(HANDLE) -1){
DWORD RR=GetLastError();
CloseHandle(idComDev) ;
fCOMMOpened=0;
return (0);
}
set_baudrate(Baud_rate);
fCOMMOpened=1;
SetupComm(idComDev,11520,2048);
PurgeComm(idComDev, PURGE_TXABORT | PURGE_RXABORT |
PURGE_TXCLEAR | PURGE_RXCLEAR ) ;
SetCommMask(idComDev, EV_RXFLAG );
//set time out
SetTimeOut(10,50,800);
return (1);
}
BOOL ZComm::SetTimeOut(DWORD ReadIntervalTimeout,
DWORD ReadTotalTimeoutMultiplier,
DWORD ReadTotalTimeoutConstant)
{
COMMTIMEOUTS timeouts;
GetCommTimeouts(idComDev,&timeouts);
timeouts.ReadIntervalTimeout=ReadIntervalTimeout;
timeouts.ReadTotalTimeoutMultiplier=ReadTotalTimeoutMultiplier;
timeouts.ReadTotalTimeoutConstant=ReadTotalTimeoutConstant;
return SetCommTimeouts(idComDev,&timeouts);
}
int ZComm::set_baudrate(int baud_rate)
{
DCB dcb;
BOOL fsuccess;
fsuccess = GetCommState(idComDev, &dcb);
if (!fsuccess) return 0;
dcb.BaudRate =baud_rate;
dcb.ByteSize =8; //number of bits/byte, 4-8
dcb.Parity =NOPARITY;
dcb.StopBits =ONESTOPBIT;
dcb.EvtChar=0x02;
/*
dcb.fOutxCtsFlow = 1;
dcb.fDtrControl = 1;
dcb.fRtsControl = 2;
dcb.EofChar = 0;
*/
dcb.fOutxCtsFlow = 0;
dcb.fDtrControl = 0;
dcb.fRtsControl = 2;
dcb.EofChar = 0;
//dcb.fNull=TRUE;
fsuccess=SetCommState(idComDev, &dcb);
if (!fsuccess) return 0;
return 1;
}
linwd
2004-07-02
打赏
举报
回复
好象命令根本就没发送出去,是不是有什么缓冲区要刷新的。
linwd
2004-07-02
打赏
举报
回复
我都改成一个了,两个都返回 true了,
可是我发送了命令好象没有被执行。怪了
zhangnanonnet
2004-07-02
打赏
举报
回复
你的link和SendStrCommand都返回true了?
zhangnanonnet
2004-07-02
打赏
举报
回复
对了,我给你的代码串口的句柄好像发送和接收是不一样的,你要确保他们的句柄都是LINK打开时候的句柄才行,你跟踪一下,是不是句柄无效的问题
linwd
2004-07-02
打赏
举报
回复
还是没反映
if(Link()){
puts("ok");
if (SendStrCommand("AT+GMM\r")) {
puts("send command ok");
Sleep(5000);
cout << ReceiveATInfo() << endl;;
}
Unlink();
}
else
puts("failed");
zhangnanonnet
2004-07-02
打赏
举报
回复
是有个时间差,但是很短。。。。sleep(10)就应该差不多了,如果单步调试都不能收到的话就是接收的有问题,你怎么决定AT指令发送成功了,是发ATD...拨大一个电话那个电话有反映吗?
linwd
2004-07-02
打赏
举报
回复
不知道是怎么会事,发什么命令都没有返回字符。
在调用发送指令后,马上调用获取返回值可以吗。中间是不是有个时间差
zhangnanonnet
2004-07-02
打赏
举报
回复
发送完了接收之前最好sleep(10)左右,具体的时间你可以自己测试一下
linwd
2004-07-02
打赏
举报
回复
呵呵,分当然不是问题。
多谢,不过好象还不能接收返回字符。一会就给分。
zhangnanonnet
2004-07-02
打赏
举报
回复
以下是一段我以前写的查找MODEM的代码,可能对你有用
我把通讯什么的都封装了,比如ResearchDev什么的,你就看过程就可以了
CString sDevComm, RetInfo;
int i, iBaut[] = {/*2400, 4800,*/ 9600, 14400, 19200, 38400, 57600, 115200};
char cInfo[100], cBaut[10];
memset(cInfo, 0, 100);
memset(cBaut, 0, 10);
i = 0;
m_Status2.SetWindowText("正在搜索GPRS设备...");
do
{
sDevComm = theApp.ResearchDev(iBaut[i]);
i++;
}
while(sDevComm.GetLength() == 0 && i<=16);
if (sDevComm.GetLength() == 0)
{
theApp.mobile.CloseComm();
m_Status2.SetWindowText("没有搜索到设备");
}
else
{
theApp.mobile.CloseComm();
sprintf(cInfo,
"搜索到设备在%s/%dbps,点击\"修改>>\"可以将设备设置更改到普通操作状态",
sDevComm, iBaut[i-1]);
sprintf(cBaut, "%d", iBaut[i-1]);
m_Baut1.SetWindowText(cBaut);
m_Status2.SetWindowText(cInfo);
}
zhangnanonnet
2004-07-02
打赏
举报
回复
哥们,我就差你这100分就10000分了。。。多多支持啊。
zhangnanonnet
2004-07-02
打赏
举报
回复
是的,一般这种通讯软件都是第一次一个一个找,每个MODEM都有一个指定的设备号,可以通过AT指令找到,或者你就发AT,那个COM返回OK你也可以认为是(这样就可能有多个MODEM连接你只选择第一个的情况,看你的实际情况了),当然在找的时候还有可能波特率不同,都是在第一次初始化的时候试出来的,然后把这些信息保留在一个INI文件中,下次就可以直接打开了。
linwd
2004-07-02
打赏
举报
回复
好了,能连上了。非常感谢。
现在就是有个问题,在我的机子上是COM3,在别人的机子上不一定是这个吧。
我怎么能获得哪个才是,难道要一个个试吗
zhangnanonnet
2004-07-02
打赏
举报
回复
怎么不行。。什么反应。
加载更多回复(14)
光环效应(HALO Effect)
文章指出,在过去一年中,Inflection、Character AI、Adept、Covariant、Windsurf 等公司采用了一种新颖的交易模式:收购方聘用初创公司核心团队(通常包括创始人与研究人员),同时获得其知识产权的非独家授权。文章强调,HALO 并非试图破坏创始人、员工与投资人之间的社会契约,反而是对这种契约在新环境下的一种保护机制——就如同过去 acquihire 曾在资金困难时帮助创始人让员工“软着陆”,HALO 也是在新的反垄断监管背景下寻找一种“合法又能回报股东”的方式。
光晕效应(Halo Effect)&振铃效应(Ringing Effect)
光晕效应是指在高对比度边界附近出现的过渡区域,这种过渡区域会使图像看起来不自然。它通常发生在使用平滑或模糊滤波器(如盒滤波器、均值滤波器)处理图像时。
PMP 管理学6大定律之四(光环效应)
1、定义: 光环效应(英文The Halo Effect),又称“晕轮效应”,属于心理学范畴,光环效应指人们对他人的认知判断首先是根据个人的好恶得出的,然后再从这个判断推论出认知对象的其他品质的现象。如果认知对象被标明是"好"的,他就会被"好"的光圈笼罩着,并被赋予一切好的品质;...
python给图像添加halo effect
https://github.com/tgilewicz/aug/blob/master/aug/ops/lighting.py https://stackoverflow.com/questions/50196881/how-to-make-scatter-plot-with-halo-effect-using-matplotlib
文件加壳器 FileLocker V1.1.0
一、功能介绍 ------------ 1. 任意格式加壳:视频、Office 文档、压缩包等都能封进一个 exe,格式无关。 2. 授权码分发:对方机器码 + 你生成的授权码,绑定这台电脑,转发无效。 3. 不提供试用:生成的 exe 必须输入授权码才能打开,内容不会被白嫖。 4. 文件清单(可选):加壳时可勾选「激活前展示文件清单」,对方未授权也能看到包里 有哪些文件、多大(仅文件名和大小,内容仍加密),用来打消"里面是不是空的"疑虑。 5. 永久授权(可选):发码时可勾选「永久」,生成不限日期的授权码,适合资料买断。 6. 仓库备份 / 换机:产品授权信息可一键导出、导入,换电脑不丢。
硬件/系统
2,644
社区成员
17,229
社区内容
发帖
与我相关
我的任务
硬件/系统
VC/MFC 硬件/系统
复制链接
扫一扫
分享
社区描述
VC/MFC 硬件/系统
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章