Tag: serial port

如何解锁COM端口

我的应用程序必须在另一个应用程序之后工作。 第二个应用程序有一个错误,导致COM端口在特定情况下不能关闭。 我想在我的应用程序中以编程方式关闭所有COM端口,以确保报告的关闭端口没有错误。 如果我没有打开COM端口的对象,是否可能? 我需要一个关于.NET Framework,C#的解决方案。

如何使用C#应用程序重置Arduino Mega2560?

我注意到Arduino IDE会在启动/退出时由内置的串行应用程序自动重置 其中一条FT232RL硬件流控制线(DTR)通过100纳法电容连接到ATmega1280的复位线。 当该线被置位(取低)时,复位线下降足够长的时间以复位芯片。 我注意到我的串行C#应用程序不会发生这种行为。 我希望重置function适用于我的C#应用​​程序。 我没有做什么让我的C#应用​​程序重置我的Arduino Mega? Arduino和C#的工作代码: 通过将PWM Port12的电线连接到RESET端口,我在大约5分钟内完成了工作。 在Arduino上,我检查了传入的SerialEvent3上的文本RESET。 找到RESET时: pinMode(7, OUTPUT); digitalWrite(7, LOW); 至于C#,它很简单: if (serialPort1.IsOpen) { serialPort1.Write(“RESET”); } 重置似乎按预期工作。

SerialPort.Read(…)不尊重ReadTimeOut

在与支付终端通信的一些遗留代码中出现了错误。 在新付款开始之前,代码会尝试清除SerialPort的内部读取缓冲区。 我将代码调整到最低限度。 它使用.NET SerialPort类型。 设置读取超时50ms。 然后它读取512个字节并继续这样做,直到不再读取字节或抛出TimeoutException为止。 我们添加了一堆日志记录,它显示对第一个Read(…)方法的调用有时需要10到15分钟,即使超时为50ms。 然后抛出TimeoutException并继续应用程序。 但在Read(…)期间,应用程序挂起。 这并不总是发生,Windows 2000机器似乎更容易出于某种原因出现此错误。 public class Terminal { private SerialPort _serialPort = new SerialPort(); public void ClearReadBuffer() { try { _serialPort.ReadTimeout = 50; int length; do { var buffer = new byte[512]; length = _serialPort.Read(buffer, 0, 512); } while (length > 0); } catch (TimeoutException) {} } […]

ubuntu linux上的虚拟socat串口和c#

出于测试目的,我正在尝试编写一个连接到使用socat创建的虚拟串行端口的简单程序。 我用这个命令创建了串口: socat -d -d PTY,b9600 PTY,link=ttyVS1,b9600 得到这个输出: 2011/11/08 18:26:31 socat[32708] N PTY is /dev/pts/1 2011/11/08 18:26:31 socat[32708] N PTY is /dev/pts/2 2011/11/08 18:26:31 socat[32708] N starting data transfer loop with FDs [3,3] and [5,5] 当我尝试以这种方式连接时: System.IO.Ports.SerialPort _port; _port = new SerialPort(“/dev/pts/1”, 9600); _port.Open(); 我得到一个“文件名未知”的System.IO.IOException 。 我是否缺少设置DataBits,StopBits或其他参数? 我怎样才能发现socat建立的房产? 或者这段代码有什么问题?

是否可以使用C#检测DTMF音调

我试图从电话线检测来电显示信息。 收到的来电显示信息是DTMF音(不是FSK)。 如何检测此DTMF音? 电话和传真调制解调器能够吗? 电话和传真调制解调器能够检测FSK信息,但不能检测DTMF信息。 注意:我使用C#语言和.NET作为开发平台。

GSM调制解调器USSD校验天平获得CME错误100

我正在尝试使用华为E1550 3G调制解调器通过USSD检查SIM卡余额 但是,当我总是发送 AT+CUSD=1,”*100#”,15 我明白了 +CME Error: 100 是的,我的调制解调器支持USSD,因为我有调制解调器的仪表板应用程序,我可以检查余额,并为SIM卡充电。 我在C#中使用GSMComm库我也在putty termainl中尝试了它但是仍然遇到同样的错误 我搜索了错误100,发现它是“未知错误”没有真正帮助:) 在发送之前我也尝试将文本模式更改为pdu模式,但没有任何改变 AT+CMGF=0 注意:我也试过了 AT+CUSD=1,”*100#” 同样的错误 和…的反应 AT+CUSD=? 是 (0-2) UPDATE 我已经将请求“* 100#”转换为7bit“2A31303023”,就像这样 AT+CUSD=1,”2A31303023″ ,15 响应 +CUSD: 2 我相信问题即将得到解决,但回应意味着什么?

在C#中访问COM10或更高端口

我正在使用Visual Studio 2010并使用C#(.NET 3.5)进行编程。 我想从COM10写入/读取数据。 这是简单的代码: static void Main(string[] args) { String Portname = String.Empty; /* List out all COM ports present on the computer. */ foreach (string ports in SerialPort.GetPortNames()) { Console.WriteLine(ports); /* If COM10 exists, copy the name for further use. */ if (ports == “COM10”) { Portname = ports; //I also tried […]

C#串口检查设备是否已连接

我最近一直在使用SerialPort类。 目前我正在试图找出检查设备是否连接到我的应用程序使用的comm端口的正确方法。 有没有正确的方法来检查设备是否连接到通信端口? 我目前的方法如下: while (isReading == true) { try { received += serialPort.ReadExisting(); if (received.Contains(‘>’)) isReading = false; } catch (Exception e) { } if (tick == 10000) if (received == “”) { Console.WriteLine(“No Data Received. Device isn’t connected.”); isReading = false; } tick++; } Console.WriteLine(received); 它有效,但我觉得它有点hacky和不可靠。 如果需要,我可以保留它,但如果有适当的替代方法,我会喜欢它。 编辑:我实际上必须将刻度值设置为大约10,000,以确保它是可靠的。 否则我有时无法收到数据。 即使将其设置为1000或5000也是不可靠的。 即使这样,也不能保证在多台机器上可靠。

长电缆超时时串行通信超时

我有一个应用程序通过rs232读取不同的硬件。 它已经过测试,并且运行良好。 对于最终的应用,我需要引入一些hunder m长电缆,这意味着我有rs485转换器。 当我运行我的应用程序来读取硬件时,我收到System.IO.Ports.SerialStream.Read的超时错误。 我已将超时增加到20秒,不幸的是它没有解决问题 我尝试了不同的应用程序来读取硬件,即使读取频率为1秒,它们也能正常工作。 通信正在使用modbus协议,我认为这是当前阶段无关紧要,因为我没有到达接收任何东西的阶段。 我的代码看起来像这样:首先是串口打开和初始化: //get the right modbus data structure element ModBus MB = (ModBus)s[0].sensorData; //set up the serial port regarding the data structure’s data SerialPort sp = new SerialPort(); sp.PortName = MB.portName; sp.BaudRate = Convert.ToInt32(MB.baudRate); sp.DataBits = MB.dataBits; sp.Parity = MB.parity; sp.StopBits = MB.stopBits; //Set time outs 20 sec […]

使用COM端口在外部设备上切换

是否可以使用串口控制信号打开/关闭外部继电器? 我知道使用UART是可能的。 但在这里,我需要在不使用微控制器的情况下做到这一点。 有更好的人可以在C#中提供示例代码 谢谢。 //Here is my code serialPort1.BaudRate = 9600; serialPort1.PortName = “COM3”; serialPort1.Open(); serialPort1.DtrEnable = true; //High (On) Thread.Sleep(1000); //Delay a Second serialPort1.DtrEnable = false; //Low (Off) serialPort1.Close();