Tag: 串口

从C#中的串口读取

我已经尝试过使用Readline()并且数据被删除,我尝试使用Read()但是我不知道如何使用它的错误validation方法,因为我可能会一个接一个地获得几个数据包而我无法知道将会有另一个数据包进入。在数据包BytesToRead之间是0,所以我不能使用它。 当读取数据到缓冲区时你有一个定时器或让线程进入hibernate状态以允许所有数据包到达? 我搞不清楚了。 不知道下一步该尝试什么。 我应该提一下,我不能保证从串口发出的字符串将以\ n或\ r或\ r \ n结束。 当用户按下PRINT时,我只需要一种简单的方法来读取将来自秤的所有数据包。 有人在这里回答了我喜欢的想法 – 等待所有数据包的一定时间,但他们删除了他们的答案。 你有可能重新发布它吗?

SerialPort.GetPortNames()行为

在我的C#2008应用程序中,我使用SerialPort.GetPortNames()函数来检索当前可用端口的列表。 我注意到的是,当我插入USB设备时,它的端口号显示在我的应用程序列表中,当我拔下它并刷新列表时,端口号不再存在。 该应用的一个阶段涉及连续地从/向设备读/写数据。 现在,我的期望是,如果我在操作期间拔出设备并使用SerialPort.GetPortNames()获取当前端口列表,则端口名称将不在那里,我可以使用它来确定设备已被拔出。 令我惊讶的是,尽管删除了端口名称,仍然可以找到它 为什么程序表现得像这样? 在无通信模式下,未列出端口名称。 是否与设备在通信时被删除有关?

如何通过串口RS-232或USB转换器将称重秤的重量显示到文本框中?

我被指派使用C#将称重秤(CAS CI-201A)的重量显示到文本框中。 重量将通过串口RS-232或USB转换器发送。 规模与我同在,但我不知道从哪里开始。 我怎样才能实现目标?

为什么访问com端口被拒绝?

代码: static void Main(string[] args) { Console.WriteLine(“Memory mapped file reader started”); using (var file = MemoryMappedFile.OpenExisting(“AIDA64_SensorValues”)) { using (var readerz = file.CreateViewAccessor(0, 0)) { var bytes = new byte[567]; var encoding = Encoding.ASCII; readerz.ReadArray(0, bytes, 0, bytes.Length); File.WriteAllText(“C:\\myFile.txt”, encoding.GetString(bytes)); var readerSettings = new XmlReaderSettings { ConformanceLevel = ConformanceLevel.Fragment }; using (var reader = XmlReader.Create(“C:\\myFile.txt”, readerSettings)) […]

使用serialport.open()时IOexception错误

最终更新这是我们固件的全部时间。 在某种程度上令人尴尬,但我很高兴我们可以继续前进,我可以把学习Java关闭一天。 我的答案如下。 更新所以我或多或少地放弃了这一点。 我认为这是一个归结为API的错误,但我没有时间,资源和技能组合来深入了解它。 我认为存在一些Windows只是中指的硬件。 我已经下载了Eclipse,切换到Java并将尝试查看是否有效。 如果没有,你会看到我回到这里。 但是,我绝对喜欢解决这个问题,所以如果有人有时间或倾向深入研究这个问题,我很乐意看到你提出的问题。 显然我会不时回来看看。 请确保你在评论中’@’我,所以我会收到通知。 原始邮政 我知道还有其他一些人在处理这个问题,但我希望有人可以帮助我。 我正在尝试连接到COM端口,但是当我尝试使用serialport.Open()命令时,我收到了IOexception: System.IO.IOException: The parameter is incorrect. at System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str) at System.IO.Ports.InternalResources.WinIOError() at System.IO.Ports.SerialStream.InitializeDCB(Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Boolean discardNull) at System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean […]

C#检查COM(串行)端口是否已打开

是否有一种简单的方法可以以编程方式检查串行COM端口是否已打开/正在使用? 通常我会用: try { // open port } catch (Exception ex) { // handle the exception } 但是,我想以编程方式检查,以便我可以尝试使用另一个COM端口或其他类似的端口。

使用.net 4.5中的Async API对串口通信代码进行示例?

有人能指出我使用.net 4.5异步API(异步,等待,任务,ReadAsync等)进行串行通信的工作示例吗? 我试图调整现有的事件驱动的串行样本,并得到各种可怕的行为 – “其他应用程序正在使用的端口”错误,VS2013调试器抛出exception和锁定 – 这通常需要PC重启才能从中恢复。 编辑 我从头开始编写自己的样本。 这是一个简单的Winforms项目,它写入Output窗口。 表单上的三个按钮 – 打开端口,关闭端口和读取数据。 ReadDataAsync方法调用SerialPort.BaseStream.ReadAsync。 截至目前,它将从端口读取数据,但我遇到了问题,使其变得强大。 例如,如果我拔下串行电缆,打开端口,然后单击Read Data两次,我将得到一个System.IO.IOException(我有点期待),但我的应用程序停止响应。 更糟糕的是,当我尝试停止我的程序时,VS2013会抛出一个“正在进行停止调试”对话框,该对话框永远不会完成,我甚至无法从任务管理器中杀死VS. 每次发生这种情况都必须重启我的电脑。 不好。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO.Ports; namespace WindowsFormsApplication1 { public partial class Form1 : Form { private SerialPort _serialPort; public Form1() […]

如何显示在serialport的DataReceived事件处理程序中读取的数据

我有以下代码,需要从端口读取数据,然后显示在文本框中。 我为此目的使用DataReceived事件处理程序,但不知道如何在文本框中显示此数据。 从各种来源我了解到Invoke方法应该用于此,但不知道如何使用它。 建议请… private void Form1_Load(object sender, EventArgs e) { //SerialPort mySerialPort = new SerialPort(“COM3”); mySerialPort.PortName = “COM3”; mySerialPort.BaudRate = 9600; mySerialPort.Parity = Parity.None; mySerialPort.StopBits = StopBits.One; mySerialPort.DataBits = 8; mySerialPort.Handshake = Handshake.None; mySerialPort.DataReceived += new SerialDataReceivedEventHandler(mySerialPort_DataReceived); mySerialPort.Open(); } private void mySerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { SerialPort sp = (SerialPort)sender; string s= sp.ReadExisting(); // […]

C#只读数据来源时的串口

我想读取我的串口,但只有在数据到来时(我不想轮询)。 我就是这样做的。 Schnittstelle = new SerialPort(“COM3”); Schnittstelle.BaudRate = 115200; Schnittstelle.DataBits = 8; Schnittstelle.StopBits = StopBits.Two; …. 然后我开始一个线程 beginn = new Thread(readCom); beginn.Start(); 在我的readCom我正在连续阅读(民意调查:() private void readCom() { try { while (Schnittstelle.IsOpen) { Dispatcher.BeginInvoke(new Action(() => { ComWindow.txtbCom.Text = ComWindow.txtbCom.Text + Environment.NewLine + Schnittstelle.ReadExisting(); ComWindow.txtbCom.ScrollToEnd(); })); beginn.Join(10); } } catch (ThreadAbortException) { } catch (Exception ex) […]

在返回值的函数上实现超时

我有一个函数,它在串行端口上调用读或写请求,然后返回读取的值。 我正在使用Commstudio express(我正在实现Commstudio中的一个类),但它的超时function似乎根本不起作用,所以我正在尝试实现自己的超时。 目前我有一个定时器,根据请求设置读取或写入端口,如果定时器关闭,回调将关闭连接导致exception。 我试图让计时器的回调抛出一个exception,但exception需要通过调用原始读/写函数的线程传播,所以这样,它可以工作,但我觉得它很混乱,那里必须是一个更好的方式来做我想要的。