c# - C# - 需要 SerialPort 编码帮助
问题描述
我的程序需要帮助,我想同时从多个微控制器读取代码并将它们翻译成纯文本。只有一个串行接口可以收集所有代码。代码的翻译工作,但我有代码读取不正确的问题。他一次又一次地在没有间隙和有间隙的地方停顿(500 微秒)。他并不总是能正确识别它们。
以下是部分代码:
public byte[] block = new byte[4096];
public int posBlock = 0;
public void Read(object sender, SerialDataReceivedEventArgs e)
{
console_.WriteLine("--------------------------------------------------");
console_.WriteLine("Void: Read(object sender, SerialDataReceivedEventArgs e)");
int offset = 0, count = serialPort.BytesToRead, i = 0;
byte[] rd = new byte[count];
serialPort.Read(rd, offset, count);
for (int buffer = 0; buffer < count; buffer++) { block[posBlock + buffer] = rd[buffer]; i = buffer; }
i++;
posBlock += i;
string rcpausgabe = null;
for (int i2 = 0; i2 < posBlock; i2++) { rcpausgabe += " " + (int)(block[i2]); }
//WriteProtocol(global_.variables.protocol_other, rcpausgabe, true);
console_.WriteLine("ReadCode: " + rcpausgabe);
if (IsDecode == false) { Zersetzten(); } else { console_.WriteLine("Add but not Zersetzen()"); }
IsDecode = false;
console_.WriteLine("--------------------------------------------------");
}
bool IsDecode = true;
public int ib = 0;
public string bs = null;
private void Zersetzten()
{
IsDecode = true;
console_.WriteLine("--------------------------------------------------");
console_.WriteLine("Void: Zersetzten()");
byte[] b = new byte[4096];
while (!(ib >= posBlock))
{
for (int i7 = 0; i7 < b[1] + 3; i7++)
{
string rcpausgabe1 = null;
b[i7] = block[ib];
ib++;;
if (i7+1 == (b[1] + 3))
{
Thread.Sleep(500);
console_.WriteLine("Decoding b");
for (int i2 = 0; i2 < b[1]+3; i2++) { rcpausgabe1 += " " + (int)(b[i2]); }
console_.WriteLine("Decoding Code: " + rcpausgabe1);
bs = rcpausgabe1;
Decoding(b);
}
}
}
IsDecode = false;
block = new byte[4096];
posBlock = 0;
ib = posBlock;
console_.WriteLine("--------------------------------------------------");
}
我已经编写了自己的控制台 (console_) 来帮助我解决这个问题,这让我可以实时跟踪所有进程。
我也提前感谢大家的回答。
(我用 Pons 翻译器翻译了这篇文章,因为我的英语不太好)
解决方案
我无法发表评论,所以我必须使用帖子来帮助您澄清您的问题。如果您可以提供更多详细信息,我将编辑我的答案。
让你的问题更清楚。
你期待什么结果,你观察到什么样的现象。
-
显然
Read(object sender, SerialDataReceivedEventArgs e)
没有在您的帖子中调用。虽然您的问题正在阅读“暂停”,但正在调用哪段代码
Read
可能是必不可少的。 什么是“暂停”,什么是“间隙”。
他在没有间隙和有间隙的地方一次又一次地停顿(500微秒。
我只能猜测您的程序会在出现间隙时“暂停”,但不知道“间隙”和“暂停”是什么。
做什么
for (int i7 = 0; i7 < b[1] + 3; i7++)
和for (int i2 = 0; i2 < b[1]+3; i2++)
想要做什么?您正在使用 b[1] 进行索引,并且在您接收数据时 b[1] 已更改。
编辑:添加如何创建一个最小的、可重现的示例。Edit2:指出 for 循环中一段奇怪的代码。
推荐阅读
- oracle - Maven OSB (12.2.1.3) 问题
- typescript - 环回 4 - ER_BAD_FIELD_ERROR
- amazon-ec2 - 如何使用 PHP 7.2.13 在 Amazon Linux 上安装 Imap
- perl - Perl 中的 $x -> {_foo} -> {_bar} 是什么意思?
- python-3.x - 需要在 Pandas 中绘制直方图,使得 x 轴是分类的,y 轴是某些列的总和
- java - 这是将列表添加到另一个列表的好方法吗,如果源列表中没有值,则填充默认值
- javascript - Angular 7数组更改值
- python - 如何检测键盘输入以使用 python 播放声音?
- react-native - 使用 appium 检查器/UI automator 无法找到仅用于启动屏幕可见性/文本框的本机应用程序的 id
- excel - Power BI - 将一列中的值分配给新计算列中的新值