C# 串行端口-RS485 如何在一个部分中接收所有数据
我有一个通过RS485通信的设备,我需要在C#中进行回环,以接收我的数据并将其发送回.首先,字节包含有关即将到来数据的长度的信息.有时,会发生C#在几个部分中开火.我需要我只收到它们的一部分,我可以一次回寄回去. var buffer = new byte[1000]; port = new SerialPort(ConfigParams.PORT, 115200, Parity.None, 8, StopBits.One); port.Handshake = Handshake.None; port.RtsEnable = true; port.DtrEnable = true; port.DataReceived += (sender, e) => { var length = port.ReadByte(); Thread.Sleep(10); var by
2 2024-04-26
编程技术问答社区
如何用具有多个传感器的SerialPort的数据绘制图表
我需要绘制来自pH,温度和湿度的传感器的数据,数据以矩阵从arduino发送到PC通过串行端口发送. 我可以在文本框中显示数据,但是当我尝试绘制数据时,它不起作用(我不知道该怎么做). 我只能在不是矩阵时绘制数据,而它的数据仅来自一个传感器. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading.Tasks; using System.IO.Ports; using System.Windows.Forms.DataVisualization.Charting; namespace grafik1 { pu
8 2024-04-26
编程技术问答社区
MSVS C# 串行端口接收的数据丢失
我正在尝试使用C#在MSV上创建一个串行通信工具.它与Photon MCU和蓝牙加密狗通信. 按下"启动"按钮时,UI将" 1"发送到首先发送当前时间戳并开始从函数生成器流式传输数据的光子.按下"停止"按钮时,它首先发送10" 2" s(由于光子末端的计时器发行)时,它会在光子接收时,它停止传输函数生成器的数据.然后它睡了一秒钟,并发送了" 3",它会发送另一个当前时间戳.然后,UI将数据放在inbuffer中,并停止读取数据. connectBT与开始按钮连接,disconnectBT与停止按钮连接. 这是我现在拥有的代码: SerialPort serial = new SerialPort(); string recieved_data; int startBuffer = 0; private void connectBT(object sender, RoutedEventArgs e) { startBuffer++; // keep tra
10 2024-04-26
编程技术问答社区
串行端口和ObjectDisposedException安全手柄已被关闭
我正在从一个通过串行端口发送信息的设备中接收数据,我得到了此例外:" ObjectDisposedException安全句柄已关闭".它可能会在几秒钟到几分钟之内发生,并且似乎没有模式.发生的另一件事是,它将停止接收数据,而我可以在"线程已退出的VS IDE输出窗口"选项卡中看到.我不知道为什么还这样做. 这是我创建串行端口的方式: DeviceSerialPort serialport = new DeviceSerialPort("COM1", 9600, System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One); serialport.RHDataReceived += new EventHandler(SerialPort_RHDataReceived); serialport.Open(); 这是串行端口代码: namespace Instrumen
2 2024-04-26
编程技术问答社区
最快的方法是检查COM端口
我需要在我的应用程序中检查可用的com端口: 我创建了两种方法. 方法1: public List GetAllPortsForeach() { var allPorts = new List(); foreach (String portName in System.IO.Ports.SerialPort.GetPortNames()) { allPorts.Add(portName); } return allPorts; } 方法2: public List GetAllPortsForLoop() { var allPorts = new List(); for (int i = 1; i
6 2024-04-26
编程技术问答社区
在两个不同表格上使用同一个序列端口
我有两种形式= form1.cs和sms.cs 在第一个形式(form1)上,我已经配置并准备工作serialport1.我有称为发送消息的按钮.此按钮打开名为SMS.CS的新表格. private void SMS_Click(object sender, EventArgs e) { SMS settings = new SMS(); settings.ShowDialog(); } 我想将我的配置serialport1纳入表单:form1和form smsecs.也可以从表单SMS数据接收,并在Form1上使用SerialPort1发送它: private void SMS_Click(object sender, EventArgs e) { SMS settings = new SMS(); settings.ShowDialog(); SerialPort
0 2024-04-26
编程技术问答社区
C#如何以编程方式检测串口
我想检测/配置串行端口(COM端口)自动连接我的设备.可以在C#? 中这样做 解决方案 您究竟想做什么?您是否查看了system.io.ports类中的属性和方法? MSDN文章之后可能会有所帮助. 在/sdn.microsoft.com/en-us/library/system.io.ports.serialport(V=VS.110).aspx
0 2024-04-26
编程技术问答社区
串行端口数据的精确时间戳
我正在研究一个项目,该项目需要我从连接到编码器的串行端口(US Digital S5光学轴编码器)读取的每个数据条目的精确时间(MS). 我将编码器安装在一个小推车上,我用它来计算购物车的速度. 这是我到目前为止所做的: 连接到序列端口,并将命令写入QSB,以告诉编码器以流数据.命令可在此处提供: www.usdigital.com/assets/general/qsb%20commands%20list_1.pdf www.usdigital.com/assets/general/qsb%20applications%20Examples.pdf 使用readline()读取收到的数据. 将所有数据行放入一个字符串构成器并将其输出到文件中. 当我将输出值阈值和间隔速率设置为尽可能快时,我可以在1MS之间获得数据输入. 这是我得到的: ----time stamp(h/m/s/ms)-------value 带有正确时间戳的数据: pv
0 2024-04-26
编程技术问答社区
如何在winform C#中获得蓝牙设备Com串口?
如何获得我在Windows表单C#应用程序中配对的蓝牙设备的端口详细信息? 手动我可以获取所有端口名称,但我需要分配给特定蓝牙设备的COM端口名称. 解决方案 > win32_pnpentity是插头和播放设备 msdn 您也可以在驱动程序上找到您的设备 // The WMI query const string QueryString = "SELECT * FROM Win32_PnPSignedDriver "; SelectQuery WMIquery = new SelectQuery(QueryString); ManagementObjectSearcher WMIqueryResults = new ManagementObjectSearcher(WMIquery); // Make sure results were
10 2024-04-26
编程技术问答社区
NodeJS和Serialport - 读取RFID卡
我想阅读带有nodejs的RFID卡.我有一个与计算机通过USB连接的基本RFID阅读器(真的不知道模型). 我尝试使用以下代码读取使用NPM软件包" serialport"的序列数据: var SerialPort = require('serialport'); var Readline = require('@serialport/parser-readline'); var port = new SerialPort('/dev/cu.usbserial-0001', { baudRate: 9600, parser: new Readline() }); port.on('data', (data) => { var serialData = data.toString('hex'); console.log(data); }); 我启动程序,当我将卡悬停在读者上时,我会得到这样的东西(只要我在读取器上有卡,它就会很快变化): 0 181
10 2024-04-26
编程技术问答社区
如何使用C#中的SerialPort进行CPU友好型传输和接收泵
我正在建造自己的空中客车A320家居驾驶舱(请参阅我的问题是,对于我连接的每个模块,我的CPU利用率增加了. 25%.我有一个朋友也使用我的软件,他连接了许多模块,将CPU利用率夹提高到100%.他说他遭受了绩效损失. 之前,我在这个论坛上提出了一个与同一主题有关的问题:" 使用serialport运行多个任务的CPU使用%将%提高到100% - thread.sleep()是解决方案的好方法?" 在那里,某人(@jdweng)评论: 切勿使用Windows上串行端口的同步方法.最好修改代码并使用异步方法. 我做到了这一点,并在我的帖子中将其添加为10日1023日的帖子.但是根本没有区别.但这使我意识到这个问题可能与SerialPort本身无关,而是我构建RxPump和TxPump的方式.让我解释一下. 在某些初始化方法中,我使用以下代码创建rxpump和txpump.这是针对我连接的每个硬件模块完成的 - 换句话说,对于每个模块,我都有一个txpump和r
0 2024-04-26
编程技术问答社区
如何将用Pascal编写的RS232C接口通信解释为C#语言
我有一个示例Pascal程序,在硬币计数器S350/360机器的技术手册中提供,可以使用RS232C电缆在计算机和计算机之间进行通信.我想出了以下等效的C#代码,出于某种原因,只有仅需要将数据写入串行端口的过程才能成功执行和工作.我只能将数据写入端口,但不能从中读取任何数据.我使用串行嗅探器对此进行了检查,事实证明,它仅使用C#程序写在端口上的嗅探数据,但无法读回任何数据.你们能帮我解决这里发生的事情吗? 首先是样本程序的原始Pascal代码. uses crt; const { COM1: RS232 port address } RXTX = $3F8; { $2F8 if COM2: is used } ACK = 6; NAK = 21; ESC = 27; var dummy, checkSum : integer; key : char; protocol : integer; procedure InitComm; { Set baudrate to 96
4 2024-04-25
编程技术问答社区
如何合并两个相似但独立的程序的C#代码?
好的,所以我有两个程序.末端代码 一个是一个Gmail通知器,它输出串行的未读邮件数量:等. 然后,我有一个程序(PC)的程序(PC),然后将它们输出到串行中,也喜欢: et 他们都以不同的时间间隔输出相同的数据和相同的格式()(每次都有不同的值).因此,邮件ONE每5分钟检查一次邮件,然后输出邮件数量.但是温度程序在1秒钟以序列速率以多数的序列速率输出数据. ive一直试图将两个程序组合到一个程序中,以使其输出之类的输出:,它每秒都会发送该程序,以便temps更新.因此,最后三组DIGTS每秒都会更改一次,但是第一个不会每5分钟更改,但仍在输出中包括02,因为它(输出)每次都需要相同的长度/组织等. 那么你们怎么看?什么是最好的方法? ive试图添加除static void Main以外的所有gmail代码(Gmail程序中的所有主要功能都是呼叫邮件并将数据写入序列程序),然后拨打
2 2024-04-25
编程技术问答社区
在C#中读取Modbus串行端口数据
嗨,我正在尝试读取串行端口数据.我使用nmodbus库进行modbus通信.代码可用于读写目的.但是有时候我有一些未知的错误,我想看看串行端口活动.我尝试使用SerialDataReceivedEventHandler,但我没有从端口中获得任何东西,但我仍然能够阅读保存寄存器的价值.这是我的代码.我只想看到通过串行端口发送/接收的数据包. namespace ModbusMaster { public partial class Form1 : Form { public Form1() { InitializeComponent(); this.Load += Form1_Load; } void Form1_Load(object sender, EventArgs e) { int[] baud = n
8 2024-04-25
编程技术问答社区
串行口DataReceived发射量过大
我正在处理呼叫者ID串行设备并编写以下程序: serialPort = new SerialPort("COM7", 19200, Parity.None, 8, StopBits.One); serialPort.DataReceived += serialPort_DataReceived; serialPort.RtsEnable = true; serialPort.Encoding = Encoding.ASCII; serialPort.Open(); void serialPort_DataReceived(object s, SerialDataReceivedEventArgs e) { byte[] data = new byte[serialPort.BytesToRead]; serialPort.Read(data, 0, data.Length); Console.WriteLine(Encoding.ASCII.GetStri
4 2024-04-25
编程技术问答社区
用于字符写入和读取的 UWP 串行端口通信(UWP 和 Arduino)
我正在使用此代码,但不起作用并抛出此例外:对象引用未设置为对象的实例 设备[0]给我无效的值. private async void ConnectToSerialPort() { string selector = SerialDevice.GetDeviceSelector("COM7"); DeviceInformationCollection devices = await DeviceInformation.FindAllAsync(selector); if (devices.Count > 0) { DeviceInformation deviceInfo = devices[0]; SerialDevice serialDevice = await SerialDevice.FromIdAsync(deviceInfo.Id);
4 2024-04-25
编程技术问答社区
在C#中从串口读写,第二部分
我试图用C#替换C程序. C程序通过COM1串行端口连接到较旧的计算机.我没有关于C代码如何连接到另一台计算机的任何形式的信息,但是它确实正确连接,因此我必须猜测它的操作方式.我一直在使用 portmon 正在成功写作和阅读.当我的新C#应用程序运行时,我也一直在运行Portmon.在我的C#程序中,我使用SerialPort类. 我试图通过在工作程序中使用Portmon的输出来确定SerialPort类中的不同项目应具有的值.我的想法是,如果我可以正确地获得班级的值,它将编写和阅读正确.该程序(下)无法正常工作.该程序成功打开了COM1端口,但是当它试图编写一个期间(然后是另一个时期)时,它会失败.这些给出了超时. 查看旧C程序后面运行的Portmon的输出,工作程序打开了COM1端口,然后写了一个周期,然后在读取COM1端口的成功值(&OK)之前写了一个时期.旧程序设置了我想在C#程序中复制的几个值. 我尝试了以下串行port选项的多种组合,但我显然没有击中任何东西
0 2024-04-25
编程技术问答社区
使用SerialPort WriteLine命令的C#错误
我正在使用C#Serialport类来写入我的COM端口.奇怪的是,我可以从端口获取数据,这是我期望的数据.但是,我无法将任何数据发送到端口.我发送的任何数据都会立即回响,因为来自端口的新数据.我期望有一个"完成"命令,但它使我可以回到刚刚发送的数据.从Windows Hyperterminal中可以正常工作,但此代码无法正常工作. 我使用的是没有流控制的9600,8-n-1. 我主要使用本文中的代码: 我用这个 实例化端口 comPort.BaudRate = int.Parse(_baudRate); //BaudRate comPort.DataBits = int.Parse(_dataBits); //DataBits comPort.StopBits = (StopBits)Enum.Parse(typeof(StopBits), _stopBits); //StopBits comPort.Parity = (Parity)Enum.
0 2024-04-25
编程技术问答社区
如何从OpenNETCF.IO.Ports.SerialPort读取一个字符串?
i使用opennetcf.io.ports.serialport将命令写入皮带打印机: public static bool SendCommandToPrinter(string cmd) { bool success; // init'd to false by default try { SerialPort serialPort = new SerialPort(); serialPort.BaudRate = 19200; serialPort.Handshake = Handshake.XOnXOff; serialPort.Open(); serialPort.Write(cmd); serialPort.Close(); success = true; } catch // may not need a try/ca
2 2024-04-25
编程技术问答社区