Tag: serial port

RS232问题 – 如何读取PC的重量

我有一个通过RS232连接到PC的秤,我发送“W”来接收重量。 秤在读取时始终发送重量。 我如何抓住正在阅读的体重? 我可以获得任何C#示例代码吗?

SerialPort数据丢失 – C#

我正在开发一个SerialPort应用程序,其中一个非常简单的部分就是给我一些问题。 我只是想从端口读取一个恒定的数据流,并在它进入时将其写入二进制文件。问题似乎是速度:我的代码在我的9600波特率测试设备上工作正常,但是当转移到115200bps的直播设备,我似乎正在丢失数据。 发生的事情是在一段可变的时间之后,我错过了1个字节,它抛弃了其余的数据。 我尝试了一些事情: private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { bwLogger.Write((byte)serialPort1.ReadByte()); } 要么 private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { byte[] inc = new byte[serialPort1.BytesToRead]; serialPort1.Read(inc, 0, inc.Length); bwLogger.Write(inc); } 还有一些变化。 我不能使用ReadLine(),因为我正在使用恒定的数据流(对吧?)。 我试过摆弄缓冲区大小(serialPort1.ReadBufferSize和硬件FIFO缓冲区)。 理想情况下,出于可用性目的,我将在软件方面处理此问题,而不是让用户必须更改Windows驱动程序设置。 有任何想法吗?

如何关闭另一个程序使用的serialport

我正在写一个SerialPort程序。 有时,当我想打开SerialPort时,会抛出UnauthorizedAccessException:拒绝访问COM1。 这是因为另一个程序(由其他人编写而我没有其源代码)正在使用COM1,并且该程序在退出时不会关闭它。 我想问两个问题: 当另一个程序使用COM1时,如何用我的代码(特别是C#代码)关闭它? 如果我无法用C#代码关闭COM1,如何在Windows操作系统中关闭或释放COM1? 谢谢。

C#串口问题 – 太简单失败了,但是

好吧,这应该很简单。 我正在尝试从串行设备读取字符。 这样,如果我发送一个空格字符,它会回显一串数字和EOL。 而已。 我正在使用Unity 3.3(.Net 2.0支持),而’串行端口’是一个Prolific串口转USB适配器。 顺便说一句:使用Hyperterminal,一切都很完美,所以我知道它不是驱动程序,也不是硬件。 我可以打开端口了。 看来我可以用port.Write(“”)发送我的空间; 但是,如果我甚至尝试调用ReadChar,ReadByte或ReadLine(如轮询),它会冻结,直到我拔掉USB,我的控制台输出什么也没显示(exception被捕获)。 所以我设置了一个DataReceviedHandler,但它永远不会被调用。 我读过一些人们用Arduinos等做过这类事情的post(这不是Arduino而是嘿),只使用ReadLine。 他们的代码对我不起作用(到目前为止,这些作者都没有答案)。 那么,有什么提示吗? 我需要使用不同的线程吗? 如果您知道任何Unity(Mono)编码,那么这些行的任何提示都会受到高度赞赏。 此代码来自http://plikker.com/?p=163和http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived.aspx#Y537的mashup using UnityEngine; using System.Collections; using System.IO.Ports; using System; public class SerialTest : MonoBehaviour { SerialPort stream; void Start () { try { stream = new SerialPort(“COM3”, 9600); stream.Parity = Parity.None; stream.StopBits = StopBits.One; stream.DataBits = 8; stream.Handshake […]

为什么在SerialPort.Open和Close之前使用Thread.Sleep()?

我注意到我在SerialPort关闭和打开时读取的示例代码,人们会在SerialPort.Open()和Close()之前添加Thread.Sleep(1000)。 如下: Thread.Sleep(1000); serialPort1.Open(); /* some code */ Thread.Sleep(1000); serialPort1.Close(); 我在任何地方都找不到任何解释。 为什么人们在打开或关闭之前使用Thread.Sleep来阻塞串口? 它是出于某种计时目的吗? 我是否应该在读取或写入串行端口时放置Thread.Sleep?

关闭.NET SerialPort后的ObjectDisposedExecption

我使用.NET 4 SerialPort对象与连接到COM1的设备进行通信。 当我完成设备后,我在SerialPort上调用Close。 我没有调用Dispose,但我相信Close和Dispose在这里是同义词。 通常这很好用。 但是,有时我会在一段时间后得到以下exception(我看过的时间范围从5毫秒到175毫秒): System.ObjectDisposedException:已关闭安全句柄 在System.Runtime.InteropServices.SafeHandle.DangerousAddRef(布尔和成功) 在System.StubHelpers.StubHelpers.SafeHandleAddRef(SafeHandle pHandle,布尔和成功) 在Microsoft.Win32.UnsafeNativeMethods.GetOverlappedResult(SafeFileHandle hFile,NativeOverlapped * lpOverlapped,Int32&lpNumberOfBytesTransferred,Boolean bWait) 在System.IO.Ports.SerialStream.EventLoopRunner.WaitForCommEvent() 在System.Threading.ThreadHelper.ThreadStart_Context(对象状态) 在System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback回调,对象状态,布尔ignoreSyncCtx) 在System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback回调,对象状态) 在System.Threading.ThreadHelper.ThreadStart() 我的代码都没有在这个堆栈上。 我找到了http://blog.zachsaw.com/2010/07/serialport-ioexception-workaround-in-c.html ,但那里的解决方案没有用。 在进一步检查时,问题是IOException ,而不是ObjectDisposedException 。 关于拔掉USB到串口设备但是COM1在机上时观察到的问题,有很多post,所以它并没有意外消失。 这里的问题也不是我的问题; SerialPort在其使用期间保持活动状态,并且仅在我与设备通话时才关闭。 (一旦我完成,设备处于不会传输任何其他数据的状态。) SLaks 建议在SafeHandle.Dispose的入口处设置一个断点,以确定我何时处理我不应该的东西,但是我会破坏该断点数十次。 当我使用串行设备时,我单次调用SerialPort.Close调用了三次,其余大约一半都在GC线程中。 其余部分似乎与WPF UI元素相关。 我现在不知所措。 我从哪里去? 有没有办法确定哪个SafeHandle属于哪个对象,所以我可以肯定我没有意外地处理它? 除了Close之外还有一些咒语我需要正确关闭SerialPort吗?

C#控制台应用程序通过蓝牙与Arduino交谈

除了这个不起作用之外,在这里说的不多,我不知道为什么。 Arduino上的串行输出什么都没有。 C#代码的输出结果是等待响应然后什么都没有。 当我启动C#程序时,Arduino上的蓝牙卡LED变为绿色,因此正在建立连接。 别无其他。 Arduino代码 #include //Software Serial Port #define RxD 8 // This is the pin that the Bluetooth (BT_TX) will transmit to the Arduino (RxD) #define TxD 7 // This is the pin that the Bluetooth (BT_RX) will receive from the Arduino (TxD) SoftwareSerial blueToothSerial(RxD,TxD); boolean light = false; void setup(){ Serial.begin(9600); […]

串行端口读取C#控制台

大家好,我是新来的,我听过很多关于这个网站的消息,它真的很有帮助。 希望你能帮助我! 我有一个非常简单的程序,其唯一目的是从串口读取并在C#的控制台窗口上打印2000次。 我只是在微控制器上转动一个可变电阻器 以下是代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO.Ports; namespace Testing_serial_v3._0 { class Program { static void Main(string[] args) { string buff; SerialPort port = new SerialPort(“COM4”, 9600, Parity.None, 8, StopBits.One); port.Open(); for (int i = 0; i < 2000; i++) { buff = port.ReadLine(); Console.WriteLine(buff); //Console.ReadLine(); } } […]

如何在C#中扫描COM端口?

C#是否提供了扫描可用COM端口的有效方法? 我想在我的应用程序中有一个下拉列表,其中用户可以选择一个检测到的COM端口。 创建和填充下拉列表不是问题。 我只需要知道如何使用C#扫描可用的COM端口。 我使用的是Microsoft Visual C#2008 Express Edition。 谢谢。

COM端口被拒绝

嗨我正在尝试使用COM端口使用modbus协议读取一些寄存器,一切正常,直到我重新启动modbus从设备,然后我有错误,com被拒绝,我可以做的是或重新启动计算机或插入并返回’ usb到com转换器’。 似乎此设备无法正确处理com端口。 using (port = new SerialPort(comPort)) { ushort[] registers = null; try { port.BaudRate = boudRate; port.DataBits = 8; port.Parity = Parity.None; port.StopBits = StopBits.One; port.Open(); // modbus reading registers port.Close(); return registers; } catch (Exception e) { Logs.AddToLog(e.Message); return registers; } }