关于串口读写的问题。 [问题点数:80分,结帖人tuzhenqiao]

Bbs1
本版专家分:47
结帖率 95%
Bbs9
本版专家分:55407
Blank
黄花 2009年4月 .NET技术大版内专家分月排行榜第二
2009年3月 .NET技术大版内专家分月排行榜第二
Blank
蓝花 2009年5月 .NET技术大版内专家分月排行榜第三
Bbs6
本版专家分:5149
Bbs4
本版专家分:1026
Bbs1
本版专家分:47
一个关于串口读写问题.
我在编写一个<em>串口</em>通信的程序中遇到了<em>问题</em>,请高手指点。rn这是一个辅助线程,rnUINT ComPro(LPVOID pParam)rnrn TRACE("ComPro()\n");rn OVERLAPPED os;rn DWORD dwMask,dwTrans;rn COMSTAT ComStat;rn DWORD dwErrorFlags;rn CSerialPortDoc* pDoc=(CSerialPortDoc*) pParam;rn memset(&os,0,sizeof(OVERLAPPED));rn os.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);rn if(os.hEvent==NULL)rn rn AfxMessageBox("Can't creat event object");rn return (UINT)-1;rn rnrn while(pDoc->m_bConnected)rn rn if(!::ClearCommError(pDoc->m_hCom,&dwErrorFlags,&ComStat))rn TRACE("ClearCommError--failed\n");rn TRACE("ComStat.cbInQue=%d\n",ComStat.cbInQue);rn if(ComStat.cbInQue)rn rn TRACE("ComStat.cbInQue\n");rn TRACE("READY TO POSTMESSAGE\n");rn WaitForSingleObject(pDoc- >m_hPostMsgEvent,INFINITE);rn ::ResetEvent(pDoc->m_hPostMsgEvent);rn TRACE("PostMessage\n");rn ::PostMessage(pDoc->m_hTermWnd,WM_COMMNOTIFY,EV_RXCHAR,0);rn continue;rn rn dwMask=0;rn TRACE("WaitCommEvent()\n");rn //////////////////////////////////////////////////////////////////////rn if(!WaitCommEvent(pDoc->m_hCom,&dwMask,&os))rn rn if(GetLastError()==ERROR_IO_PENDING)rn rn TRACE("Thread::GetOverlappedResult()begin\n");rn ::GetOverlappedResult(pDoc->m_hCom,&os,&dwTrans,TRUE);//********************rn TRACE("Thread::GetOverlappedResult()returned\n");rn rn elsern rn CloseHandle(os.hEvent);rn TRACE("return -1\n");rn return (UINT)-1;rn rn rn rn ///////////////////////////////////////////////////////////////////////////////rn ::CloseHandle(os.hEvent);rn return 0;rnrn在主程序中有SetCommMask(m_hCom,EV_RXCHAR);及SetupComm(m_hCom,1024,1024);rnrn程序运行到******处,好像就被阻塞了,debug时只有Thread::GetOverlappedResult()begin而无Thread::GetOverlappedResult()returned。而如果我把********这行注释掉的话,则直接进入else程序段,而结束线程。这一点我就不明白,WaitCommEvent()没有立即返回,怎么会由后面的代码而决定GetLastError()的返回值呢?rnrn另外,用SetupComm()来设置缓存就可以了吗?不需要其他的工作,WriteFile和ReadFile就能<em>读写</em>缓存了吗?rnrn对于SetCommMask()和WaitCommEvent(HANDLE hFile, LPDWORD lpEvtMask, OVERLAPPED lpOverlapped)我理解的不是很清晰,我的个人理解是:SetCommMask()指定要通知的事件,而WaitCommEvent()等待指定的事件发生,指定的事件发生后,OVERLAPPED结构的hEvent被置为有信号,但是LPDWORD lpEvtMask的作用我不太明白,他是只指示被指定的事件,还是指示所有事件如果多个事件同时发生,它的值又是什么rn呢?rnrnrnrnrn
关于多线程读写串口问题
谁能提供一个用API函数实现的例子,谢谢!
关于串口读写
向各位请教几个<em>问题</em>rn 1 在多文档界面下是否可以使用mscomm控件?rn 2 在使用文件读取<em>串口</em>的方式下,如果使用了事件驱动方式的EV_RXCHAR,rn 那么在READFILE中可以连续读取几个字节?如果想一次读取的数据较长rn 怎么办?rn
关于读写串口的参数
在论坛看到几位仁兄,写了如下代码进行初始化rn第二个参数为什么是0x80,0x0c...等,这些是一个标准吗?,还有其他的标准数据吗?rn能不能贴出来,或者有什么电子书,小弟先谢了rnrnoutportb(COM + 3,0x80); //0x3fb is LCRrn outportb(COM,0x0c); //设波特率rn outportb(COM + 1,0x00 ); //0x3f9 is ?rn outportb(COM + 3,0x1f); //0x3fb,0001,1111,设数据位,停止位rn outportb(COM + 4,0x08|0x0b);
*******关于 kylix下串口读写**********
linux下rn可把<em>串口</em>当做文件/dev/ttyS0<em>读写</em>rn但是在程序里设置波特率不知怎么做到rnrn有没有类似mscomm的控件可用???rn
Linux_C_C++串口读写串口读写
串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。常用的<em>串口</em>是 RS-232-C 接口(又称 EIA RS-232-C)它是在 1970 年由美国电子工业协会(EIA)联合贝尔系统、 调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是"数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准"该标准规定采用一个 25 个脚的 DB25 连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。传输距离在码元畸变小于 4% 的情况下,传输电缆长度应为 50 英尺。 Linux 操作系统从一开始就对串行口提供了很好的支持
串口读写问题
设备A通过485接线连接两个子设备A1和A2rnA要接收A1和A2的数据,如果是不同时间内的数据接收,那处理没<em>问题</em>。rn开一个线程,收到什么就处理什么。rnrn但是 当A1和A2同时发送数据至A的时候rn我想通过多线程让A接收, 可是领导说485是<em>串口</em>通讯,<em>串口</em>是串行的,无法并发rn所以要么接收到A1的数据,要么接收到A2的数据rn同时单独处理A1和A2的数据是不可能的rnrn请问他这个说法对吗?我不能收到A1+A2的一串数据吗?然后把它分解成A1和A2,再单独处理rnrnrnrn
读写串口问题
我这里有一个顾客显示屏,是证通ZT312型汉字顾客显示屏rn操作显示屏的方式是通过向<em>串口</em>发命令,我使用Delphi7.0做了个程序,使用了SPComm控件向<em>串口</em>发命令rn现在有以下两个<em>问题</em>:rn1、当我要在显示屏上显示三行文字rn如果我连续发三个命令:rn命令1;//显示第一行rn命令2;//显示第二行rn命令3;//显示第三行rn这时第三行就显示不出来rnrn如果我这样发命令:rn命令1;//显示第一行rn命令2;//显示第二行rnsleep(1000);rn命令3;//显示第三行rn这时第三行就可以正确显示出来rnrn请问这是为什么?rn注:以上的命令1,2,3都是用SPComm控件向<em>串口</em>发命令rnrn2、当比较连续(时间间隔较短)的向<em>串口</em>发送了多条显示命令后,显示屏会死机,不再对命令有反应,只能重新给显示屏上电后才能恢复正常,请问是为什么?
linux下串口读写问题
各位大虾:rn 小弟现在做<em>串口</em>通讯<em>问题</em>,是在linux环境下。rn 写<em>串口</em>数据没有<em>问题</em>,因为我调用我的写<em>串口</em>程序,写入<em>串口</em>数据后,在电脑的<em>串口</em>调试工具中能够看到我写的内容。但是我在调用我的<em>串口</em>数据时发生了错误.rn 错误如下:rn [color=#FF0000] 在使用<em>串口</em>调试工具想<em>串口</em>发送数据时,在需要发送的数据前面 如果不加回车的话 无法读取<em>串口</em>数据。必须在发送数据的前面加一个回车键 才可以。 真不知道怎么回事,都好几天了。代码如下[/color]rn 如果不加回车键 只能在 ioctl(fd,FIONREAD,&nbytes);//查询输入缓冲区中的字节数 中 输出缓冲区写入的字节大小 而读<em>串口</em>返回值确实0!!!rn int serialopen(char *device)rnrn rn int fd;rn struct termios tios;rn speed_t speed = B115200;rn if ((fd = open(device, O_RDWR|O_NOCTTY)) < 0)rn rn CALOG(">>>>>open serial device erro<<<<<>>>>cfsetospeed setting seer<<<<<>>>>cfsetispeed setting seer<<<<<>>>>>>>>>>tcsetattr setting erro<<<<<<<<<<<>>>>>>>>>nbytes = %d<<<<<<>>>>>>>>>rtrtrtr<<<<<<>>>>>>>>>nbyte[%d] = %d<<<<<<>>>>>>>>>ptr[0] = %d<<<<<<>>>>>>>>>ptt[%d] = %d<<<<<<>>>>>>>>>read serial erro<<<<<<>>>>>>>>>the data is null<<<<<<<>>>>>>>>>ptt[%d] = %d<<<<<<<>>>>>>>>>ptt = %s<<<<<<<,ptt);rn return count-1;rn 分数不多 还请各位大神帮帮忙啊
C#API读写串口问题
rn由于我需要在wince下运行,不能使用重叠功能,现在出现读一直挂起(没有读到数据时)rn[code=C#] //打开<em>串口</em>rn public int Com_Open(string ComSet, int BaudRate)rn rnrn int hCommFile;rn DCB dcb = new DCB();rn COMMTIMEOUTS TimeOuts = new COMMTIMEOUTS();rnrnrn hCommFile = CreateFile( ComSet,rn GENERIC_READ | GENERIC_WRITE,rn 0, //not sharedrn 0, //no security ??rn OPEN_EXISTING,rn 0,rn 0 );rnrn if(hCommFile == INVALID_HANDLE_VALUE)rn rn throw(new ApplicationException("Comm Port Can Not Be Opened"));rn rnrn // Is this a valid comm handle?rn if(GetFileType( hCommFile ) != FILE_TYPE_CHAR)rn rn CloseHandle( hCommFile );rn //throw(new ApplicationException("File handle is not a comm handle "));rn return INVALID_HANDLE_VALUE;rnrn rnrn if(!SetupComm( hCommFile, 4096, 4096 ))rn rn CloseHandle( hCommFile );rn //throw(new ApplicationException("Cannot setup comm buffer"));rn return INVALID_HANDLE_VALUE;rn rnrn // purge any information in the bufferrnrn PurgeComm( hCommFile, PURGE_TXABORT | PURGE_RXABORT |rn PURGE_TXCLEAR | PURGE_RXCLEAR ) ;rnrn // Setting the time-out valuern GetCommTimeouts( hCommFile, ref TimeOuts );rnrn // The CommTimeout numbers will very likely change if you arern // coding to meet some kind of specification wherern // you need to reply within a certain amount of time afterrn // recieving the last byte. However, If 1/4th of a secondrn // goes by between recieving two characters, its a goodrn // indication that the transmitting end has finished, evenrn // assuming a 1200 baud modem.rnrn TimeOuts.ReadIntervalTimeout=500;rn TimeOuts.ReadTotalTimeoutMultiplier=500;rn TimeOuts.ReadTotalTimeoutConstant=5000;rn TimeOuts.WriteTotalTimeoutMultiplier=500;rn TimeOuts.WriteTotalTimeoutConstant=5000;rnrn SetCommTimeouts(hCommFile, ref TimeOuts); // 设置超时rnrn // Configure the comm settings.rn // NOTE: Most Comm settings can be set through TAPI, but this means thatrn // the CommFile will have to be passed to this component.rn GetCommState(hCommFile, ref dcb);rnrn dcb.BaudRate = 28800;//BaudRate; // 波特率为rn dcb.ByteSize=8; // 每个字符有8位rn dcb.Parity = PAIRTY_EVEN; //奇偶校验rn dcb.StopBits=ONESTOPBIT; //一个停止位rn rn SetCommState(hCommFile, ref dcb);rn Opened = true;rn return hCommFile;rnrn rnrn //写<em>串口</em>rn public int ComReadFile(int ihCommFile, byte[] Readbuff, int ReadLen)rn rn if (ihCommFile != INVALID_HANDLE_VALUE)rn rn int NumberOfBytesTransferred = 0;rn OVERLAPPED ovlCommPort = new OVERLAPPED();rn if (ReadFile(ihCommFile, Readbuff, ReadLen, ref NumberOfBytesTransferred, ref ovlCommPort))//rn rn if (ReadLen == NumberOfBytesTransferred)rn rn return NumberOfBytesTransferred;rn rn else return NumberOfBytesTransferred;rnrn rn else return 0;rn rn else return 0;rn rn[/code]rn请问读,为何会挂起,我设置了超时,为何超时后不返回。我想超时后返回,如何写代码,注意,这是wince下使用,不是xp平台。
多线程串口读写问题???/????
先向<em>串口</em>写数据后要等待回应,大概200ms时间,如果无回应则要求用户重新写<em>串口</em>,若有回应则开始<em>串口</em>接收线程。这个过程怎样实现????rnrn等待<em>串口</em>回应是不是要设置一个定时器呢?rn等待回应是不是要单独一个线程呢?但是这个线程只需运行不到1秒的时间啊?怎么实现?rn谢谢!!!
Linux串口读写问题
大家帮忙看看以下<em>串口</em><em>读写</em>程序,我(pc机)给单片机发0x11单片机收到会发0x22过来,但是我有时候可以读到0x22有时读不到,那有<em>问题</em>?谢谢!rnrn#include rn#include rn#include rn#include rn#include rn#include rn#include rn#include rn#include rnrnint fd;rnrnint init_port()rnrn printf("init function begin\n");rn rn /*------------open the port-----------*/rn fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);rnrn if (-1 == fd)rn perror("Can't open serial port ");rn elsern printf("Open ttyS0\n");rnrn if(fcntl(fd, F_SETFL, 0) >= 0)rn printf("fcntl success!\n");rn elsern perror("fcntl ");rnrn if(isatty(STDIN_FILENO) == 0)rn printf("Standard input is not a terminal device\n");rn elsern printf("Isatty success!\n");rnrn printf("fd-open = %d\n", fd);rnrn /* set baud rate */rn struct termios oldtio, newtio;rnrn bzero(&oldtio, sizeof(oldtio));rn bzero(&newtio, sizeof(newtio));rn cfmakeraw(&newtio);rn rn //tcflush(fd, TCIOFLUSH);rnrn tcgetattr(fd, &oldtio);rnrn cfsetispeed(&newtio, B19200);rn cfsetospeed(&newtio, B19200);rnrn newtio.c_cflag |= CLOCAL; //rn newtio.c_cflag |= CREAD; //rn newtio.c_cflag &= ~CRTSCTS; //hardware flow controlrn newtio.c_cflag &= ~CSIZE; //rn newtio.c_cflag &= ~CSTOPB; //1 stop bitrn newtio.c_cflag &= ~PARENB; //Clear parity enablern newtio.c_cflag |= CS8; //8 bits datarnrn newtio.c_oflag &= ~OPOST;rn newtio.c_cc[VMIN] = 1; //min wait charsrn newtio.c_cc[VTIME] = 1; //wait timern tcflush(fd, TCIOFLUSH);rnrn tcsetattr(fd, TCSANOW, &newtio); //new setuprn tcgetattr(fd, &oldtio);rnrn printf("init function end\n\n");rn return 0;rnrnrnvoid read_serial()rnrn printf("read function begin\n");rnrn int len = 0;rn int buff[10];rn memset(buff, 0, 10);rnrn printf("fd = %d\n",fd);rnrn fd_set fs_read;rn FD_ZERO( &fs_read );rn FD_SET(fd, &fs_read);rn int fs_sel;rn struct timeval timeout;rn timeout.tv_sec = 5;rn timeout.tv_usec = 0;rnrn fs_sel = select(fd+1, &fs_read, NULL, NULL, &timeout);rn if(fs_sel)rn rn len = read(fd, buff, 1);rn perror("select"); rn printf("read nread = %d, 0x%2x\n", len, buff[0]);rn rn else if(fs_sel < 0)rn perror("select error");rnrn printf("buff = %s\n", buff);rn printf("no read nread = %d\n", len);rnrn printf("read function end\n\n");rnrnrnint write_serial(int data)rnrn printf("write function begin\n");rnrn int fs_sel;rn int len = 0;rn fd_set fs_write;rnrn FD_ZERO( &fs_write );rn FD_SET(fd, &fs_write);rnrn fs_sel = select(fd+1, NULL,&fs_write, NULL, NULL);rn rn if(fs_sel)rn rn len = write(fd, &data, 1);rn if(len == 1)rn rn printf("Send char 0x%2x to Comm\n", data);rn return len;rn rn elsern rn perror("PortSend write error");rn tcflush(fd, TCOFLUSH);rn printf("send data is = %d\n", data);rn return -1;rn rn rn else if(fs_sel);rn return 0;rn
串口数据读写问题
我要控制U盘数据的<em>读写</em>,只能从U盘读数据,可以删除U盘数据。不能往U盘写数据。请大家指点
串口读写格式问题
在vc里面,我想往<em>串口</em>写入一个字节,比如0x14的话,是不是我定义一个BYTE类型的变量rn如BYTE buf=20;然后用writefile( ,buf,)这个函数写到<em>串口</em>上,<em>串口</em>就能读出来这个字节是0x14??rn还是我必须要在writefile之前就先把十进制的20转化为0x14,然后在writefile呢,这两种方法,效果一样么?<em>串口</em>都是读到的0x14么?
linux串口读写问题
#define RSDEV_NAME "/dev/tts/0"rnrn/*rn*brief 设置<em>串口</em>通信速率rn*param fd 类型 int 打开<em>串口</em>的文件句柄rn*param speed 类型 int <em>串口</em>速度rn*return voidrn*/rnint speed_arr[] = B38400, B19200, B9600, B4800, B2400, B1200, B300,rn B38400, B19200, B9600, B4800, B2400, B1200, B300, ;rnint name_arr[] = 38400, 19200, 9600, 4800, 2400, 1200, 300, 38400, rn 19200, 9600, 4800, 2400, 1200, 300, ;rnvoid set_speed(int fd, int speed)rn int i; rn int status; rn struct termios Opt;rn tcgetattr(fd, &Opt); rn for ( i= 0; i < sizeof(speed_arr) / sizeof(int); i++) rn if (speed == name_arr[i]) rn tcflush(fd, TCIOFLUSH); rn cfsetispeed(&Opt, speed_arr[i]); rn cfsetospeed(&Opt, speed_arr[i]); rn status = tcsetattr(fd, TCSANOW, &Opt); rn if (status != 0) rn perror("tcsetattr fd1"); rn return; rn rn tcflush(fd,TCIOFLUSH); rn rn rnrnrn/**rn*brief 设置<em>串口</em>数据位,停止位和效验位rn*param fd 类型 int 打开的<em>串口</em>文件句柄rn*param databits 类型 int 数据位 取值 为 7 或者8rn*param stopbits 类型 int 停止位 取值为 1 或者2rn*param parity 类型 int 效验类型 取值为N,E,O,,Srn*/rnint set_parity(int fd,int databits,int stopbits,int parity)rn rn struct termios options; rn if ( tcgetattr( fd,&options) != 0) rn perror("SetupSerial 1"); rn return(FALSE); rn rn options.c_cflag &= ~CSIZE; rn switch (databits) /*设置数据位数*/rn rn case 7: rn options.c_cflag |= CS7; rn break;rn case 8: rn options.c_cflag |= CS8;rn break; rn default: rn fprintf(stderr,"Unsupported data size\n"); rn return (FALSE); rn rn switch (parity) rn rn case 'n':rn case 'N': rn options.c_cflag &= ~PARENB; /* Clear parity enable */rn options.c_iflag &= ~INPCK; /* Enable parity checking */ rn break; rn case 'o': rn case 'O': rn options.c_cflag |= (PARODD | PARENB); /* 设置为奇效验*/ rn options.c_iflag |= INPCK; /* Disnable parity checking */ rn break; rn case 'e': rn case 'E': rn options.c_cflag |= PARENB; /* Enable parity */ rn options.c_cflag &= ~PARODD; /* 转换为偶效验*/ rn options.c_iflag |= INPCK; /* Disnable parity checking */rn break;rn case 'S': rn case 's': /*as no parity*/ rn options.c_cflag &= ~PARENB;rn options.c_cflag &= ~CSTOPB;rn break; rn default: rn fprintf(stderr,"Unsupported parity\n"); rn return (FALSE); rn rn /* 设置停止位*/ rn switch (stopbits)rn rn case 1: rn options.c_cflag &= ~CSTOPB; rn break; rn case 2: rn options.c_cflag |= CSTOPB; rn break;rn default: rn fprintf(stderr,"Unsupported stop bits\n"); rn return (FALSE); rn rn /* Set input parity option */ rn if (parity != 'n' && parity != 'N') rn options.c_iflag |= INPCK; rn tcflush(fd,TCIFLUSH);rn options.c_cc[VTIME] = 30; /* 设置超时3 seconds*/ rn options.c_cc[VMIN] = 0; /* Update the options and do it NOW */rn /**rn *如果不是开发终端之类的,只是<em>串口</em>传输数据,rn *而不需要<em>串口</em>来处理,那么使用原始模式(Raw Mode)方式来通讯rn **/rn options.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON | IXOFF | IXANY);rn options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG |IEXTEN);rn options.c_oflag &= ~OPOST;rn rn if (tcsetattr(fd,TCSANOW,&options) != 0) rn rn perror("SetupSerial 3"); rn return (FALSE); rn rn return (TRUE); rnrnrn/**打开<em>串口</em>rn * dev <em>串口</em>设备名rn * mode 打开方式rn**/rnrnint opendev(char *dev,mode_t mode)rnrn int fd;rn fd = open(dev, mode); rn if (-1 == fd) rn perror("Can't Open Serial Port");rn return -1; rn rn elsern fcntl(fd, F_SETFL, FNDELAY);rn return fd;rn rnrn/********************************** input232.c 写<em>串口</em>********************************/rnrnrnvoid rs232_write(void)rnrn rn int rsfd = 0;rn int nwrite;rn char input_buf[64];rn rsfd = opendev(RSDEV_NAME,O_RDWR | O_NOCTTY | O_NDELAY);rn if(rsfd < 0)rn printf("open error:\n");rn return;rn rn set_speed(rsfd,9600); /*设置速率B9600*/rn if (set_parity(rsfd,8,1,'N') == FALSE) /*8位数据位,一位停止位*/rn printf("Set Parity Error\n");rn return;rn rn while(1) rn fgets(input_buf,sizeof(input_buf),stdin);rn printf("input_buf = %s", input_buf);rn nwrite = write(rsfd, input_buf, strlen(input_buf));rn if ( nwrite == -1 ) rn perror("ERROR!");rn exit(1);rn else rn printf("ret=%d\n", nwrite);rn rn rnrn/********************************** read232.c 读<em>串口</em>********************************/rnrnrnint read_rs232(int rsfd);rnvoid rs232_read(void)rnrn rn int rsfd = 0;rn// int nwrite;rn fd_set fdR;rn struct timeval timev;rn int n = 0;rn// char input_buf[64];rn rsfd = opendev(RSDEV_NAME,O_RDWR | O_NOCTTY | O_NDELAY);rn if(rsfd < 0)rn printf("open error:\n");rn return;rn rn set_speed(rsfd,9600); /*设置速率B9600*/rn if (set_parity(rsfd,8,1,'N') == FALSE) /*8位数据位,一位停止位*/rn printf("Set Parity Error\n");rn return;rn rn while(1) rn FD_ZERO(&fdR);rn FD_SET(rsfd, &fdR);rn timev.tv_sec = 0;rn timev.tv_usec = 100000;rn n = select(rsfd+1, &fdR, NULL, NULL, &timev);rn LOGMSG2("select ret %d", n);rn if(n 0)rn rn printf("nread:%d\n",nread);rn retbytes += nread;rn all_bytes += nread;rn rn return all_bytes;rnrnrn为什么rs232_read函数总是读取不到数据,在LOGMSG2("select ret %d", n);rn这里总是返回0????rn
多线程读写串口问题.....
[color=#FF0000]m_send="AT+CMGL=4\r"rnWriteFile(hCom,m_send,dwCount,&dwCount,NULL);rnchar ans1[1000];rnReadComm(ans1, 1000);rnrn.........[/color]rnrn这是线程1中执行的。rnrnrn[color=#0000FF]m_send="AT\r"rnWriteFile(hCom,m_send,dwCount,&dwCount,NULL);rnrnrnchar ans2[1000]; // 应答串rnrnReadComm(ans2, 1000);rnrnAfxMessageBox(ans2);[/color]rnrn这是线程2执行的。rnrn其实偶只想得到AT返回的OK结果,现在是多了,AT+CMGL=4后取得的结果.rnrn是否这样表述正确,就是怎么把rn"m_send="AT+CMGL=4\r"rnWriteFile(hCom,m_send,dwCount,&dwCount,NULL);rn""rn这一句的执行后的<em>串口</em>数据清理干净。。rn
求救!串口读写问题
我写了一个<em>读写</em><em>串口</em>的程序,我往<em>串口</em>上写入一个命令,cts-2000就发送一批数据到<em>串口</em>,然后我的程序接收。<em>问题</em>是有的时候程序能正常运行,即发了命令就能接到数据,但有的时候却接不到数据。有时候把cts-2000重启就好了,有的时候重启多遍也没用。我想不明白这是为什么,难道是什么参数我没设????救命!!!!
急:读写串口问题
我是一个新手,想在vc或c中如何对<em>串口</em>操作?最好有源代码,如果觉得分数太少,可以在给!rn
串口读写超时问题
用SetCommTimeouts()设置完COMTIMEOUTS结构体,但是我如何能够得到<em>读写</em>超时的事件或回调函数呢?超时是怎么体现出来的呢?
串口异步读写问题
DWORD WINAPI SerialPort1ThreadProcess( HWND hWnd) //主窗口句柄rnrn DWORD dwEvtMask = 0;rn OVERLAPPED osRead = 0;rn CSerialPortAPIDlg *pdlg = (CSerialPortAPIDlg*)CWnd::FromHandle(hWnd);rn WaitCommEvent(pdlg->hCom, &dwEvtMask, &osRead);rn SetCommMask(pdlg->hCom, EV_RXCHAR| EV_TXEMPTY);rn if((dwEvtMask&EV_RXCHAR)==EV_RXCHAR)rn rn COMSTAT comstat;rn DWORD dwlength;rn DWORD dwbytesread; //读取的字节数rn DWORD dwerror;rn DWORD *lpRead=NULL;rn DWORD dwerrorflags;rn ClearCommError(pdlg->hCom, &dwerrorflags, &comstat);rn dwlength = comstat.cbInQue;rn if(dwlength>0)rn rn BOOL freadstat;rn freadstat = ReadFile(pdlg->hCom, lpRead, dwlength, &dwbytesread, &osRead);rn if(! freadstat) rn rn if(GetLastError()==ERROR_IO_PENDING)rn rn while(!GetOverlappedResult(pdlg->hCom, &osRead, &dwbytesread, true))rn rn dwerror=GetLastError();rn if(dwerror==ERROR_IO_INCOMPLETE)rn continue;rn ::PostMessage((HWND)hWnd, COM_RECVDATA, (unsigned int)lpRead, dwbytesread);rn rn rn rn rn rn return true;rnrnrnrn初学,现在程序编译通过,但是<em>读写</em>还是不成功,郁闷,因为比较急就请大家帮下忙,谢谢!
串口读写问题请教
LInux下面我写了一个写<em>串口</em>的函数,一直往<em>串口</em>写字符串“this is a test”,然后通过<em>串口</em>调试工具看输出的内容,开始还是正确的,可是后来就不对了,请大哥给予小弟指点,谢谢!rnrn代码如下:rnrnopen_port(const char *port_p)rnrn int fd; rnrn rn fd=open(port_p,O_RDWR|O_NONBLOCK);rn rn if(fd==-1)rn perror("Open port: Unable to open the serial port\n");rn return 0;rn rn rnrn return fd;rnrnrnrnrnint fdcom2;rnfdcom2=open_port("/dev/ttyS1");rnwhile(1)rnwrite(fdcom2, "this is a test\n",strlen("this is a test\n") );rnrnrnrn
linux串口读写问题
我的代码如下,请各位帮我看看为什么接受数据的时候分段接收,我给它发的是“0003468055”他的接受结果是这样的rnopen ttyS0...rnnread=8rnbuff=0003468rnnread=6rnbuff=005rn我想应该是我程序的<em>问题</em>请大家帮忙看看,下面我把程序给大家发一下:rnint speed_arr[]=B38400,B19200,B9600,B4800,B2400,B1200,B300,B38400,B19200,B9600,B4800,B2400,B1200,B300,B115200;rnint name_arr[]=38400,19200,9600,4800,2400,1200,300,38400,19200,9600,4800,2400,1200,300,115200;rnrnrnrnint open_port(int fd,int comport)rnrn if(comport==0)rn rn fd=open("/dev/ttyS0",O_RDONLY|O_NOCTTY);rn if(-1==fd)rn rn perror("Can't open serial port0 ");rn return (-1);rn rn elsern printf("open ttyS0........\n");rn rn else if(comport==1)rn rn fd=open("/dev/ttyS1",O_RDWR|O_NOCTTY|O_NDELAY);rn if(-1==fd)rn rn perror("can`t open serial port1 ");rn return (-1);rn rn elsern printf("open ttyS1......\n");rn rn else if(comport==2)rn rn fd=open("/dev/ttyS2",O_RDWR|O_NOCTTY|O_NDELAY);rn if(-1==fd)rn rn perror("can`t open serial port2");rn return -1;rn rn elsern printf("open ttyS2.......\n");rn rn else if(comport==3)rn rn fd=open("/dev/tts/3",O_RDWR|O_NOCTTY|O_NDELAY);rn if(-1==fd)rn rn perror("can't open serial port3");rn return -1;rn rn elsern printf("open ttyS3........\n");rn rn else if(comport==4)rn rn fd=open("/dev/tts/4",O_RDWR|O_NOCTTY|O_NDELAY);rn if(-1==fd)rn rn perror("can`t open serial port3");rn return -1;rn rn elsern printf("open ttyS4.....\n");rn rn return fd;rnrnrnint port_init(int fd,int speed,int databits,int stopbits,int parity)rnrn int i;rn int status;rn struct termios opt;rn tcgetattr(fd,&opt);rn for(i=0;i=10)rn rn printf("buff=%s\n",buff);rn rn memset(buff,NULL,sizeof(buff)); rn rnrn请大家帮我看看,到底那个地方设置错误,倒置的这样的结果,
wince5.0串口读写问题
我要在wince5.0上实现一个<em>串口</em>转发的程序,就是将一个COM7上收到的数据转发到COM6,COM6收到的数据转发到COM7,一个字节一个字节转发就可以,但非常的慢,我用SetCommMask(),WaitCommEvent(),ClearCommError(),这几个函数,就不起作用<em>串口</em>的数据有时候会接收不到,谁有什么好办法么? rn我把实现的代码贴出来:rn[code=C/C++]rn//我把<em>串口</em>的打开和线程的创建放在初始化函数中rnBOOL CTransServiceDlg::OnInitDialog()rnrn CDialog::OnInitDialog();rnrn // Set the icon for this dialog. The framework does this automaticallyrn // when the application's main window is not a dialogrn SetIcon(m_hIcon, TRUE); // Set big iconrn SetIcon(m_hIcon, FALSE); // Set small iconrn rn CenterWindow(GetDesktopWindow()); // center to the hpc screenrnrn // TODO: Add extra initialization herern pDlg = this ;rnrnrn Stat = m_com7.SerOpen(EXTERNAL_COMPORT, 115200, NOPARITY, 8);rn sbuf.Format(L"open return: %02x",Stat);rn pDlg->m_EditResp.ReplaceSel(sbuf);rn rn if(Stat != 0)rn rn sbuf.Format(L"open port 7 failed");rn pDlg->m_EditResp.ReplaceSel(sbuf);rn rn Stat = m_com6.SerOpen(USIP_COMPORT, 115200, NOPARITY, 8);rn sbuf.Format(L"open return: %02x",Stat);rn pDlg->m_EditResp.ReplaceSel(sbuf);rn rn if(Stat != 0)rn rn sbuf.Format(L"open port 6 failed");rn pDlg->m_EditResp.ReplaceSel(sbuf);rn rnrn h_usip_sr = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)usip_SendReceive,rn NULL, 0, &dwThreadId_h_usip_sr); rn if(!h_usip_sr)rn AfxMessageBox(_T("usip send receive线程创建失败"));rn h_pda_sr = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)pda_SendReceive,rn NULL, 0, &dwThreadId_h_pda_sr); rn if(!h_pda_sr)rn AfxMessageBox(_T("usip send receive线程创建失败"));rnrn return TRUE; // return TRUE unless you set the focus to a controlrnrnrn//com6转发到com7rnvoid WINAPI usip_SendReceive(LPVOID lpParam)rnrn rn#if 0rn//这里原来是一个字节一个字节转发的 可以实现但非常的慢rn BYTE ch,iret;rn while(1)rn rn rn iret = m_com6.ReceiveByte(&ch, 20);rn if(iret!=0) rn rn Sleep(1);rn continue;rn rn //Lib_Lcdprintf(" -%c- ",ch);rn m_com7.SerWrite(&ch,1,20);rn rn#elsern//这里后来改的 看看有什么<em>问题</em>没有rn COMSTAT cmState;rn DWORD evtMask=0;rn DWORD dwReadErrors;rn int iret ;rn int temp;rnrn SetCommMask(m_com6.m_CommPort, EV_RXCHAR);rn rn byte buff[4096];rn memset(buff,0x00,4096);rn m_com6.ResetPort();rn while(TRUE)rn rn Sleep(1);rn if(WaitCommEvent(m_com6.m_CommPort,&evtMask,NULL))rn rn ClearCommError(m_com6.m_CommPort,&dwReadErrors,&cmState);rn if (cmState.cbInQue >0)rn rn temp = cmState.cbInQue;rn iret = m_com6.SerRead(buff,temp,20);rn //SaveSend(buff, temp); rn iret = m_com7.SerWrite(buff,temp,20);rn memset(buff,0x00,4096);rn rn rn rn#endifrnrnrnrn//com7转发到com6rnvoid WINAPI pda_SendReceive(LPVOID lpParam)rnrnrn#if 0rn BYTE ch,iret;rn while(1)rn rn iret = m_com7.ReceiveByte(&ch, 20);rn if(iret!=0)rn rn Sleep(1);rn continue;rn rnrn m_com6.SerWrite(&ch,1,20);rn rn#elsern COMSTAT cmState;rn DWORD evtMask=0;rn DWORD dwReadErrors;rn int temp;rn int iret ;rn rn SetCommMask(m_com7.m_CommPort, EV_RXCHAR );rn rn byte buff[4096];rn memset(buff,0x00,4096);rnrn while(TRUE)rn rn Sleep(1);rn if(WaitCommEvent(m_com7.m_CommPort,&evtMask,NULL))rn rn ClearCommError(m_com7.m_CommPort,&dwReadErrors,&cmState);rn if (cmState.cbInQue > 0)rn rn temp = cmState.cbInQue;rn iret = m_com7.SerRead(buff,temp,20);rn iret = m_com6.SerWrite(buff,temp,20);rn memset(buff,0x00,1024);rn rn rn rnrnrn#endifrnrnrnrnrnrnrnrnrnrn[/code]
C#的串口读写问题
请问如何在c#中读取<em>串口</em>??有没有什么源码??
求救串口读写问题
各位高手:rnrn本人用PB4.2建造了一个CEPC WEBPAD,并编程进行<em>串口</em><em>读写</em>操作,现遇到一奇怪<em>问题</em>:rn对<em>串口</em><em>读写</em>,但<em>串口</em>无反应.rnrn我对<em>串口</em>的设置是:rn hLocal = CreateFile (TEXT("COM1:"),rn GENERIC_READ | GENERIC_WRITE,rn 0, rn NULL,rn OPEN_EXISTING, rn 0, rn NULL);rnrn DCB dcb;rnrn dcb.DCBlength = sizeof (DCB);rn GetCommState (hLocal, &dcb);rn dcb.BaudRate = 2400;//nSpeed; //2400 baudratern dcb.fBinary = TRUE;rn dcb.fParity = TRUE;rn dcb.fOutxCtsFlow = FALSE; // No CTS output flow controlrn dcb.fOutxDsrFlow = FALSE; // No DSR output flow controlrn dcb.fDtrControl = DTR_CONTROL_ENABLE;rn dcb.fDsrSensitivity = FALSE; // DSR sensitivity rn dcb.fTXContinueOnXoff = TRUE; // XOFF continues Tx rn dcb.fOutX = FALSE; // No XON/XOFF out flow control rn dcb.fInX = FALSE; // No XON/XOFF in flow control rn dcb.fErrorChar = FALSE; // Disable error replacement. rn dcb.fNull = FALSE; // Disable null stripping. rn dcb.fRtsControl = RTS_CONTROL_ENABLE; rn // RTS flow control rn dcb.fAbortOnError = FALSE; // Do not abort reads/writes on rn dcb.ByteSize = 8;rn dcb.StopBits = ONESTOPBIT;rn dcb.Parity = NOPARITY;rn SetCommState (hLocal, &dcb);rnrn COMMTIMEOUTS cto;rn cto.ReadIntervalTimeout = 0;rn cto.ReadTotalTimeoutMultiplier = 0;rn cto.ReadTotalTimeoutConstant = 0;rn cto.WriteTotalTimeoutMultiplier = 0;rn cto.WriteTotalTimeoutConstant = 0;rn rn SetCommTimeouts (hLocal, &cto);rnrn EscapeCommFunction (hLocal, CLRIR);rnrn然后创建两个THREAD对<em>串口</em><em>读写</em>:rnrc = ReadFile (hLocal, &Byte, 1, &cBytes, NULL);rnDEBUG可看到:rnrc = 1;cBytes = 0;也就是没读到数据,可我正往<em>串口</em>送数据;rnrnrc = WriteFile (hLocal, &Byte, 1, &cBytes, NULL);rnDEBUG可看到:rnrc = 1;cBytes = 1;也就是正确的写入一个数,可我示波器在<em>串口</em>看不到波型.rnrn不知各位是否也遇到这奇怪<em>问题</em>.我已搞了三天了,只好求救各位了.多谢!rnrn另我在WIN2000下用VC也是用以上的方法编程对以上说的同一<em>串口</em><em>读写</em>操作,但能正确<em>读写</em>操作.rnrnrnrnrnrnrn
DOS下串口读写问题
我在DOS下用inportb() 收0x00 - 0x0F这几个数的时候怎么总是不对啊?收大于0x0F的数都可以。rn是什么原因呢?
读写串口问题!!!!
利用WIN32通信的API在同步执行时,函数直到操作完成后才返回,这意味着在同步执行时线程被阻塞。在执行时,即使操作还未完成,调用的函数也会立即返回。费时的I/O操作在后台进行。这样一来,线程就可以做其它的工作。rnrnrn上面的一段话不是很明白!!!!rn在<em>读写</em><em>串口</em>时 ,同步执行,异步执行指什么?????
串口读写数据问题
我使用serialport.DataReceived事件处理收到的数据,rn但是有时我需要向<em>串口</em>写数据serialport.Write(),并且需要获得<em>串口</em>发回的确认信息。rn这个确认信息怎么读取?(<em>串口</em>发回的确认信息同时会引发了DataReceived的事件)rn如果serialport.Write()后使用serialport.Read()会出<em>问题</em>吗rn
请教读写串口问题
ReadFile(h_Com,buff,length,&length,NULL);rn请问这句话是什么意思?rn是不是把<em>串口</em>h_Com中的数据读到buff中去?rn我想把读入的数据用一个数组存起来,还想对其进行操作;比如,对某些位的不同值,给出不同的解释;rn请问:rn我该怎么才能把他们用一个数组存起来?
串口读写问题,求助
我的<em>串口</em>这样写的, unsigned short port=0;rn HANDLE m_com1=0;rn CString port_name="COM1";rn m_com1=CreateFile(port_name,GENERIC_READ|GENERIC_WRITE,rn 0,NULL,rn OPEN_EXISTING,rn FILE_FLAG_OVERLAPPED,rn NULLrn );rn rn SetupComm(m_com1,// handle of communications device rn 4000, // to set size of input buffer rn 500); // // size of output buffer rn DCB m_dcb;rn GetCommProperties(m_com1,&m_comm_prop);rn GetCommState(m_com1,&m_dcb);rn if (m_comm_prop.dwSettableBaud & BAUD_19200)rn m_dcb.BaudRate=19200;rn rn m_dcb.fBinary=TRUE;rn m_dcb.fParity=TRUE;rn m_dcb.fDtrControl=DTR_CONTROL_DISABLE;rn rn m_dcb.fNull=TRUE;rn m_dcb.wReserved=0;rn m_dcb.fRtsControl=RTS_CONTROL_DISABLE;rn m_dcb.ByteSize=8;rn m_dcb.Parity=ODDPARITY;rn m_dcb.StopBits=ONESTOPBIT;rn SetCommState(m_com1,&m_dcb); rnrn GetCommTimeouts(m_com1,&m_time_out);rn m_time_out.ReadIntervalTimeout=2;rn m_time_out.ReadTotalTimeoutConstant=50;rn m_time_out.WriteTotalTimeoutMultiplier=0;rn m_time_out.WriteTotalTimeoutConstant=50;rn rn SetCommTimeouts(m_com1,&m_time_out);rn SetCommMask(m_com1,0); rn不知道什么原因,我的程序收不到00,我用我的<em>串口</em>调试助手可以收到,但是运行完程序就收不到了rn请各位高手帮我看看
关于读写网络流和读写串口的区别
就是想知道读取网络流数据后转发到<em>串口</em>是个什么样的操作流程
高分求助!关于串口读写等待问题
小弟我遇到一个棘手的<em>问题</em>,请各位大虾帮忙。我在使用ReadFile从磁条<em>读写</em>器上读取数据的时候,如果是跟踪的话,就没有<em>问题</em>,如果直接运行程序,不跟踪的话,就会报读错误,我想可能是超时造成的,但是,不知道该在那里设置。我在端口设置的地方是这样设置的:rnDCB set_dcb = 0;rn COMMTIMEOUTS timeout;rn DWORD tmp ;rnrn GetCommState ( tty_fd , &sav_dcb );rn rn timeout.ReadIntervalTimeout = 0xFFFFFFFF;rn timeout.ReadTotalTimeoutMultiplier = 5;rn timeout.ReadTotalTimeoutConstant = 500;rn timeout.WriteTotalTimeoutMultiplier = 5;rn timeout.WriteTotalTimeoutConstant = 5000;rn if ( !SetCommTimeouts( tty_fd, &timeout) )rn rn CloseHandle ( tty_fd );rn tmp = GetLastError ();rn return ( tmp );rn rnrn set_dcb.DCBlength = sizeof(DCB);rn set_dcb.BaudRate =9600; rn set_dcb.ByteSize =8;rn set_dcb.Parity =NOPARITY;rn set_dcb.StopBits =ONESTOPBIT;rn if(!SetCommState( tty_fd , &set_dcb))rn rn rn CloseHandle( tty_fd );rn tmp = GetLastError();rn return ( tmp );rn rnrnReadFile 是如下调用的:rn OVERLAPPED osReader = 0;rn osReader.hEvent = CreateEvent ( NULL , TRUE , FALSE , NULL );rn ...rn ReadFile(tty_fd, lpBuf, READ_BUF_SIZE , &dwRead, &osReader)rn ...rn WaitForSingleObject ( osReader.hEvent , 100 );rnrnrn我不知道是WaitForSingleObject的等待时间太短了,还是在端口设置的时候的读取时间太短了而造成的错误,请各位高手帮帮小弟!不胜感激!
请教关于linux串口读写问题
最近在研究linux <em>串口</em><em>读写</em>,碰到一个<em>问题</em>,在电脑端口给平板(android系统)发送AT命令(通讯命令),通过工具发送是成功的。rn 我想能否直接在平板侧实现<em>串口</em>发送,脱离PC。电脑侧<em>串口</em>设备对应平板中的为/dev/ttyGS1.我的程序为:rntestmux.c rn[code=c]#include rn#include rn#include rn#include rn#include rnint main()rnrnint nread;rnint fd;rnstruct termios attr;rnfd_set fds;rnstruct timeval tv;rnunsigned char buf[512];rnfd = open("/dev/ttyGS1", O_RDWR);rnif (fd == -1)rnreturn -1;rnprintf("hello, Serial port is OK\n");rntcgetattr(fd, &attr);rn// 设置最少接收字符个数为0rnattr.c_cc[VMIN] = 0;rn// 不处理iflag、oflag和lflagrnattr.c_iflag = 0;rnattr.c_oflag = 0;rnattr.c_lflag = 0;rnattr.c_cflag = B9600 | CS8 | CREAD;rntcsetattr(fd, TCSANOW, &attr);rnwrite(fd, "AT+CGMI", 7);rnFD_ZERO(&fds);rnFD_SET(fd, &fds);rn// 设置超时为5秒rntv.tv_sec = 10;rntv.tv_usec = 0;rnnread=read(fd, buf, 512);rnprintf("readlength=%d\n", nread);rnbuf[nread]='\0';rnprintf("%s\n", buf);rnrnif (select(fd+1, &fds, NULL, NULL, &tv) >>count=7]rn[2014:05:20 02:52:32] [ 264.779581] [0.0 in_irq swapper]41 54 2B 43 47 4D 49 AT+CGMIrn[2014:05:20 02:52:36] [ 268.540791] [0.0 in_irq swapper]gs_read_complete: status 0rn[2014:05:20 02:52:36] [ 268.548361] [0.0 in_irq swapper][ep4out,>>>count=1]rn[2014:05:20 02:52:36] [ 268.555022] [0.0 in_irq swapper]0D .rn[2014:05:20 02:52:36] [ 268.572345] [1328.1 mspAppDS]gs_write: ttyGS1 (d3a20840) writing 16 bytesrn[2014:05:20 02:52:36] [ 268.581117] [1328.1 mspAppDS][ttyGS1,<<[2014:05:20 02:52:36] [ 268.615777] [0.0 in_irq swapper]0D 0A 68 75 61 77 65 69 0D 0A 0D 0A 4F 4B 0D 0A ..manufactureinfo....OK..rn
一个关于VC++读写串口问题???
[size=14px]我又一个应用程序是VC++写的,通过接受<em>串口</em>数据并且解析。我在程序中编写了一个<em>串口</em>类,并且使用Readfile读取<em>串口</em>,现在有一个<em>问题</em>,<em>串口</em>传送过来的数据数据量非常大,1s钟将近上万条数据。我的程序呢,处理每条数据都需要时间。所以我应该怎样设置来对每条数据可以完整处理。我使用<em>串口</em>大师接收可以全部接收。但这个只是单纯接收而不做处理。还有就是我设置的<em>串口</em>缓冲区是4096.字符。[/size]rnSetupComm(m_hCom,4096,4096); rn缓存调制多少是最佳啊???rn请大家帮帮忙!!!我应该采取什么方法更好呢???
请教一个关于串口读写问题
我需要把对<em>串口</em>的操作封装在com组件里,组件只对外提供一个接口函数,就是执行从外设下载数据的任务,采用的是一问一答的方式,只有我请求数据,外设才会回答数据,我原先在普通win32程序中都是使用多线程方式监控<em>串口</em>去读数据,但是在com组件中,外部程序只要求我的这个接口函数进行下载任务,并等待函数的返回,如果我使用线程进行监控的话,结束条件很难控制。我就使用了一个循环来完成任务rn使用异步方式打开<em>串口</em>,然后是用同步方式读数据,异步方式写数据,<em>读写</em>的函数如下rnint CPos::ReadComm(char *ReadBuff)rnrn /*0:超时,其他:读出的数据长度rn 可以使用WaitCommEvent函数等待,在2000下直接返回,然后使用WaitForSignedObjectrn 函数等待事件rn 改写这个函数*/rn rn if(m_Port==NULL)rn return 0;rn BYTE *read=new BYTE[1024];rn DWORD nByteRead,dwErrorMask,nToRead;//,dwEvtMask;rn;rn COMSTAT comstat;rnrn Sleep(5);rn ClearCommError(m_Port,&dwErrorMask,&comstat);rn nToRead=comstat.cbInQue;rn if(nToRead>0)rn rn if(nToRead>1024)rn nToRead=1024;rn if(!ReadFile(m_Port,read,nToRead,&nByteRead,NULL))//同步读rn return 0;rn elsern rn PurgeComm(m_Port, PURGE_TXCLEAR|PURGE_RXCLEAR);rn memcpy(ReadBuff,read,nByteRead);rn return nByteRead;rn rn rn elsern rn Sleep(1000);//等待1秒之后读rn ClearCommError(m_Port,&dwErrorMask,&comstat);rn nToRead=comstat.cbInQue;rn if(nToRead>0)rn rn if(nToRead>1024)rn nToRead=1024;rn if(!ReadFile(m_Port,read,nToRead,&nByteRead,NULL))rn return 0;rn elsern rn PurgeComm(m_Port, PURGE_TXCLEAR|PURGE_RXCLEAR);rn memcpy(ReadBuff,read,nByteRead);rn return nByteRead;rn rn rn elsern return 0;rn rnrn
求助一个关于arm串口读写问题
我用的arm是at91rm9200rn现在要通过<em>串口</em>向一个GPRS模块(gr64)发送AT命令rn先定义了一个字符数组"AT\n"rn把它往<em>串口</em>里面写,貌似写是没<em>问题</em>的rn按道理GR64应该返回“ATOK”rn但是我接下来读<em>串口</em>却总是读出“AT\n”rn也就是说你写的什么,读出来就是什么rn这是什么原因阿?困惑好久了,高手指点一下!
关于串口读写问题,请帮忙
我找精华内的一篇文章写了个<em>串口</em>程序,但是不知为什么不能读数据程序如下rn#include "stdafx.h"rn#include "windows.h"rn#include "stdlib.h"rn#include "conio.h"rn#include "process.h"rnrnHANDLE hComDev=0;//串行设备句柄rnBOOL bOpen=FALSE;//<em>串口</em>打开标志rnHANDLE hEvent=0;//线程同步事件句柄rnrnBOOL SetupSynCom();rnDWORD WriteComm(LPVOID,DWORD);rnDWORD ReadComm(LPVOID,DWORD);rnrnint APIENTRY WinMain(HINSTANCE hInstance,rn HINSTANCE hPrevInstance,rn LPSTR lpCmdLine,rn int nCmdShow)rnrn char strSndData[]="214";rn char strReadData[3];rn strReadData[0]='1';rn strReadData[1]='1';rn strReadData[2]='\0';rn SetupSynCom();rn WriteComm(strSndData,3);rn ReadComm(strReadData,3);rn return 0;rnrnrnrnBOOL SetupSynCom()rnrn //BOOL bOpen=FALSE;//<em>串口</em>打开标志rn DCB dcb;rn COMMTIMEOUTS timeouts;rn //设备已打开 rn if(bOpen)rn rn return FALSE;rn rn //hFile=CreateFile("ArrayData.txt",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);rn if((hComDev=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL))==INVALID_HANDLE_VALUE)rn return FALSE;rn //设置超时控制 rn SetCommTimeouts(hComDev,&timeouts);rn //设置接收缓冲区和输出缓冲区的大小rn SetupComm(hComDev,1024,512);rnrn //获取缺省的DCB结构的值 rn GetCommState(hComDev,&dcb);rn //设定波特率为9600 bps rn dcb.BaudRate=CBR_9600;rn //设定无奇偶校验rn dcb.fParity=NOPARITY; rn //设定数据位为16 rn dcb.ByteSize=8;rn //设定一个停止位rn dcb.StopBits=ONESTOPBIT; rn //监视<em>串口</em>的错误和接收到字符两种事件 rn SetCommMask(hComDev,EV_ERR|EV_RXCHAR); rn //设置串行设备控制参数 rn SetCommState(hComDev,&dcb);rn //设备已打开rn bOpen=TRUE;rn //创建人工重设、未发信号的事件rn hEvent=CreateEvent(NULL,FALSE,FALSE,"WatchEvent"); rn //创建一个事件监视线程来监视<em>串口</em>事件 rn //AfxBeginThread(CommWatchProc,pParam);rn rn rnrnDWORD WriteComm(LPVOID lpSndBuffer,DWORD dwBytesToWrite)rnrn BOOL bWriteState;rnrn DWORD dwBytesWritten;rn if(!bOpen)rn return FALSE;rnrn bWriteState=WriteFile(hComDev,lpSndBuffer,dwBytesToWrite,&dwBytesWritten,NULL);rnrn if(!bWriteState||dwBytesToWrite!=dwBytesWritten)rn //发送失败rn return FALSE;rn elsern return TRUE;rnrnrnrnrnDWORD ReadComm(LPVOID lpInBuffer,DWORD dwBytesToRead)rnrn COMSTAT ComStat;rn DWORD dwBytesRead,dwErrorFlags;rn if(!bOpen)rn return 0;rn ClearCommError(hComDev,&dwErrorFlags,&ComStat);rn dwBytesRead=min(dwBytesToRead,ComStat.cbInQue);rn if(dwBytesRead>0)rn rn if(!ReadFile(hComDev,lpInBuffer,dwBytesRead,&dwBytesRead,NULL))rn dwBytesRead=0;rn return dwBytesRead;rn rnrnrn当执行ReadComm时,到dwBytesRead后ComStat.cbInQue为零.我的程序有<em>问题</em>吗?
请问一个关于串口读写问题WriteFile?
我在程序中的自己的线程中用rnwhile (1)rnrn....rnunsigned long ComNum;rn.....rnWriteFile(hCom,writebuf,8,&ComNum,NULL);rn.....rnrn但是只有第一次循环时正常,第二次循环时到rnWriteFile(hCom,writebuf,8,&ComNum,NULL);这一句就停止了,不是退出,也没出错,就是好像是阻塞了一样,进入这一句出不来。这是怎么回事??如何解决?谢谢
关于西门子MC35模块的串口读写问题
定义:rnLPCTSTR lpcsCommand = "AT+CPMS=SM,SM,SM\r"; \\设置收到短信存储位置为SIM卡rnrnrn使用WriteFile写<em>串口</em>rnrnif ( !WriteFile ( m_hComm, lpcsCommand, strlen(lpcsCommand) , &dwWrittenBytes, &m_oWrite ) )rnrn if ( GetLastError() == ERROR_IO_PENDING )rn rn GetOverlappedResult ( m_hComm, &m_oWrite, &dwTransferred, TRUE));rn rn elsern rn ....rn rnrnrn然后用WaitCommEvent( m_hComm, &dwEvtMask, &m_o ) 等待<em>串口</em>返回事件rnrnif(!WaitCommEvent( m_hComm, &dwEvtMask, &m_o ))rnrn if(GetLastError() == ERROR_IO_PENDING )rn GetOverlappedResult(m_hComm, &m_o, &dwTransferred, TRUE);rnrnrn最后用ReadFile读<em>串口</em>,看是否接收到“OK”rnrnif ( !ReadFile ( m_hComm, pszRead, RECEIVE_BUFFER, &dwReadBytes, &m_oRead ) )rnrn if ( GetLastError() == ERROR_IO_PENDING )rn rn GetOverlappedResult(m_hComm, &m_oRead, &dwTransferred, TRUE);rn rn elsern rn ...rn rnrnrnif(strstr(pszRead,"OK"))rn return TRUE;rnelsern return FALSE;rnrnrn程序大体就这样。rnrnrnrn这里使用了WaitCommEvent()函数,一直等待<em>串口</em>事件,也就是<em>串口</em>收到字符事件,它才返回。然后再去ReadFile()读<em>串口</em>,把字符读出来。rnrn如果lpcsCMGF = "AT+CMGF=1\r";这个命令,一切正常,ReadFile()可以读到“OK”。rnrn但是如果第一次使用 "AT+CPMS=" 这个命令去更改存储位置的时候,<em>串口</em>需要等待很长一段时间才能收到MC35模块是否设置成功的回复。所以使用WaitCommEvent(),应该是<em>串口</em>有数据才能返回,然后ReadFile()读到数据放入pszRead。但是为什么我什么也字符没接收到????即WaitCommEvent()好像没有收到任何字符事件它就返回了,ReadFile()中pszRead什么也没有。rnrn
请求算法?关于串口读写速度问题
请求算法:rn我现在有十块仪表串联接到<em>串口</em>,上位机监控数据,但需要向每块表发送指令才能得到相应的返回数据,<em>串口</em>通讯的速度一定小于语句的速度,每块表需要读4个数据,这样一共40此发送和接收,怎样使得速度最快还不会出现冲突。rnrn
关于串口读写问题 ------- 大神请进来瞧瞧
[img=https://img-bbs.csdn.net/upload/201609/05/1473063228_666387.jpg][/img]rnrn给<em>串口</em>写入一个字符串“abcd”,数据读不出来,大神帮忙看一下哪里出现了<em>问题</em>?多谢!rnrn[img=https://img-bbs.csdn.net/upload/201609/05/1473063290_554038.jpg][/img]
关于PCOMM的读写串口的操作问题
小弟今天刚上手PCOMM,对于<em>读写</em><em>串口</em>的时候有些疑问。我想把CString类型的数发出去,或用CString类型的变量保存sio_read的结果,我该怎么做。之前想过用char型指针的方法,但觉得略为繁琐。是不是我想复杂了,求指导
关于串口IC卡读写问题
我想要对IC卡上指定的某一扇区中的某一个块进行<em>读写</em>操作,请问大虾们具体该如何做呢?
关于串口读写数据的文章
关于<em>串口</em><em>读写</em>数据的文章 <em>串口</em><em>读写</em>程序!!!
读写串口
为什么在写入<em>串口</em>之后打印机可以打印出来可是用ReadFile确读不出来,一直显示的设备长度为0?
串口读写
uart.c该源码实现了用Linux对<em>串口</em>的<em>读写</em>操作
串口读写
我想做一个<em>串口</em>通讯程序与单片机通讯,但有些功能...rn1.往<em>串口</em>写入16进制数:7D 80 81 02该如何操作?rn2.读<em>串口</em>的数据,如何将其转化为16进制数以及ASCII码?
wince串口读写读写时间
1.打开<em>串口</em> OpenPort() { //主要是CreateFile()函数,外加<em>串口</em>的一些参数初始化 hCEComm = CreateFile&#40; L"COM1:", GENERIC_READ | GENERIC_WRITE, //允许读和写 0, //独占方式(共享模式) NULL, OPEN_EXISTING, //打开而不是创建(创建方式) 0, NULL &#41;; //设置<em>串口</em>事件 //设置<em>串口</em><em>读写</em>时间 COMMTIMEOUTS CommTimeOuts; GetCommTimeouts (hCEComm, &CommTimeOuts;); CommTimeOuts.ReadIntervalTimeout = 5; CommTimeOuts.ReadTotalTimeoutMultiplier = 0; CommTimeOuts.ReadTotalTimeoutConstant = 0; CommTimeOuts.WriteTotalTimeoutMultiplier = 50; CommTimeOuts.WriteTotalTimeoutConstant = 2000; if(!SetCommTimeouts( hCEComm, &CommTimeOuts; )) { TRACE( _T("SetCommTimeouts 返回错误") ); //关闭<em>串口</em> CloseHandle (hCEComm); hCEComm = INVALID_HANDLE_VALUE; return FALSE; } //指定端口监测的事件集
串口读写小工具—设置串口,对串口读写
<em>串口</em>小工具,<em>读写</em><em>串口</em>。可对<em>串口</em>,波特率,数据位,停止位,校验位进行设置
EVC 串口读写问题
请问下我照着《EVC高级编程及其应用开发》的<em>串口</em>通信类,然后在对话框中加入一个打开<em>串口</em>和写<em>串口</em>的按钮,打开<em>串口</em>成功,但是写<em>串口</em>的时候会出<em>问题</em>,应该是在WriteThreadFunc函数中,也就是写线程,运行一段时间后会出现Unhandled exception at 0x00000000,我想请问是什么原因,然后最后那句mySeries->m_hWriteThread = NULL;把线程置空是什么意思,谢谢!
请教串口红外的读写问题
rn编程环境:VC6.0 编程语言:C++rnrn用<em>串口</em>红外适配器向带有红外接口的手机传数据,需要自己写红外的传输协议么?rn不写红外的传输协议的话怎么才能接收和发送!rnrn请教高人!
串口读写问题.readfile延时
我写了一个com通讯的mfc 的dll(便于测试),在测试过程中遇到了一个<em>问题</em>:如果我在写完成的时候设定了一个对话框.告诉我们写入成功,确定后执行读操作,在vc的平台上面发现返回值正确,读到数据长度为20(用ClearCommError得到).然后将对话框去掉再次调用却发现没有读入任何数据.然后在ClearCommError后面添加对话框得到长度为0.这让我好郁闷.rnrn是不是readfile读的太早了,使得还没有返回值的时候就读了,但这好像不对rn如果不是,难道readfile读迟了,但是那样的结果是添加对话框反而使得时间间隔更长,rn更加不可能读出什么东西来呀!!rnrnrn是不是设置的SetCommTimeouts参数不对,还是怎样.rn期待大家的解答,我现在好郁闷..
C#serialport串口读写数据的问题
单片机向我发送十六进制的流数据,我怎么样读取并显示出原数据啊,比如单片机发送的是E9 E9 0A 0B 0C,我就想在textBox中显示出E9 E9 0A 0B 0C。代码如下:rnprivate void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)rn rn if (checkBox1.Checked)//是否用十六进制显示rn rn byte[] tempDate = new byte[serialPort1.BytesToRead];rn serialPort1.Read(tempDate, 0, serialPort1.BytesToRead);rn delegate1 receivedelegate1 = new delegate1(datareceive);rn ...rn this.Invoke(receivedelegate1);rn rn执行完Read()函数后我是否就把输入缓存区中的数据存到字节数组tempDate中了?我想要在textBox中显示数据是否要把字节数组中的数据转换成对应的十六进制字符?
串口读写问题(高分相送)
我有一个程序,是对<em>串口</em>进行操作的。现在的<em>问题</em>是:当一个外部设备发送字符串过来的时候,我的程序中的一个线程要去读取<em>串口</em>中的内容。但是我发现,有时候外部设备没有发送完,我的线程就已经可以读取其中的内容了。而我要求必须外部设备发送完了才可以进行读取操作。现在关键是不好掌握外部设备的状态。各位有什么好的方法可以解决这个<em>问题</em>么?
初学遇到的串口读写问题!
刚开始学习C#,最近要用蓝牙连接PC,需要用到虚拟<em>串口</em>,想用SerialPort这个类实现,但是当调用SerialPort.readline的时候程序就死,readexisting读出的是空,应该是writeline有<em>问题</em>,数据没有发送出去。rnrn public SerialPort port = new System.IO.Ports.SerialPort("COM6");rn rn InitializeComponent();rn rn rn private void Form1_Load(object sender, EventArgs e)rn //对<em>串口</em>进行设置 rnrn port.PortName = SerialPort.GetPortNames()[0];//第一个可用端口 rn port.Parity = Parity.None;rn port.Handshake = Handshake.None;rn port.BaudRate = 9600;rn port.DataBits = 8;rn port.ReadTimeout = 50;rn port.WriteTimeout = 50;rn rnrnrnrn private void button1_Click(object sender, EventArgs e)rn rn tryrn rn port.Open();rn label1.Text = port.PortName+ "打开成功";rnrn rn catchrn rnrn label1.Text = port.PortName.ToString() + "打开失败";rn rnrn rn private void button2_Click(object sender, EventArgs e)rn rn tryrn rnrn // read.Join(); rn port.Close();rn label1.Text = port.PortName.ToString() + "关闭成功";rn rn catchrn rnrn label1.Text = port.PortName.ToString() + "关闭失败";rn rn rnrnrnrn private void read_Click(object sender, EventArgs e)rn rn string data;rn tryrn rn data = port.ReadLine();rn MessageBox.Show(data);rn rn catchrn rn MessageBox.Show("failed");rn rn rn//写数据rn private void button1_Click_1(object sender, EventArgs e)rn rn string message = "test";rn port1.Write(message);rn rnrn一个最简单的程序,端口打开成功,就是数据传的时候失败。程序放在两台PC上,蓝牙连接的时候显示所使用的COM不一样:一个是COM4,一个是COM6。相应的,在程序里我把PortName改过之后再生成新的程序,但是<em>读写</em>依然错误。是不是PortName的地方设错了?另外<em>串口</em>程序能在同一台机子上测试吗?老是用两台有点麻烦rnrn谢谢各位了rnrn
请教一个串口读写问题
我想用ARM去控制一个GPRS模块,他们之间通过<em>串口</em>通信rn控制器发送字符AT,模块会响应AT OKrn现在<em>问题</em>是:rn我发送了AT后,模块需要时间相应指令rn如果马上read,就会出现没有读完全响应内容的情况rn请问该怎样处理这种情况?最好不要用延时解决rn
请问串口读写问题(WINCE)
<em>串口</em>的接收方式中我使用的是一线程!下面是该是接收的线程函数! rn//<em>串口</em>读线程函数rnDWORD CCESeries::ReadThreadFunc(LPVOID lparam)rnrn CCESeries *ceSeries = (CCESeries*)lparam;rn DWORD evtMask;rn BYTE * readBuf = NULL;//读取的字节rn DWORD actualReadLen=0;//实际读取的字节数rn DWORD willReadLen;rn rn DWORD dwReadErrors;rn COMSTAT cmState;rn rn // 清空缓冲,并检查<em>串口</em>是否打开。rn ASSERT(ceSeries->m_hComm !=INVALID_HANDLE_VALUE); rn rn rn //清空<em>串口</em>rn PurgeComm(ceSeries->m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR );rnrn SetCommMask (ceSeries->m_hComm, EV_RXCHAR);// | EV_CTS | EV_DSR );rn while (TRUE)rn rn if (WaitCommEvent(ceSeries->m_hComm,&evtMask,0))rn rn SetCommMask (ceSeries->m_hComm, EV_RXCHAR);// | EV_CTS | EV_DSR );rn //表示<em>串口</em>收到字符 rn if (evtMask & EV_RXCHAR) rn rn rn ClearCommError(ceSeries->m_hComm,&dwReadErrors,&cmState);rn willReadLen = cmState.cbInQue ;rn if (willReadLen m_hComm, readBuf, willReadLen, &actualReadLen,0);rn rn //如果读取的数据大于0,rn if (actualReadLen>0)rn rn //触发读取回调函数rn ceSeries->m_OnSeriesRead(ceSeries->m_pPortOwner,readBuf,actualReadLen);rn rn rn rn //如果收到读线程退出信号,则退出线程rn if (WaitForSingleObject(ceSeries->m_hReadCloseEvent,500) == WAIT_OBJECT_0)rn rn break;rn rn rn return 0;rnrnrn但在使用ClearCommError(ceSeries->m_hComm,&dwReadErrors,&cmState);时出现cmState.cbInQue的值有<em>问题</em>,所以接收到很多乱吗!请高手指点
一个串口读写的奇怪问题
各位大虾:rn 我现在要做一个<em>串口</em>通讯<em>问题</em>,rn BYTE *RecvBuffer;rnrn RecvBuffer=(BYTE *)malloc(sizeof(BYTE)*4);rn Ret=ReadFile(hDevice,RecvBuffer,4,&FactRead,NULL);rn if (Ret==FALSE)rn rn free(RecvBuffer);rn return (ReceiveE);rn rn本来底层给我发的数据预期是:RecvBuffer[0]=0x11;RecvBuffer[1]=0x22;rn RecvBuffer[2]=0x33;RecvBuffer[3]=0x44;rn而我受到的却是:rn RecvBuffer[0]=0x11223344;而RecvBuffer[1],RecvBuffer[2],rn RecvBuffer[3]特别奇怪,为何?先谢rnrn
rs232 串口读写数据 的问题
我对下位机是一点也不懂啊,现在和一个同事合作一个最简单的<em>串口</em>通信程序。rn上位机发送一个指令(假设是'a'这个byte)下位机回复一个字节表示温度。rnrn那么 WriteFile 和ReadFile的时候是不是和TCP类似,buffer里面只有用户数据?
mscomm控件读写串口问题
我在用mscomm控件<em>读写</em><em>串口</em>的同时,如果打开一个比较大的程序,则<em>读写</em>的数据通常会出错,(和<em>串口</em>的通讯规约是做单片机的人写的),估计是规约的原因还是系统的<em>问题</em>还是单片机的<em>问题</em>?谢谢
用java读写串口问题
我怎么才能实现对<em>串口</em>全双工,读一次,写一次。 类试适时监控的功能。
求教异步串口读写问题
将一个之前写的wince<em>串口</em><em>读写</em>程序移植到xp平台时,发现收正常,发数据的时候经常出现卡死的情况,后来查找了些资料,需要改为异步<em>串口</em>才行。但是改成异步之后,收发都不能进行了,改了点之后出现以下<em>问题</em>:rn[code=c]DWORD ChControlDlg::DataSend(const BYTE *buf , int length)rnrn UpdateData(true);rn if (m_hComm==INVALID_HANDLE_VALUE)rn rn return 0;rn rn BOOL fWriteState;rn DWORD dwBytesWritten;rnrn rn OVERLAPPED m_osWrite;rn memset(&m_osWrite,0,sizeof(OVERLAPPED));rn m_osWrite.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);rn COMSTAT ComStat; rn DWORD dwErrorFlags;rn ClearCommError(m_hComm,&dwErrorFlags,&ComStat);rn BOOL bWriteStat;rn DWORD wCount = 100;rn //bWriteStat = WriteFile(hCom, m_send, m_send.GetLength(), &wCount, &m_osWrite);//发送数据rn fWriteState=WriteFile(m_hComm,buf,length*sizeof(char),&dwBytesWritten,&m_osWrite);//此处,buf和length都可以正常读取,但是dwBytesWritten值始终为0,返回值fWriteState也为0.但是实际情况是在接收端已经正常显示收到了数据,这是为什么?哪里出错了么?rn if(!fWriteState)rn rn if(GetLastError()==ERROR_IO_PENDING)rn rn SetEvent(m_osWrite.hEvent);rn WaitForSingleObject(m_osWrite.hEvent,1000);rn rn rnrn return dwBytesWritten;rnrnDWORD ChControlDlg::ReadPortThread(LPVOID lpParameter)rnrn ChControlDlg* m_pSerial;rn m_pSerial=(ChControlDlg*)lpParameter;rn //我在此处设置了断点后,程序到此暂停,发端一直在发,现在可以接收到数据可以显示。继续运行完整以后暂停显示。如果不设断点,接受区什么反应都没rn BOOL fReadState;rn DWORD dwLength;rnrn COMSTAT ComStat;rn DWORD dwErrorFlags;rn OVERLAPPED m_osRead;rn memset(&m_osRead,0,sizeof(OVERLAPPED));rn m_osRead.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);rnrn ClearCommError(m_pSerial->m_hComm,&dwErrorFlags,&ComStat);rnrn m_pSerial->m_nBufferSize=min(m_pSerial->m_nBufferSize,(DWORD)ComStat.cbInQue);rnrn if (!m_pSerial->m_nBufferSize)rn rn return FALSE;rn rnrn char* buf=new char[m_pSerial->m_nBufferSize];rnrn while(m_pSerial->m_hComm!=INVALID_HANDLE_VALUE)rn rn fReadState=ReadFile(m_pSerial->m_hComm,buf,m_pSerial->m_nBufferSize,&dwLength,&m_osRead);rn if(!fReadState)rn rn //AfxMessageBox(_T("无法从<em>串口</em>读取数据!"));rn if (GetLastError()==ERROR_IO_PENDING)rn rn WaitForSingleObject(m_osRead.hEvent,2000);rn PurgeComm(m_pSerial->m_hComm, PURGE_TXABORT|rn PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);rn return m_pSerial->m_nBufferSize;rnrn rn return 0;rn rn elsern rn if(dwLength!=0)rn rn //回送数据rn if(m_pSerial->m_lpDataArriveProc!=NULL)rn rn m_pSerial->m_lpDataArriveProc(buf,dwLength,m_pSerial->m_dwUserData);//这个是做了一个消息传递,然后就处理数据并显示rn rn rn rn rn PurgeComm(m_pSerial->m_hComm, PURGE_TXABORT|rn PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);rn// return dwBytesRead;rnrnrn delete[] buf;rn return 0;rn[/code]
各位帮忙,串口读写问题?
我给一<em>串口</em>写入一数据,按协议应该返回02,04,00,04不为零的四个字符。但我现在返回的是四个零。我一读就是四个零。请问我<em>串口</em>哪儿初始化错误拉。在c_iflagrn,还是c_cflag,c_oflag.我写入保证是正确的。我现在外面出差,弄不完回不了家。各位帮帮忙?
通用串口类,串口读写
COMSTAT ComStat; DWORD dwErrorFlags; //错误标志位 BOOL bReadStatus;//读取状态 OVERLAPPED m_osRead;//<em>串口</em>设备的一些信息 memset(&m_osRead,0,sizeof(OVERLAPPED));//初始化内存 m_osRead.hEvent=CreateEvent(NULL,TRUE,TRUE,NULL); ClearCommError(hSerialComm,&dwErrorFlags,&ComStat);//清除<em>串口</em>的错误标志以便继续输入,输出操作 if(!ComStat.cbInQue) return 0; dwBytesRead = min(dwBytesRead,(DWORD)ComStat.cbInQue); bReadStatus=ReadFile(hSerialComm,buffer,dwBytesRead,&dwBytesRead,&m_osRead); if(!bReadStatus) //如果函数返回FALSE { if(ERROR_IO_PENDING==GetLastError()) { WaitForSingleObject(m_osRead.hEvent,2000); } } PurgeComm(hSerialComm,PURGE_TXABORT| PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);//清空<em>读写</em>缓存,停止为解决的<em>读写</em>操作
【急切求助】关于串口读写及IO控制问题。。。
大家好啊,我想请教两个<em>问题</em>,rn[color=#0000FF]一个是[/color]:关于固定式扫码枪,想用程序抓取扫码枪采集到的数据,rn多把扫码枪通过MOC卡连接一台电脑,是否可以通过读不同PORT的<em>串口</em>直接获取条码信息?rn是否还需要安装扫码枪驱动?rnrn[color=#0000FF]还有就是:[/color]想通过IO控制器对仪器进行控制,通过IO控制器给PLC一个类似高低电平的信号,是否可以?rnrn请做过这方面项目的朋友介绍一下,谢谢!
关于串口读写的处理,spcomm控件
现在rnrnprocedure Tmainform.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;rn BufferLength: Word);rnrnvarrn i:integer;rn returnstr:string;rn rbuffer:array[0..Maxsize] of byte;rnbeginrn bufferdatalen:=bufferlength;rn if bufferlength<>2 thenrn beginrn move(buffer^,(@rbuffer)^,bufferlength);rn hand[0]:=rbuffer[0];rn for i:=0 to bufferlength-1 dorn beginrn inbuffer[i]:=rbuffer[i];rn end;rnend;rn application.ProcessMessages;rnend;rn===========rnfunction TMainform.rd(chip,AddrHigh,AddrLow,dataLenHigh,dataLenLow:byte):byte;rnvarrni:integer;rnTbuf:array [0..10] of byte;rn checksum:byte;rn datalen:word;rnbeginrn hfok:=$55;rn bufferdatalen:=0;rn DataLen:=DataLenHigh*256+DataLenLow;rnTbuf[0]:=$01;rnTbuf[1]:=$00;rnTbuf[2]:=$ff;rnTbuf[3]:=$01;rnTbuf[4]:=chip;rnTbuf[5]:=AddrHigh;rnTbuf[6]:=AddrLow;rnTbuf[7]:=dataLenHigh;rnTbuf[8]:=dataLenLow;rnTbuf[9]:=Tbuf[0];rnfor i:=1 to 8 do Tbuf[9]:=Tbuf[9] xor Tbuf[i];rn comm1.WriteCommData(pchar(@Tbuf),10);rn timedelay(2000,datalen+4);rn if bufferdatalen>=datalen+4 thenrn beginrn checksum:=0;rn for i:=0 to datalen+3 dorn beginrn checksum:=checksum xor inbuffer[i];rn end;rn for i:=3 to datalen+3 do pt[i-3]:=inBuffer[i];rn if checksum=0 thenrn hfok:=$99rn elsern hfok:=$44;rn end;rn result:=hfok;rnend;rnrnFunction TMainform.wr(chip,AddrHigh,AddrLow,dataLenHigh,dataLenLow:byte):byte;rnvarrni:integer;rnbuffer:array [0..MaxSize] of byte;rn//buffer:array [0..2048] of byte;rnrn datalen:word;rnbeginrn hfok:=$55;rn bufferdatalen:=0;rn DataLen:=DataLenHigh*256+DataLenLow;rnbuffer[0]:=$01;rnbuffer[1]:=$00;rnbuffer[2]:=$ff;rnbuffer[3]:=$00;rnbuffer[4]:=chip;rnbuffer[5]:=AddrHigh;rnbuffer[6]:=AddrLow;rnbuffer[7]:=dataLenHigh;rnbuffer[8]:=dataLenLow;rnrn for i:=0 to datalen-1 dorn beginrn buffer[9+i]:=pt[i];rn end;rn buffer[9+datalen]:=$00;rn for i:=0 to datalen+8 do // to datalen+11-1rn beginrn buffer[datalen+9]:=buffer[datalen+9] xor buffer[i];rn end;rn comm1.WriteCommData(pchar(@buffer),datalen+10);rn timedelay(2000,1);rn if bufferdatalen>0 thenrn if (inbuffer[0]=$99) thenrn hfok:=$99rn elsern hfok:=$44;rn result:=hfok;rnend;rn
串口读写重定向到tcp
这个小程序用来对<em>串口</em><em>读写</em> Usage: AppName [-p port] [-c com] [-b baudrate] Option: -a ip Host IP to bind -p port TCP port to listen on -c com COM port to connect to -b baudrate Baudrate to use Attention: 1> If the host have no IP address, use localhost 2> default setting is : -a localhost -p 23 -c COM1 -b 38400 它打开一个tcp服务器端, 你可以使用telnet连接它, 然后你的<em>读写</em>就好像是直接对<em>串口</em>进行的一样 ,包中的.exe是用dev c++编译的
Linux 下串口标准读写
这里面包含了几个程序 主要是Linux下<em>串口</em>的<em>读写</em>等
XP下串口读写(VC)
用VC 做的<em>串口</em><em>读写</em>,其界面和网上下载的软件工具sscom32.exe差不多
MFC 读写串口
里面有两个工程 同步<em>读写</em><em>串口</em> 异步<em>读写</em><em>串口</em> 是最基本的操作 很有参考价值
Labview 串口读写用例
labview编写,使用<em>串口</em>进行<em>读写</em>操作的标准用例
VC++循环读写串口
在对话框添加<em>串口</em>控件,<em>串口</em>打开,配置,<em>读写</em>,关闭。 要循环<em>读写</em>可以用定时器SetTimer()。OnTimer(),KillTimer()这三个函数。
python读写串口
#!/usr/bin/python import serial from time import sleep ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=0.5) print ser.port print ser.baudrate def recv(serial): while True: data =serial
Arduino 串口数据读写
源代码: char teststring; void setup() {  Serial.begin(9600);   //<em>串口</em>和Arduino之间的通信    }   void loop() {  while(Serial.available()&amp;gt;0){    teststring = Serial.read();     Serial.println(teststrin...
串口读写程序(labview)
labview编写的<em>串口</em>读取程序,把惯导输出的十六进制代码换成十进制并用欧拉角表示
串口读写冲突
我用API方式操作<em>串口</em>,一个线程使用WaitCommEvent()的OVERLAPPED方式等待<em>串口</em>数据,另一个线程接收用户键盘消息,并将按键信息发送到同一<em>串口</em>。现在的<em>问题</em>是,<em>串口</em>接收数据正常,但是一旦发送数据,就会引发冲突,程序一直停在WriteFile()函数中出不来,且数据一直发送不出去。请问这个<em>问题</em>应该怎么解决?
读写串口数据
我按照‘Delphi中<em>串口</em>通信的实现’(河南省计算中心 张海航)一文中所说的方法,来解决<em>串口</em>通信<em>问题</em>,但是在执行 rn move(buffer^,pchar(@rbuf^),bufferlength); rn时出现'pointer type required'的错误,我不知是怎么回事,请各位大师指教!rn我不胜感激!rnrnrn rnrn
求助 多线程串口读写............
通讯方式:采用485总线主从应答式。pc机作为主机每隔4小时向各从机发送一次控制启动指令,系统每一次通信过程均由主机发起,从机在规定的时间间隔即0.5秒内应答,如在0.5秒内从机无应答,则主机应重新发起通信过程。如主机连续多次(10次)发起通信过程从机无应答,则主控软件则可认为该分机工作不正常,即可发出报警信息。rn rn由于还要牵扯大量从机数据上传处理,我采用多线程方式,专门建立一个工作者线程进行<em>串口</em>监视现在<em>问题</em>是我用哪个函数实现定时到后第一次发送数据后,判断有无接受数据,如何实现没接收到数据,后再重发?然后一直到10次或者最大时间到,如果接收数据正确成功,如何发送下一从机控制命令,求助给个思路或者函数,谢谢,我菜鸟rn
异步读写串口 WIN7
如题。rn我有个软件,有<em>串口</em>的<em>读写</em>操作,方式;异步rn在XP下完全没有<em>问题</em>,在一台win7的电脑下有<em>问题</em>,单步发现 我witefile成功 sleep一会以后 再readfile返回0rn是否在WIN7下 sleep时间要变长 还是别的什么原因
Linux下的串口读写程序
我这儿有一块MC55的GPRS开发板,我想利用程序控制<em>串口</em>来发送AT指令并回显rn比如我通过<em>串口</em>发送AT后,回收到回应:AT OKrn我想把这些都显示出来rn但是我不知道<em>串口</em>参数中的vmin 和vtime该怎么设置rn我现在的程序总是不能正确的显示回应,这一条指令的回应信息可能在下一条指令的回应中才能看到,或者只显示部分rn请问大家该怎么设置<em>串口</em>参数,达到类似于下面的效果rnsend:ATrnread:rnATrnOKrnrnsend:AT+CSQrnread:rnAT+CSQrnrn29,99rnrnOK
C++编程思想 编程思想下载
C++编程思想 C++编程思想 C++编程思想 相关下载链接:[url=//download.csdn.net/download/asx123/2063455?utm_source=bbsseo]//download.csdn.net/download/asx123/2063455?utm_source=bbsseo[/url]
蒙德卡罗模拟排队论下载
基于蒙卡的排队论仿真模拟。输出平均等待时间等 相关下载链接:[url=//download.csdn.net/download/tbfuyunweiding/5926447?utm_source=bbsseo]//download.csdn.net/download/tbfuyunweiding/5926447?utm_source=bbsseo[/url]
精易模块V5.17下载
精易模块V5.17,原版源码打包成EC模块,下载后可以直接在易语言中添加模块并使用. 相关下载链接:[url=//download.csdn.net/download/xiaoqi1833/8741663?utm_source=bbsseo]//download.csdn.net/download/xiaoqi1833/8741663?utm_source=bbsseo[/url]
相关热词 c# 线程结束时执行 c# kb mb 图片 c# 替换第几位字符 c#项目决定成败 c# 与matlab c# xml缩进 c#传感器基础 c#操作wps c# md5使用方法 c# 引用父窗口的组件
我们是很有底线的