串口读写超时问题? [问题点数:0分]

Bbs2
本版专家分:284
结帖率 93.37%
Bbs2
本版专家分:231
Bbs2
本版专家分:284
Bbs2
本版专家分:371
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); // 设置<em>超时</em>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请问读,为何会挂起,我设置了<em>超时</em>,为何<em>超时</em>后不返回。我想<em>超时</em>后返回,如何写代码,注意,这是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; /* 设置<em>超时</em>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
关于串口读写问题
使用MSCOMM控件进行<em>读写</em>rn'发送控制命令rnPrivate Sub Command2_Click()rn With MSComm1rn .CommPort = 1rn .Settings = "9600,N,8,1"rn End Withrn If Not MSComm1.PortOpen Thenrn MSComm1.PortOpen = Truern Elsern MSComm1.PortOpen = Falsern MSComm1.PortOpen = Truern End Ifrn MSComm1.OutBufferCount = 0rn '要发送的命令串(16进制) AA050001000807D0FFFFrn Dim zl(19) As Bytern zl(0) = &HArn zl(1) = &HArn zl(2) = &H0rn zl(3) = &H5rn zl(4) = &H0rn zl(5) = &H0rn zl(6) = &H0rn zl(7) = &H1rn zl(8) = &H0rn zl(9) = &H0rn zl(10) = &H0rn zl(11) = &H8rn zl(12) = &H0rn zl(13) = &H7rn zl(14) = &HDrn zl(15) = &H0rn zl(16) = &HFrn zl(17) = &HFrn zl(18) = &HFrn zl(19) = &HFrn rnrn MSComm1.Output = zlrnrn MSComm1.InputLen = 0 '表示读出接受缓冲区中的所有数据rn MSComm1.RThreshold = 20 '20个字符产生一次接受事件rn MSComm1.Handshaking = comNone '数据流控制 没有rn 'MSComm1.InputMode = comInputModeText '表示读取文本内容rn MSComm1.InputMode = comInputModeBinary '表示二进制数据rn If MSComm1.InputMode = comInputModeText Thenrn readtype = 1rn Elsern readtype = 2rn End IfrnEnd Subrnrn'接受数据rnrnPrivate Sub MSComm1_OnComm()rn Dim buffer() As Bytern ReDim buffer(20)rn rn Text1 = ""rn Select Case MSComm1.CommEventrn Case comEvReceivern '字符读rn MSComm1.RThreshold = 0rn If readtype = 1 Thenrn MsgBox MSComm1.InBufferCountrn instring = MSComm1.Inputrn Text1 = instringrn Elsern '二进制读rn Do Until MSComm1.InBufferCount = 0rn buffer = MSComm1.Inputrn DoEventsrn Looprn rn For i = 0 To 19rn List1.AddItem (Hex(buffer(i)))rn Next irn End Ifrn MSComm1.InBufferCount = 0rn MSComm1.RThreshold = 24rn Beeprn End SelectrnEnd Subrnrn现在的<em>问题</em>是发送该控制指令后,读出的数据显示该控制指令错误,请高手指正rn
关于串口读写问题
1.本规约物理层采用EIA标准RS-232或RS-485异步串行接口,疵点记录仪配置rn485-232转换器,串行通信接口参数要求:rn波特率:19200bps;rn数据为:8,停止位:1,检验位:无.rn2.疵点记录仪和主机之间采用半双工方式,每次通信都是由主机发送通信命令到疵点记录仪,疵点记录仪根据收到的命令作出相应的响应,疵点记录仪收到命令帧的响应延时应小于0.5秒.rn3.主机发送到疵点记录仪的命令帧格式为rn 启动字符55Hrn 启动字符AAHrn 命令码02Hrn 0H(忽略)rn 0H(忽略)rn 校验码rn4.疵点记录仪发送到主机的数据帧格式为:rn 启动字符55H(1字节)rn 启动字符AAH(1字节)rn 状态码(1字节)rn 帧长度(1字节)rn 数据域(0-N字节)rn 校验码(1 字节)rn5.[color=#FF0000]校验码是从启动字符开始到校验码之前的所有各字节二进制算术和(不计超过256的溢出值)[/color]rn我用的是vs2005自带的<em>串口</em>控件,rn port.BaudRate = 19200;//波特率rn port.DataBits = 8;//8位数据位rn port.Parity = Parity.None;//无校验位rn port.StopBits = StopBits.One;//1为停止位rn port.PortName = "COM1";rn port.Open();rnrn byte[] a = new byte[4];rn a[0] = 0x55; //启动字符55Hrn a[1] = 0xAA; //启动字符AAHrn a[2] = 0x02; //命令吗02Hrn a[3] = 0x01; //校验码(从启动字符开始到校验码之前的所有各字节二进制算术和),就是我上次要你算出来的结果rn port.Write(a, 0, a.Length);//[color=#FF0000]主机往疵点记录仪发送命令帧?就是a里面的值不知道是不是这么写的[/color]rnrn textBox2.Text = port.ReadLine();//读取从疵点返回过来的数据。?当疵点记录仪没有数据发过来,程序就卡在这里了,程序就一直等待数据发过来,,rn port.Close();rnrn各位老大,帮我看看,就是往疵点记录仪写的时候byte[] a里面不知道写的正确否。rnrnrnrnrnrn
串口异步读写问题
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请各位高手帮我看看
关于串口超时问题
rn我在英文版win2K+sp3的系统中<em>读写</em><em>串口</em>时遇到这样的<em>问题</em>:rnrn<em>串口</em>进行了一段时间的正常操作后,如果这时有一个写操作在执行前没有进行写<em>超时</em>设置(调用API SetCommTimeouts()),则以后所有的写操作将都会等到<em>超时</em>才会完成。rn 也就是说,如果设的写<em>超时</em>为5秒,则写操作就要5秒后才完成,设为10秒,则过10秒后执行完成,不过最后都执行成功了,只是这样就会相当的慢。rnrn 如果再次出现写操作前不设<em>超时</em>,则写操作将永远无法结束,线程挂死!!rnrnrn请问这是什么<em>问题</em>,是不是API的BUG???rn(一周后结贴)
读写串口
为什么在写入<em>串口</em>之后打印机可以打印出来可是用ReadFile确读不出来,一直显示的设备长度为0?
串口读写
uart.c该源码实现了用Linux对<em>串口</em>的<em>读写</em>操作
请教串口设置超时问题
我按MSDN上的设置将 ReadIntervalTimeout and ReadTotalTimeoutMultiplier to 设为MAXDWORD rnReadTotalTimeoutConstant =10000;rn但ReadFile时,它还是很快就返回,值为0。请问如果我要设为10秒该怎样设?
串口读写
我想做一个<em>串口</em>通讯程序与单片机通讯,但有些功能...rn1.往<em>串口</em>写入16进制数:7D 80 81 02该如何操作?rn2.读<em>串口</em>的数据,如何将其转化为16进制数以及ASCII码?
关于串口设置超时问题
关于COMMTIMEOUTS,里面的WriteTotalTimeoutMultiplier和WriteTotalTimeoutConstant如果都为0,MSDN里面说是忽略<em>超时</em>项。rnrn它的意思是不是说就没有<em>超时</em>了?是不是可能一直阻塞在WriteFile?
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期待大家的解答,我现在好郁闷..
关于串口读写的简单问题
我最近正在学习<em>串口</em>的<em>读写</em>,按照csdn上的介绍,我createfilernrn然后writefile,rn但在writefile时候老是不能返回值,程序便没有反应了,但我要是把rn第二个参数字符串指针或第四个参数已写入字符串字数之中任意一个设成NULLrn便可以了,但那样似乎就没有什么意义了。rnrn希望的得到回答,晚些时候我会将那段程序写上rnrn谢谢帮忙
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>类CSerialPort,封装有OpenCom(),CloseCom();rnWriteCom();ReadCom()...等等方法,一个用在短信发送的GsmComm类,包括GsmInit(),GsmSendMsg()....等等方法,GsmInit()中调用了类CSerialPort的方法WriteCom()对MODEM进行初始化;通过ReadCom()读取返回数据判断初始化是否成功.rnrn现在我在一个窗口类CMyDlg中开一个线程监控<em>串口</em>,有返回数据的时候调用ReadCom()读取数据并输出到列表框。我在这个窗口类中直接调用CSerialPort的WriteCom(),数据接收没有<em>问题</em>。但我在窗口类调用GsmInit()的时候,线程就监控不到<em>串口</em>有数据返回。不知道<em>问题</em>出在哪里,请高手指教。rnrn在CMyDlg.cpp中通过以下方式调用CSerialPort的成员函数是对的,如rn--CMyDlg.cpp--rnCSerialPort SP; //全局对象rnBOOL CMyDlg::OnInitDialog()rnrn ......rn if(!SP.OpenCom("COM1", 9600, NOPARITY, 8, ONESTOPBIT)) rn MessageBox("<em>串口</em>打开失败");rn ......rnrnrnvoid CMyDlg::OnSend() rnrn.......rn SP.WriteCom("AT\r\n"); //发送AT指令rn.......rn线程监控到<em>串口</em>有接收数据,调用SP.ReadCom()读数据等等,打开<em>串口</em>成功,返回数据也是正确的rnrnrn在类GsmComm中成员函数也用到了CSerialPort的方法rn--GsmComm.cpp--rnCSerialPort SPort; //全局对象rnBOOL GsmComm::GsmInit()rnrn CString strAns;rn // 测试设备是否存在rn SPort.WriteCom("AT\r\n");rn Sleep(100);rn SPort.ReadCom(strAns);rn if (strAns.Find("OK")<0) return FALSE; rnrn return TRUE;rnrnrnrn如果我在CMyDlg.cpp中如下方法调用的话,<em>串口</em>打开成功,但写数据失败,没有数据返回rnCMyDlg.cpprnrnvoid CMyMDlg::OnSend() //发送按钮rnrn ......rn GsmComm gsmc;// [color=#0000FF]此定义为全局对象结果也是一样的,应该不是<em>问题</em>所在[/color]rn gsmc.GsmInit();//初始化MODEM(此处涉及了写数据和读数据的函数)rn .....rn 这样初始化不成功,请问那里错了,那个地方出<em>问题</em>了。rn[color=#FF0000]另外,在CMyDlg中调用GsmComm的成员函数,只要不涉及到读<em>串口</em>和写<em>串口</em>等<em>串口</em>相关操作的,调用后的结果都是rn正确的,请教![/color]rnrn
串口读写问题(高分相送)
我有一个程序,是对<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
关于串口的同时读写问题.
我通过用hnewcommfilewrite:=createfile('com2',generic_write,0,nil,open_existing,rn file_flag_overlapped,0);rn和hnewcommfileread:=createfilern('com2',generic_read,0,nil,open_existing,rn file_flag_overlapped,0);rn分别创建对于<em>串口</em>的<em>读写</em>句柄,而且在读的时候还另外创建一个线程.rn但是如果我在读的时候再去通过hnewcommfilewrite:=createfile('com2',generic_write,0,nil,open_existing,rn file_flag_overlapped,0);rn去获取<em>串口</em>写的句柄时就不行.就算我把其中的共享模式由0改为1也不行.rn除非我先用closehandle(hnewcommfileread)关闭读句柄时才行,但这样的话读的进程也就不会执行.不知是createfile这个API函数使用有误还是本身流程方法有误?望指点.rn如能提供关于同时<em>读写</em>的例程将不甚感激.rnouyaning@bosind.com.cn
一个关于串口读写问题.
我在编写一个<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
请问串口读写问题(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里面只有用户数据?
关于多线程读写串口问题
谁能提供一个用API函数实现的例子,谢谢!
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>操作
串口超时退出代码段
void UART1_RxPackage(void) { u16 j; //5ms³¬Ê± //RI = 0; RxCnt = 0; for(j = 0; j &amp;lt; 2000; j++) //5ms³¬Ê±Í˳ö { if(RI) { RI = 0; RxBuff[RxCnt] = SBUF; if(++RxCnt &amp;gt;= 1...
串口超时设置
[code=C/C++]rn在<em>串口</em>初始化里设置<em>超时</em>部分rn m_CommTimeouts.ReadIntervalTimeout = 10; //两字符之间最大的延时rn m_CommTimeouts.ReadTotalTimeoutMultiplier = 10; //指定比例因子(毫秒)rn m_CommTimeouts.ReadTotalTimeoutConstant = 100; //一次读取<em>串口</em>数据的固定<em>超时</em>。rn m_CommTimeouts.WriteTotalTimeoutMultiplier = 10; //写入每字符间的<em>超时</em>。rn m_CommTimeouts.WriteTotalTimeoutConstant = 10; //一次写入<em>串口</em>数据的固定<em>超时</em>。rnrn // configurernif (SetCommTimeouts(m_hComm, &m_CommTimeouts))rn rn if (SetCommMask(m_hComm, dwCommEvents))rn rn if (GetCommState(m_hComm, &m_dcb))rn rn rn elsern ProcessErrorMessage("GetCommState()");rn rn elsern ProcessErrorMessage("SetCommMask()");rn rnelsern ProcessErrorMessage("SetCommTimeouts()");rn[/code]rn rn[code=C/C++]rn读<em>串口</em>rnif (bRead)rn rn bResult = ReadFile(port->m_hComm, // Handle to COMM port rn pRXBuff, // RX Buffer Pointerrn comstat.cbInQue, // Read one bytern &BytesRead, // Stores number of bytes readrn &rol);//port->m_ov); // pointer to the m_ov structurern rn if (!bResult) rn rn switch (dwError = GetLastError()) rn rn case ERROR_IO_PENDING: rn rn bRead = FALSE;rn break;rn rn default:rn rn port->ProcessErrorMessage("ReadFile()");rn break;rn rn rn rn elsern rn bRead = TRUE;rn rn // close if (bRead)rnrn if (!bRead)rn rn bRead = TRUE; //当调用ReadFile, WriteFile 函数的时候,该GetOverlappedResult会自动被置为无信号状态;当重叠操作完成后,该成员变量会自动被置为有信号状态。rn bResult = GetOverlappedResult(port->m_hComm, // Handle to COMM port rn &port->m_ov, // Overlapped structurern &BytesRead, // Stores number of bytes readrn TRUE); // Wait flagrnrn if (!bResult) rn rn port->ProcessErrorMessage("GetOverlappedResults() in ReadFile()");rn rn // close if (!bRead)rn[/code] rn rn rn rn1。我设置软件上位机的接收字符最大延时不能超过10MS rn2。设置后我向上位机<em>串口</em>发送的字节与字节的时间间隔为100MSrn3。我看了一些<em>串口</em><em>超时</em>设置上面说“ 在用重叠方式<em>读写</em><em>串口</em>时,虽然ReadFile和WriteFile在完成操作以前就可能返回,但<em>超时</em>仍然是起作用的。在这种情况下,<em>超时</em>规定的是操作的完成时间,而不是ReadFile和WriteFile的返回时间。rn”rn4。为上面发送时间间隔都100MS了,按道理来说应该出现<em>串口</em>的通讯错误提示,可是程序中并没有提示错误?WHY?
串口超时设置的疑问。
在用ReadFile和WriteFile<em>读写</em>串行口时,需要考虑<em>超时</em><em>问题</em>。<em>超时</em>的作用是在指定的时间内没有读入或发送指定数量的字符,ReadFile或WriteFile的操作仍然会结束。rn.rn.rn在进行<em>串口</em>通信时,有两种操作方式,即同步通信和异步通信,也就是阻塞与非阻塞,在同步通信(阻塞)当中,如果ReadFile函数没有读到数据就会一直的读下去,直到读到数据才返回,而异步通信当中,ReadFile如果没有读到数据,就直接反回了,不会等在那里,所以我在想,这个<em>超时</em>主要是针对那种情况来的呢?如果是同步通信的话,程序会阻塞,这个<em>超时</em>还有什么用,因为它会一直等待下去。如果是异步通信,如果ReadFile没有读到数据,它也马上返回了。所以这个<em>超时</em>到里有什么用呢。rn.rn.rn因为我在写程序的时候,向<em>串口</em>发送了一个数据,接下来就从<em>串口</em>里去读数据,以前我是循环去读,比如500次,如果500次没有读到数据就跳出循环,事实上也就是在某一定时间内读<em>串口</em>,如果在这个时间范围内还没有从<em>串口</em>读到数据就说明<em>串口</em>无数据可读了。这个过程以前我是用循环来完成,所以我想在想理解一下这个<em>超时</em>设置,是不是可以通过<em>超时</em>这个设置,用一个ReadFile读就可以完成我上面那个循环的用意了。希望高手们指教!
串口超时判断
简单的<em>串口</em><em>超时</em>方法,用IDLE中断,当不知道接收个数多少,也不知道头和尾时,此方法最简单
wince串口读写可以用定时函数设置超时时间吗
我实现这样两个函数rnint IOBase::Readv(char* buf,size_t len,unsigned int timeout_in_ms)rnrn char *cp = buf;rn int n = 0;rn int timeout = 0;rn size_t toread = len;rnrn timer t(timeout_in_ms,&timeout,NULL);rn if(timeout_in_ms != 0xFFFFFFFF) rn t.start();rn rnrn while(!timeout && (toread > 0)) rn if((n = Read(cp,toread)) < 0) rn break;rn rn if(!n) rn sleepms(1);rn rn toread -= n;rn cp += n;rn rn // ok, all bytes receivedrn return(len - toread);rn;rnint IOBase::Writev(char* buf,size_t len,unsigned int timeout_in_ms)rnrn char *cp = buf;rn int n = 0;rn int timeout = 0;rn size_t towrite = len;rnrn timer t(timeout_in_ms,&timeout,NULL);rn if(timeout_in_ms != 0xFFFFFFFF) rn t.start();rn rnrn while(!timeout && (towrite > 0)) rn if((n = Write(cp,towrite)) < 0) rn // an error occursrn break;rn rn if(!n) rn sleepms(1);rn rn towrite -= n;rn cp += n;rn rn return (len - towrite);rn;rn这两个函数在读取/接收了len长度的字符串或是<em>超时</em>时间timeout_in_ms到了才会返回,否则会阻塞。rn定时器类timer的函数sleepms实现毫秒级精确定时,请问我的程序能达到要求吗
linux串口超时时间设置
comport[port].opt.c_cc[VTIME] = 0; comport[port].opt.c_cc[VMIN] = 0; 那么可能需要关注的是VMIN和VTIME这两个选项。 VMIN 最少读取字符数 VTIME <em>超时</em>时间 (100ms最小单位) 这两个参数只有当设置为阻塞模式时才有效,有以下几种可能值: 1 VMIN> 0 && VTIME>
串口超时参数设置
Type COMMTIMEOUTS '<em>串口</em><em>超时</em>参数设置rn ReadIntervalTimeout As Long '以毫秒为单位指定通信线上两个字符到达之间的最大时间。rn ReadTotalTimeoutMultiplier As Long '以毫秒为单位指定一个乘数,该乘数用来计算读操作的总限时时间。每个rn '读操作的总限时时间等于读操作所需的字节数与该值的乘积。rn ReadTotalTimeoutConstant As Long '以毫秒为单位指定一个常数,用于计算读操作的总限时时间。每个操作的rn '&总限时时间等于ReadTotalTimeoutMultiplier成员乘以读操作所需字节数再加上该值的和rn WriteTotalTimeoutMultiplier As Long '以毫秒为单位指定一个乘数,该乘数用来计算写操作的总限时时间。rn WriteTotalTimeoutConstant As Long '以毫秒为单位指定一个常数,用于计算写操作的总限时时间。rn End Typern rn Dim CtimeOut As COMMTIMEOUTSrnrn CtimeOut.ReadIntervalTimeout = 20rn CtimeOut.ReadTotalTimeoutConstant = 1rn CtimeOut.ReadTotalTimeoutMultiplier = 1rn CtimeOut.WriteTotalTimeoutConstant = 10rn CtimeOut.WriteTotalTimeoutMultiplier = 1rn retval = SetCommTimeouts(ComNum, CtimeOut) '设置通信<em>超时</em>参数rn 不是这时间计算不是很懂,如上所述那么比如读8个字节需要多少时间,写8个字节需要多少时间呢?rn  请指点!!!
串口通信,设置读写超时等待问题.
我打开<em>串口</em>hCom设置了一个<em>超时</em>:rn例如:rnCOMMTIMEOUTS TimeOuts;rn//设定读<em>超时</em>rnTimeOuts.ReadIntervalTimeout=MAXDWORD;rnTimeOuts.ReadTotalTimeoutMultiplier=100;rnTimeOuts.ReadTotalTimeoutConstant=500;rnrn读取代码:rnif (ReadFile(hReadCom,buffer,BytesRead,&BytesTransferred, &Ovlap) == 0) rn if(GetLastError == ERROR_IO_PENDING)rn WaitForSingleObject(Ovlap.hEvent,INFINITE); /*事件为什么要等待<em>超时</em>才完成*/rn printf("ReadFile byte=[%d],string=[%s]\n", BytesTransferred,buffer);rn rnrnrn WaitForSingleObject(Ovlap.hEvent,INFINITE); rn 这句为什么要等待<em>超时</em>时间用完才会返回,而不是说读取到数据就返回呢?????rnrnrnrnrn
求助,读写流一直超时
[code=csharp] HttpWebResponse res = (HttpWebResponse)_request.GetResponse();//请求远程服务rnusing (Stream stm = res.GetResponseStream())rn rn using (StreamReader sr = new StreamReader(stm, Encoding.GetEncoding("utf-8")))rn rn string result = sr.ReadToEnd();//读返回值rn return result;rn rn [/code]rn读返回值一直<em>超时</em>,用Read(char[], 0, Length))一样错误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
关于串口读写
向各位请教几个<em>问题</em>rn 1 在多文档界面下是否可以使用mscomm控件?rn 2 在使用文件读取<em>串口</em>的方式下,如果使用了事件驱动方式的EV_RXCHAR,rn 那么在READFILE中可以连续读取几个字节?如果想一次读取的数据较长rn 怎么办?rn
windows API读写串口
谁有<em>串口</em>调试助手的源代码, 我需要windows API<em>读写</em><em>串口</em>的. 用控件的不要!
关于读写串口的参数
在论坛看到几位仁兄,写了如下代码进行初始化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);
在2000下对串口读写
我在98下写过,可是现在需要在2000下对<em>串口</em>的<em>读写</em>,请大家帮帮忙!rn能不能给我一个例子?rn我的邮箱是hujiajia1981@163.comrn谢谢!
很好串口读写
很好的通信软件,很稳定,我测试过了,在老化测试中没出过事,下载的试下先吧
解决ArcGis和Erdas之间的冲突下载
在安装了ArcGis9.3环境下安装Erdas会出问题。这里提供了解决方法。 相关下载链接:[url=//download.csdn.net/download/tianqin625/3400806?utm_source=bbsseo]//download.csdn.net/download/tianqin625/3400806?utm_source=bbsseo[/url]
HICOM程控交换机AMO指令WABE浅述下载
对hicom程控交换机管理和维护指令AMO进行了讨论,重点介绍了AMO指令“wabe” 相关下载链接:[url=//download.csdn.net/download/li1125/4455018?utm_source=bbsseo]//download.csdn.net/download/li1125/4455018?utm_source=bbsseo[/url]
俄罗斯方块游戏(vc6.0)下载
游戏有上下左右四个键控制,设置有不同的难度。 相关下载链接:[url=//download.csdn.net/download/fanyit123/7116275?utm_source=bbsseo]//download.csdn.net/download/fanyit123/7116275?utm_source=bbsseo[/url]
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件
我们是很有底线的