Tag: serial port

.NET中的串口通信

我使用C#从串口接收数据,但存在一些问题。 我是新手,所以我需要一些帮助。 首先,我想知道哪些函数是事件驱动的: ReadExisting() 读() Readbyte() Readchar() 的ReadLine() Readto() 如何从该端口的输入流中获取所需的数据? 我有静态大小的协议。 我是否可以使用特殊字符来指定协议数据的限制,哪个适用于此? 我该如何处理这个exception: C#SerialPort System.ObjectDisposedException,安全句柄已在System.DLL中关闭

如何忽略exception并完成尝试

所以我现在已经和这个问题争斗了大约一个星期,并且认为我知道这个问题,但我不想在那里报告答案,直到我把它固定下来。 简而言之,我在尝试使用SerialPort.Open()命令时遇到IOException。 事实certificate,这是非常常见的,大多数终端程序实际上也是如此,但他们只是忽略它。 请阅读上面的post,了解完整的故事。 现在我想要做的是忽略IOException但仍然打开串口 。 我不能用try / catch做到这一点,或者至少我不知道怎么做。 我想知道有没有办法尝试某种方式并以某种方式表明“我知道会抛出一个问题,这是一个安全问题,我选择忽略该exception并继续完成任务”。 要清楚,我不想忽略错误然后继续前进。 我想忽略错误并仍然完成操作 。 以下是我最好的猜测,但它不起作用。 try { serialPort1.Open(); } catch (System.IO.IOException) { MessageBox.Show(“An IO Exception occurred.”); } finally { //SAFELY IGNORE ERROR AND DO TASK ANYWAY HERE } 如果有人能帮我解决这个问题,我会非常感激。 编辑:如果我只是添加代码serialport1.Open后,我得到: 这与没有try / catch的情况基本相同。 我想要做的就是说我正在尝试这样做:我不在乎它会抛出错误,无论如何都要这样做。

C#SerialPort#Open()方法因为端口名而抛出ArgumentException?

在我的本地机器上, Windows XP 端口(COM和LPT) COM3 RIM虚拟串行端口v2(COM4) RIM虚拟串行端口v2(COM5) 以下代码, using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO.Ports; using System.Threading; namespace OpenSerialPortTest { class Test { static void Main(string[] args) { foreach (String serialPortName in SerialPort.GetPortNames()) { SerialPort serialPort = new SerialPort(serialPortName); try { serialPort.Open(); // Line 19 Console.WriteLine(serialPort.PortName); } catch (Exception ex1) { Console.WriteLine(ex1); […]

在两种不同的表单上使用相同的串口数据接收事件

我有一个问题,我的SerialDataReceivedEventHandler whitch无法响应serail端口中的数据。 我有一个主要forms在whitch我打开端口和做其他stuf whitch需要完成正确的串口通信(发送和接收工作)! 然后我在同一项目中打开另一个表格,需要相同的串口进行读写! 问题是我的form2中的SerialDataReceivedEventHandler不能正常工作,它与mainform中的第一个完全相同。 (如果我在主窗体应用程序中调用serial.close()冻结或造成巨大延迟) 可能我必须从我的主要事件公开,但我仍然不知道如何使我的自定义事件或其他会触发事件的forms2数据到达端口 我找到了此链接以获取帮助,但无法使用我的应用。 http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/7efccf0e-b412-4869-b942-a006773a833f 我正在使用VS2008,framework3.5(智能设备项目) 有人可以帮助我吗? , 请!

读取和发送数据到串行端口

我正在尝试进行串口通信以发送和接收数据。 这是一个场景: 我连接到串口并启动我的设备。 当它倒计时做某事时,我应该暂停它并发送一些命令来工作。 它完成所有工作,然后再次开始继续。 现在我通过互联网搜索,c#适合我。 这样做的时候你可以向我推荐一些东西吗? 我该如何开始以及我需要使用哪些方法? 谢谢。

刚刚读取刚打开的SerialPort时,只读取一个字节

奇怪的问题。 当我使用SerialPort.Read()从com-port读取数据时,如果数据到达, 则在第一次调用时只读取一个字节 ,忽略count参数和超时内可用的字节数。 所有进一步的读数都没问题,只有第一个问题 使用SerialPort.DiscardInBuffer()或关闭/打开(重新打开)com-port将再次导致第一次读取的问题。 这是一些代码: var port = new SerialPort(); port.PortName = “com2”; port.BaudRate = 9600; port.WriteTimeout = 1000; port.ReadTimeout = 1000; port.Open(); // … send some data first var read = new byte[10]; if (port.Read(read, 0, read.Length) != read.Length) { // always here at first reading no matter what } // … […]

在没有关闭连接的情况下更改C#中的波特率

我对以下链接有类似的问题。 如何在不关闭连接的情况下更改波特率? 。 但我使用C#代替java。 我开始使用波特率300.然后握手后我必须将波特率更改为4800.我向设备发送命令来执行此操作。 我改变了我的serialport的波特率。 之后,我永远无法继续与设备通信。 (如果我保持300波特率并向设备发送300波特命令,我可以继续通信) 我有一个第三方软件,也可以从这个设备读取。 当软件运行时,我正在监听端口。 它发送我发送给设备的相同命令。 它发送命令为设备设置4800波特,并可以从设备获得答案。 在波特率更改期间,它不会关闭或重新打开端口。 我必须做同样的事情。 但是当我发送命令改为4800波特时,我从设备上得不到答案。 我在等你的答案。 谢谢,FERDA 这是由进程“ReadY.vshost.exe”打开的串口监视程序端口的输出(PID:2608) 01 42 30 03 71 .B0.q 答案:09.08.2011 10:55:40.81864(+0.2656秒) 06。 要求:09.08.2011 10:55:41.06864(+1.2500秒) 2F 3F 31 31 39 39 39 30 30 34 21 0D 0A /?11999004!.. 答案:09.08.2011 10:55:41.58464(+0.5156秒) 2F 53 54 52 34 5F 42 53 4D 31 […]

使用GSM调制解调器发送英文短信(D-Link DWM-156)

我正在使用AT命令在C#.Net中开发GSM调制解调器(D-Link DWM-156)的应用程序。 发送英文短信时遇到问题。 我试着发送“你好”,但是我在手机里收到□□□□或者……你好。 serialPort1.DataBits = 8; serialPort1.Parity = Parity.None; serialPort1.StopBits = StopBits.One; serialPort1.BaudRate = 9600; serialPort1.DtrEnable = true; serialPort1.RtsEnable = true; serialPort1.DiscardInBuffer(); serialPort1.DiscardOutBuffer(); serialPort1.WriteLine(“AT\r”); Thread.Sleep(2000); serialPort1.WriteLine(“AT+CMGF=1\r”); Thread.Sleep(1000); serialPort1.WriteLine(“AT+CMGS=\”09390149196\”\r”) Thread.Sleep(2000); serialPort1.WriteLine(“hello” + “\x1A”); Thread.Sleep(1000);

获取USB适配器的com端口号

我正在尝试编写一个程序,使用arduino mega和基于FTDI的USB转RS485适配器。 我想让程序用户友好,因此我不会让用户手动检查com端口号,但我想自动检测它。 这是代码的一小部分 ManagementScope scope = new ManagementScope(); SelectQuery query = new SelectQuery(“SELECT * FROM Win32_SerialPort”); ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query); try { foreach (ManagementObject item in searcher.Get()) { String description = item[“Description”].ToString(); String deviceID = item[“DeviceID”].ToString(); Console.WriteLine(“Porta ” + description + ” deviceID ” + deviceID); if (description.Contains(“USB Serial Port”)) return deviceID; […]

如何在c#中创建多个线程

我需要收听机器中的所有串口。 假如我的机器有4个串口,我必须创建4个线程并分别用附加的线程开始监听每个端口。 我用这段代码来获取机器中的端口数量。 private SerialPort comPort = new SerialPort(); public void GetAllPortNamesAvailable() { string[] ports = SerialPort.GetPortNames(); foreach (string port in ports) { //How to start a thread here ?? } } public void AssignThreadtoPort() { string msg = comPort.ReadLine(); this.GetMessageRichTextBox(“Message : ” + msg + “\n”); } 阅读评论后,我使用此代码,但没有收到消息..问题是什么? public void AssignThreadsToPorts() { string[] ports […]