rs232 串口读写数据 的问题 [问题点数:100分,结帖人legionalways]

Bbs2
本版专家分:250
结帖率 87.5%
Bbs2
本版专家分:442
Bbs2
本版专家分:250
Bbs6
本版专家分:6831
Bbs1
本版专家分:35
Bbs5
本版专家分:2929
Bbs6
本版专家分:5872
Blank
微软MVP 2012年4月 荣获微软MVP称号
2003年4月 荣获微软MVP称号
Blank
红花 2008年2月 VB大版内专家分月排行榜第一
2003年4月 VC/MFC大版内专家分月排行榜第一
2002年11月 VC/MFC大版内专家分月排行榜第一
Blank
黄花 2011年11月 VC/MFC大版内专家分月排行榜第二
2008年3月 VB大版内专家分月排行榜第二
2008年3月 硬件/嵌入开发大版内专家分月排行榜第二
2003年4月 其他开发语言大版内专家分月排行榜第二
2003年4月 VB大版内专家分月排行榜第二
2003年3月 VB大版内专家分月排行榜第二
Blank
蓝花 2008年5月 其他开发语言大版内专家分月排行榜第三
2008年4月 其他开发语言大版内专家分月排行榜第三
2008年3月 其他开发语言大版内专家分月排行榜第三
2003年3月 VC/MFC大版内专家分月排行榜第三
2003年5月 其他开发语言大版内专家分月排行榜第三
Bbs4
本版专家分:1518
Bbs1
本版专家分:50
Bbs2
本版专家分:250
Bbs2
本版专家分:250
Bbs1
本版专家分:15
Bbs2
本版专家分:250
如何用C++Builder 6读写Rs232串口数据
一个项目需要,我初学C++Builder 6编<em>串口</em>程序,那位高手有现成的<em>读写</em>RS232口<em>数据</em>的程序,高分求救。程序详细一点,带注释。
RS232串口发送数据问题
本人对VC很初级的认识,而且对多线程多<em>串口</em>通信也很盲目,如果大家有知道这方面好的资料适合初学者,推荐下最好!呵呵。。本人非常感谢!!rn下面说现在遇到的<em>问题</em>:rnrn目前的项目中需要两个<em>串口</em>,接两台智能仪器,希望能够实时的发送和接收。但是现在我对一个<em>串口</em>进行发送命令,却不能实时响应,下面是我写的循环。rnfor(SWave=380;SWave, step);//转换格式rn len=strSend.GetLength();//测试长度rn char *m_strSendString = new char[len+1];//定义了一个字符型的指针rn memset(m_strSendString ,0,sizeof(m_strSendString ));rn for(int k=0;k
rs232串口问题
买了条USB转<em>串口</em>的线和一条 母母加长线。现在无论如何连接,都无法接收<em>数据</em>。短接23脚,有<em>数据</em>回显。rn但是无论是用USB转<em>串口</em>线连接还是 直接用母母头的线连接两台电脑,<em>串口</em>测试软件都无法收到<em>数据</em>。rn搞不清楚是什么<em>问题</em>。大家帮我看看是什么<em>问题</em>。没分了。抱歉
c#读串口数据问题rs232
C#通過com口讀測量仪器<em>数据</em>,测量时用超级终端能读到<em>数据</em>(C#com口参数设置与超级终端都是一样的)rnrn1、用超級終端可以正常讀取數據,附圖rn[img=http://img.my.csdn.net/uploads/201210/20/1350714100_1019.JPG][/img][img=http://img.my.csdn.net/uploads/201210/20/1350714101_5832.JPG][/img]rn2、用C#調試時只有開關設備才能讀到數據,测量仪测试时收不到<em>数据</em>,是怎么回事?rn[img=http://img.my.csdn.net/uploads/201210/20/1350714101_4026.JPG][/img]rnrn<em>问题</em>:C#com口参数设置与超级终端都是一样的,C#为什么只有在开关设备时读到<em>数据</em>,测试仪测试时读不到<em>数据</em>是怎么回事?rnrn详见代码rn private void Form1_Load(object sender, EventArgs e)rn rn rn rn this.cmbBPS.Text = "9600";rn this.cmbCheck.Text = this.cmbCheck.Items[0].ToString();rn this.cmbDataLen.Text = "8";rn this.cmbStopBit.Text = "1";rn this.cmbSerialPortNo.Text ="COM1";rn rn tryrn rn if (this.serialPort1.IsOpen == false)rn rn this.serialPort1.Open();rn this.btnOpenSerialPort.ImageIndex = 0;rn this.btnOpenSerialPort.Text = "关闭<em>串口</em>";rn rn rn catchrn rn MessageBox.Show(this, "打开<em>串口</em>失败!<em>串口</em>不存在或其它设置占用", "打开<em>串口</em>失败", MessageBoxButtons.OK, MessageBoxIcon.Error);rn rn rnrn rn /// rn /// 使用异步回调机制来显示<em>数据</em>到主界面rn /// rn /// rn private void SetText(string text)rn rn string str = "";rn if (this.txtReceive.InvokeRequired)rn rn SetTextCallback d = new SetTextCallback(SetText);rn this.Invoke(d, new object[] text );rn rn elsern rn int i = text.IndexOf("@");rn str = text.Substring(0, i);rn this.lbRcvBytes.Text = "R:" + str;rn //接收到的<em>数据</em>rn this.txtReceive.Text += text.Substring(i + 1, text.Length - i - 1); ;rn this.txtReceive.SelectionStart = this.txtReceive.Text.Length;rn this.txtReceive.ScrollToCaret();rn //接收的<em>数据</em>长度rnrn rn rnrn rnrn private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)rn rn rn byte[] receviedBuf;rn SerialPort sp = (SerialPort)sender;rn string str = "";rn int rcvByteLen=0;rn tryrn rn receviedBuf = new byte[sp.BytesToRead];rnrn int itemp = sp.BytesToRead;rn for (int i = 0; i < itemp; i++)rn rn receviedBuf[i] = Convert.ToByte(sp.ReadByte());rn rcvByteLen++;rn rnrnrn foreach (byte rcvByte in receviedBuf)rn rn if (this.chRcvHex.Checked == false)rn rnrn if (rcvByte < 128)rn rn str += Microsoft.VisualBasic.Strings.Chr(rcvByte).ToString();rn this.lastRcvByte = 0;rn rn elsern rn if (this.lastRcvByte == 0)rn rn this.lastRcvByte = rcvByte;rn rn elsern rn str += Microsoft.VisualBasic.Strings.Chr(lastRcvByte * 256 + rcvByte).ToString();rn this.lastRcvByte = 0;rn rn rn rn elsern rn if (rcvByte < 16)rn rn str += " 0" + Microsoft.VisualBasic.Conversion.Hex(rcvByte).ToString();rn rn elsern rn str += " " + Microsoft.VisualBasic.Conversion.Hex(rcvByte).ToString();rn rn rn rn rn UInt64 rcvBytes;rn if (this.lbRcvBytes.Text != "R:")rn rcvBytes = Convert.ToUInt64(rcvByteLen) + Convert.ToUInt64(this.lbRcvBytes.Text.Substring(2, this.lbRcvBytes.Text.Length - 2));rn elsern rcvBytes = Convert.ToUInt64(rcvByteLen);rnrn str = rcvBytes.ToString() + "@" + str;rnrn SetText(str);rn rn catch (Exception ex)rn rn int itemp = sp.BytesToRead;rn byte byteTemp = 0;rn for (int i = 0; i < itemp; i++)rn byteTemp = Convert.ToByte(sp.ReadByte());rn rn rnrn rn
mscomm rs232串口数据溢出问题
大家好,我用<em>rs232</em><em>串口</em>从2812向pc发送16进制<em>数据</em>时遇到如下<em>问题</em>,代码如下:rnPrivate Sub MSComm1_OnComm()rn Dim InByte As Variantrn Dim i As Integerrn Dim str As Stringrn rn If MSComm1.CommEvent = comEvReceive Then ' 收到 RThreshold # of charsrn InByte = MSComm1.Inputrn str = Text1.Textrn For i = LBound(InByte) To UBound(InByte)rn str = str & " " & Hex(InByte(i))rn Next irn Text1.Text = Right(str, 100)rn Text1.Text = val("&H" & Text1.Text) (1)rn End IfrnEnd Subrn当不使用(1)时,能很好收到16进制<em>数据</em>rn当使用(1)将16进制<em>数据</em>转换为10进制<em>数据</em>时,老出现溢出错误,是什么原因,多谢!rnmscomm设置为38400, n, 8, 1rn<em>rs232</em><em>串口</em>发送<em>数据</em>频率为100次每秒rn
RS232串口
哪位有RS232<em>串口</em>调试器的VC源程序啊,急用啊?邮箱tcwu0310@sina.com
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...
读写串口数据
我按照‘Delphi中<em>串口</em>通信的实现’(河南省计算中心 张海航)一文中所说的方法,来解决<em>串口</em>通信<em>问题</em>,但是在执行 rn move(buffer^,pchar(@rbuf^),bufferlength); rn时出现'pointer type required'的错误,我不知是怎么回事,请各位大师指教!rn我不胜感激!rnrnrn rnrn
C#串口数据读写
C#<em>串口</em><em>数据</em><em>读写</em>。 包含<em>读写</em><em>串口</em>。简单操作。
串口读写数据
在给单片机写文本<em>数据</em>时,单片机不能开辟一个很大的<em>数据</em>将他们全部接收后在处理,这个程序在发送文本<em>数据</em>时,再发送完一个十六进制数后,等待1ms,让单片机有足够的时间处理这个<em>数据</em>,这样单片机只要开辟一个字节即可实现接收一个文本<em>数据</em>。比如有一串<em>数据</em>是23 45 65 78 A4,写在文本文档中,这个程序发送23后会隔一段时间再发45。注意发送为16进制<em>数据</em>,且要用空格隔开。
MyComm,读写串口数据
MyComm使用delphi 4.0开发,可以在Delphi 3/4/5各版本中使用。
串口读写数据
我现在windows xp 系统上用VC++<em>读写</em><em>串口</em>,利用API函数,下位机是dsp,发送<em>数据</em>。现在有个<em>问题</em>是,当发送<em>数据</em>比如说‘A’后,上位机<em>串口</em>收到‘A’后,还继续接受大量的‘0’,感觉就是上位机把dsp<em>串口</em>端口处的低电平继续当做<em>数据</em>进行接受了,不能识别这种假<em>数据</em>。这如何处理呢?
串口数据读写.vi
在labview中编程,实现向<em>串口</em>写入<em>数据</em>并且从<em>串口</em>读出<em>数据</em>。
在线等,串口RS232问题
SetDevice(BYTE byComId, BYTE byByteSize, BYTE byStopBits , BYTE byParity, DWORD dwBaudRate , char cEvtChar, DWORD dwBinary)rn设置<em>串口</em>函数,这几个函数参数代表什么?rnrn第一次接触,都不懂,请大哥帮帮忙了.
RS232串口的接收信号问题
我接收信号的程序如下:rnvoid CRS232CommDlg::OnOnCommMscomm1() rnrn // TODO: Add your control notification handler code herern UpdateData(true);rn VARIANT variant_inp;rn COleSafeArray safearray_inp;rn long i=0;rn int len;rn char rxdata[1000];rn CString tmp;rn switch (m_mscom.GetCommEvent())rn rn case 2:rn rn variant_inp=m_mscom.GetInput();rn safearray_inp=variant_inp;rn len=safearray_inp.GetOneDimSize();rn for(i=0;i
RTX开发RS232串口问题
在hongxin7坛友的“[原]RTX实时平台实现RS232通讯”中的例子,<em>串口</em>最多只能发送16个字符,超过16个字符以后,后面的字符无法接受和发送,rn如发送字符串:0123456789abcdefghijkrn只能接到:0123456789abcdefrnrn二周时间了,联系不上hongxinrn不知是否有类似开发经历的同学能否解决下?rn急!rn非常感谢!
串口RS232和RS485鉴别问题
1. 背景 项目需要部署一台工控机,拿到的时候只是测视了下收发正常,并未注意<em>串口</em>类别, 致使现场测试的时候一直无法收到<em>数据</em>,枉费了不少时间,特此提出来注意下。 2. 关键点 232和485是硬件通信上的差别,对于软件层面来说, 如<em>串口</em>助手等并不关心,只有能够收到<em>数据</em>即可。 而测试时忽略了接线<em>问题</em>。232接的是2、3和5(地线,一般不接), 而485接的是1、2和5(地线,一般不接)。
RS232串口数据量通讯的问题
大家好,现在再做一个<em>串口</em>通讯的程序,<em>数据</em>量比较大,通讯协议知道,已经能正常通讯,不过发现经常是<em>数据</em>收发一段时间之后会乱掉,就是没有按要求收发了,我这里面有校验的,校验不成功重新发送,最多允许重复十次,而且发现最后错的主要是一包<em>数据</em>没收完就结束了,也就是把一包<em>数据</em>按几包接受了,而且一旦错了很难纠正过来,但是每次我都又从新清零的,也就是每报<em>数据</em>的接收都是从头开始的,理论上说,错了下次应该就纠正过来了啊。rn很着急,帮我出出主意吧,谢谢大家了rnrn对了我的<em>串口</em>在<em>数据</em>收发的时候用的是轮询的方式,只要有<em>数据</em>就接收
Linux_C_C++串口读写串口读写
串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。常用的<em>串口</em>是 RS-232-C 接口(又称 EIA RS-232-C)它是在 1970 年由美国电子工业协会(EIA)联合贝尔系统、 调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是"<em>数据</em>终端设备(DTE)和<em>数据</em>通讯设备(DCE)之间串行二进制<em>数据</em>交换接口技术标准"该标准规定采用一个 25 个脚的 DB25 连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。传输距离在码元畸变小于 4% 的情况下,传输电缆长度应为 50 英尺。 Linux 操作系统从一开始就对串行口提供了很好的支持
win10 无法识别 RS232串口问题
一开始在网上看到的大部分驱动均是win7和xp,折腾到win7装上驱动发现可以,但是不喜欢用win7老旧的系统,又重新折腾回win10。百度搜索该<em>问题</em>按时间排序,看了某位大神经验最终发现win10下也有解决方案,在这个官网上可以找到这里分享下驱动文件,需要手动安装两次。https://pan.baidu.com/s/1Ur6VIZYTZKFBbUNz-14e8w...
Java读写RS232
一个经典JAVA<em>读写</em>RS232的示例, 可运用于<em>串口</em>的操作,并与<em>数据</em>库相连.
关于RS232口的读写
各位大虾:rn 小弟近日做到一个程序,要读取RS232口的<em>数据</em>,我没有发现DELPHI里有这样的控件。有没有谁可以教教我呀!!!
关于串口读写数据的文章
关于<em>串口</em><em>读写</em><em>数据</em>的文章 <em>串口</em><em>读写</em>程序!!!
串口读写数据发生畸变
我那块板卡是传送arinc429协议<em>数据</em>的接口卡,应该是属于isa <em>串口</em>通信的板卡吧,不是普通的com1、com2之类的!在设备管理器里面看不到该设备!rnrn 它是接受一个32位的<em>数据</em>,然后我发现输入FF(16进制)以下的<em>数据</em>都不会有什么<em>问题</em>,但输入fff,接收到的<em>数据</em>变成:eff,但输入eee,可以正常,输入ddd,又变成cdd,反正如此循环,都是最高位比实际的低一位!rnrn不知道是什么原因,大家<em>读写</em>别的板卡,有没有碰到过这种事???
C#读写串口数据Demo
用C#实现<em>读写</em><em>串口</em><em>数据</em>。用于自动化界面和板卡、PLC等通讯
串口读写数据样例 Android-SerialPort-API
<em>串口</em>模块<em>读写</em><em>数据</em>样例,原demo中读取<em>数据</em>转String时乱码,添加了ByteArrayToHexString显示账号
StagoStaCompact血凝仪-RS232串口数据说明
Stago Sta Compact血凝仪-RS232<em>串口</em><em>数据</em>说明 这种资料网络上太少了,希望对你有点帮助 上一个失误是个空的
Java实现串口数据读写
最近的一个项目中需要将扫码枪读取到的<em>数据</em>取出,但是因为扫码枪是用<em>串口</em>传输<em>数据</em>的,比较少见,所以记录一下,当给自己做一个小结,有需要的同学也能参考一下。public class receiveData implements SerialPortEventListener{ protected static CommPortIdentifier portid = null; //通讯端口标识符
RS232串口显示实时温度数据
基本小程序,RS232<em>串口</em>显示实时温度<em>数据</em>,DS18B20模块
如何向串口读写数据
请问如何设置<em>串口</em>波特率,及向<em>串口</em><em>读写</em><em>数据</em>
请教串口读写丢失数据问题
使用一个定时器控制一个写线程不断发送字符,rn同时开了一个读线程。rn<em>问题</em>:rn当不段发送写字符<em>串口</em>1时rn再从另一端同时也通过<em>串口</em>1接受字符来读rn就会出现丢失<em>数据</em>情况rnrn请问是为什么?不是<em>串口</em>是全双工的么?各行其道?为何还会出现这样情况?rn以上都是异步rn
几个串口同时读写数据多线程问题
在程序中同时打开几个<em>串口</em>同时<em>读写</em><em>数据</em>,请问应该如何处理线程之间的关系?
c#串口多线程数据读写问题
设计一个<em>串口</em>的程序,硬件是USB转485的,要读出设备的<em>数据</em>并保存。rnrnSerialPort类有DataReceived事件,所以读<em>串口</em>可以不用自己设线程了。因为要经常询问以得到设备的<em>数据</em>,所以要重启一个线程去读。单不知如何实现?rnrn因为在询问<em>数据</em>时可能还会有其他的操作发出<em>串口</em>的命令,怎么样做才能避免相互的干扰?rnrn因为是485的,所以自己发出的<em>数据</em>也是能收到的,<em>数据</em>比较乱,不知如何分析取得的字符串?rnrn自己做了一点程序,在执行到join时总是死机。rnrn private void btnOpenPort_Click(object sender, EventArgs e)rn rn rn if (comport.IsOpen)rn rn comport.Close();rnrn getDataThread.Join();rn rn rn rn elsern rn comport.BaudRate = int.Parse(cmbBaudRate.Text);rn comport.DataBits = int.Parse(cmbDataBits.Text);rn comport.StopBits = (StopBits)Enum.Parse(typeof(StopBits), cmbStopBits.Text);rn comport.Parity = (Parity)Enum.Parse(typeof(Parity), cmbParity.Text);rn comport.PortName = cmbPortName.Text;rn comport.ReadTimeout = 500;rn comport.WriteTimeout = 500;rnrn tryrn rn comport.Open();rn getDataThread.Start();rn rn catch (Exception)rn rn MessageBox.Show("<em>串口</em>被占用!");rn rnrn rnrn EnableControls();rnrn if (comport.IsOpen) txtSendData.Focus();rn rnrn private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)rn rn int bytes = comport.BytesToRead;rnrn byte[] buffer = new byte[bytes];rnrn comport.Read(buffer, 0, bytes);rnrn Log(LogMsgType.Incoming, ByteArrayToHexString(buffer));rn rnrn private void GetData()rn rnrn while (comport.IsOpen)rn rn byte[] data = HexStringToByteArray("FD 01 00 C8 00 FE");rnrn tryrn rn comport.Write(data, 0, data.Length);rn rn catch (Exception)rn rnrn MessageBox.Show("<em>数据</em>发送错误!控制器无响应!");rn rnrn Log(LogMsgType.Outgoing, ByteArrayToHexString(data) + "\n"); rn rnrn rn
调整RS232串口接受数据间隔时间
现在用软件或者超级终端采集电子分析天平<em>数据</em>RS232接口,接受<em>数据</em>间隔都在100ms每次,怎么才能修改成10S以上啊。接受<em>数据</em>频次太快。产品测试时大约5分钟才有一次称量变化,求会的老哥解答下,本人小白。
CoulterHmX血液分析仪-RS232串口数据说明
BeckMan Coulter HmX血液分析仪(血常规)-RS232<em>串口</em><em>数据</em>说明
RS232串口原理图
RS232<em>串口</em>原理图 <em>rs232</em> sch原理图
RS232串口文件传输系统
RS232<em>串口</em>文件传输系统,传送文件小工具
9针RS232串口定义
9针RS232<em>串口</em>定义
RS232 语音串口传输
实现实时语音的录入以及与RS232<em>串口</em>完美结合
php打开串口RS232
php打开<em>串口</em>RS232 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
RS232串口接线图
RS232<em>串口</em>接线图,单片机开发必备工具DIY
RS232串口监控工具
调试RS232通信的好助手,可以用于<em>串口</em>监控和调试,查看<em>串口</em>设置和收发<em>数据</em>
RS232 串口转接板
<em>串口</em>排线转<em>串口</em>的电路设计,利用max3232完成电平转换
RS232串口代码
使用Verilog开发RS232的<em>串口</em>通信协议。调试通过
RS232串口查看工具
目前最稳定的RS232<em>串口</em>查看工具。
STM32 RS232串口控制
void USART3_IRQHandler(void) //<em>串口</em><em>数据</em>处理 { u8 temp; //定义接受<em>数据</em>变量 if(USART_GetITStatus(USART3,USART_IT_RXNE)) { temp = USART_ReceiveData(USART3); if (temp==0x55)GPIO_ResetBits(GPIOC,GPIO_Pin_11); //<em>串口</em>收到十六进制55,输出为0 if (temp==0xAA)GPIO_SetBits(GPIOC,GPIO_Pin_11); //<em>串口</em>收到十六进制AA,输出为1 if (temp==0x66)GPIO_ResetBits(GPIOC,GPIO_Pin_12); //<em>串口</em>收到十六进制66,输出为0 if (temp==0xBB)GPIO_SetBits(GPIOC,GPIO_Pin_12); //<em>串口</em>收到十六进制BB,输出为1 if (temp==0x77)GPIO_ResetBits(GPIOD,GPIO_Pin_2); //<em>串口</em>收到十六进制77,输出为0 if (temp==0xCC)GPIO_SetBits(GPIOD,GPIO_Pin_2); //<em>串口</em>收到十六进制CC,输出为1 } }
Rs232串口操作,急救!
代码如下:rnrnHANDLE hComm = CreateFile("COM5",GENERIC_READ | GENERIC_WRITE, 0,NULL,OPEN_EXISTING, NULL , 0);rnDCB dcb;rnGetCommState(hComm,&dcb);rndcb.BaudRate = 1200 ;rndcb.ByteSize = 8 ;rndcb.StopBits = 2 ;rndcb.Parity = NOPARITY;rnSetCommState(hComm,&dcb);rnBYTE buffer[4] = 0xA0 , 0x00 , 0x8E,0x9B ;rnDWORD bytesend;rnWriteFile(hComm,buffer,sizeof(buffer),&bytesend,NULL);rn//Sleep(1000);这里试过等待一下,不过也没用.rn//COMMTIMEOUTS to;rn//memset(&to, 0, sizeof(to));rn//to.ReadIntervalTimeout = 10;rn//SetCommTimeouts(hComm, &to);这个也试过,不过也没用rnDWORD wCount ;rnchar recv[100] ;rnReadFile(hComm,recv, 100, &wCount, NULL);rnCloseHandle(hComm);rn-------------------------------------------------rn现在的<em>问题</em>是收不到<em>数据</em>,而用AccessPort做调试发送了16进制的A0,00,8E,9B(我的测试设备的一个指令,设备收到这个指令则反馈<em>数据</em>)是可以收到<em>数据</em>的.而用我上面的程序却收不到,同时AccessPort监控中的信息却是一样的,比如说都是rnIRP_MJ_WRITE Length: 0004, Data: A0 00 8E 9B rn这个操作,设置也一样1200,8,n,2的方式.rn哪位达人能告诉我可能出<em>问题</em>的对方吗?不胜感激!!rn
rs232串口测试程序
自己在别人的基础上实现的~适合于像自己这样的菜鸟级别的。
RS232串口 程序
<em>串口</em> 收发 51单片机 程序 直接烧录到单片机啊
RS232串口调试工具
RS232<em>串口</em>调试工具,用C++Builder写的。
C++串口类 RS232
用C++编写的<em>串口</em>类。调用winAPI函数。包含头文件windows.h、string。 void SetPortNumber(const ComPort PortNumberToSet); void SetBaudRate(const BaudRate BaudRateToSet); void SetStopBits(const StopBits StopBitsToSet); void SetParity(const ParityType ParityToSet); ComPort GetPortNumber(); BaudRate GetBaudRate(); StopBits GetStopBits(); ParityType GetParity(); bool Open(); bool IsOpen(); long IsRxData(); void Flush(); void Close(); unsigned long Read(char* ReadDataPtr); bool Write(const char* WriteDataPtr,const char WriteLen);
RS232串口驱动
usb转232<em>串口</em>驱动 包含:windows,liunx,IOS等。
串口RS232检测电路
1、此电路检测RS232电平信号!注意!注意!不是TTL信号。 2、此电路能够检测8路RS232信号。
rs232串口共享
多个进程共享一个RS232<em>串口</em>, 为公司的读卡器应用开发的.比如设备连接在com1, 进程1 初始化com1后, 进程2 也可以访问com1上的设备.以一个类来实现了这个共享功能,使用方便快捷。公司的项目在使用这个类,经测试没有<em>问题</em>。
RS232串口源程序
一个有用的RS232<em>串口</em>源程序开发实例,可以作为参考
串口rs232调试程序
用于<em>串口</em><em>rs232</em>调试的程序文件,便于调试<em>串口</em>的<em>数据</em>
RS232串口引脚定义
本文章针对不同引脚RS232的定义,RS232是<em>串口</em>通信的一个很有用的文档
串口通信协议rs232详解
详细描述了<em>串口</em>通信协议<em>rs232</em>的工作流程 和各个引脚的功能
串口驱动-RS232 2.0
<em>串口</em>驱动-RS232 2.0,很好用的一个驱动软件。
MFC串口RS232编程
MFC <em>串口</em> RS232 编程 代码 实验报告
串口读写问题
设备A通过485接线连接两个子设备A1和A2rnA要接收A1和A2的<em>数据</em>,如果是不同时间内的<em>数据</em>接收,那处理没<em>问题</em>。rn开一个线程,收到什么就处理什么。rnrn但是 当A1和A2同时发送<em>数据</em>至A的时候rn我想通过多线程让A接收, 可是领导说485是<em>串口</em>通讯,<em>串口</em>是串行的,无法并发rn所以要么接收到A1的<em>数据</em>,要么接收到A2的<em>数据</em>rn同时单独处理A1和A2的<em>数据</em>是不可能的rnrn请问他这个说法对吗?我不能收到A1+A2的一串<em>数据</em>吗?然后把它分解成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>后,在电脑的<em>串口</em>调试工具中能够看到我写的内容。但是我在调用我的<em>串口</em><em>数据</em>时发生了错误.rn 错误如下:rn [color=#FF0000] 在使用<em>串口</em>调试工具想<em>串口</em>发送<em>数据</em>时,在需要发送的<em>数据</em>前面 如果不加回车的话 无法读取<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下运行,不能使用重叠功能,现在出现读一直挂起(没有读到<em>数据</em>时)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>写<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
串口读写格式问题
在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><em>数据</em>位,停止位和效验位rn*param fd 类型 int 打开的<em>串口</em>文件句柄rn*param databits 类型 int <em>数据</em>位 取值 为 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) /*设置<em>数据</em>位数*/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>传输<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 <em>rs232</em>_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位<em>数据</em>位,一位停止位*/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_<em>rs232</em>(int rsfd);rnvoid <em>rs232</em>_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位<em>数据</em>位,一位停止位*/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为什么<em>rs232</em>_read函数总是读取不到<em>数据</em>,在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><em>数据</em>清理干净。。rn
求救!串口读写问题
我写了一个<em>读写</em><em>串口</em>的程序,我往<em>串口</em>上写入一个命令,cts-2000就发送一批<em>数据</em>到<em>串口</em>,然后我的程序接收。<em>问题</em>是有的时候程序能正常运行,即发了命令就能接到<em>数据</em>,但有的时候却接不到<em>数据</em>。有时候把cts-2000重启就好了,有的时候重启多遍也没用。我想不明白这是为什么,难道是什么参数我没设????救命!!!!
急:读写串口问题
我是一个新手,想在vc或c中如何对<em>串口</em>操作?最好有源代码,如果觉得分数太少,可以在给!rn
串口读写超时问题
用SetCommTimeouts()设置完COMTIMEOUTS结构体,但是我如何能够得到<em>读写</em>超时的事件或回调函数呢?超时是怎么体现出来的呢?
关于串口读写问题
使用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 '表示读出接受缓冲区中的所有<em>数据</em>rn MSComm1.RThreshold = 20 '20个字符产生一次接受事件rn MSComm1.Handshaking = comNone '<em>数据</em>流控制 没有rn 'MSComm1.InputMode = comInputModeText '表示读取文本内容rn MSComm1.InputMode = comInputModeBinary '表示二进制<em>数据</em>rn If MSComm1.InputMode = comInputModeText Thenrn readtype = 1rn Elsern readtype = 2rn End IfrnEnd Subrnrn'接受<em>数据</em>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>是发送该控制指令后,读出的<em>数据</em>显示该控制指令错误,请高手指正rn
关于串口读写问题
1.本规约物理层采用EIA标准RS-232或RS-485异步串行接口,疵点记录仪配置rn485-232转换器,串行通信接口参数要求:rn波特率:19200bps;rn<em>数据</em>为:8,停止位:1,检验位:无.rn2.疵点记录仪和主机之间采用半双工方式,每次通信都是由主机发送通信命令到疵点记录仪,疵点记录仪根据收到的命令作出相应的响应,疵点记录仪收到命令帧的响应延时应小于0.5秒.rn3.主机发送到疵点记录仪的命令帧格式为rn 启动字符55Hrn 启动字符AAHrn 命令码02Hrn 0H(忽略)rn 0H(忽略)rn 校验码rn4.疵点记录仪发送到主机的<em>数据</em>帧格式为:rn 启动字符55H(1字节)rn 启动字符AAH(1字节)rn 状态码(1字节)rn 帧长度(1字节)rn <em>数据</em>域(0-N字节)rn 校验码(1 字节)rn5.[color=#FF0000]校验码是从启动字符开始到校验码之前的所有各字节二进制算术和(不计超过256的溢出值)[/color]rn我用的是vs2005自带的<em>串口</em>控件,rn port.BaudRate = 19200;//波特率rn port.DataBits = 8;//8位<em>数据</em>位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();//读取从疵点返回过来的<em>数据</em>。?当疵点记录仪没有<em>数据</em>发过来,程序就卡在这里了,程序就一直等待<em>数据</em>发过来,,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串口读写问题
我的代码如下,请各位帮我看看为什么接受<em>数据</em>的时候分段接收,我给它发的是“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上收到的<em>数据</em>转发到COM6,COM6收到的<em>数据</em>转发到COM7,一个字节一个字节转发就可以,但非常的慢,我用SetCommMask(),WaitCommEvent(),ClearCommError(),这几个函数,就不起作用<em>串口</em>的<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]
线程问题生产者消费者流程图下载
生产者消费者流程图; 生产者消费者流程图。 相关下载链接:[url=//download.csdn.net/download/lxtx001/3027448?utm_source=bbsseo]//download.csdn.net/download/lxtx001/3027448?utm_source=bbsseo[/url]
DXperienceUniversal-11.2.5.part18下载
DXperienceUniversal-11.2.5 part18 相关下载链接:[url=//download.csdn.net/download/thomastang200912_126/3876845?utm_source=bbsseo]//download.csdn.net/download/thomastang200912_126/3876845?utm_source=bbsseo[/url]
强化学习原著下载
This introductory textbook on reinforcement learning is targeted toward engineers and scientists in artificial intelligence, operations research, neural networks, and control systems, and we hope it will also be of interest to psychologists and neuroscientists. 关于强化学习的一本原著,花钱在淘宝上买的。很值得一看的一本书~ 相关下载链接:[url=//download.csdn.net/download/nnw_1207/4788407?utm_source=bbsseo]//download.csdn.net/download/nnw_1207/4788407?utm_source=bbsseo[/url]
我们是很有底线的