gpt4 book ai didi

vb6 - RS 232 中断信号

转载 作者:行者123 更新时间:2023-12-04 13:18:10 25 4
gpt4 key购买 nike

我有一个 RS232 信号捕获设备。它工作得很好。

我需要一些帮助来理解数据。基本上我们买它是因为我们正在处理使用串行通信的 80 年代后期机器 Controller 。尽管知道端口参数,但我们运气不佳。

从我转储的数据来看,机器控制正在使用中断信号作为其协议(protocol)的一部分。我无法使用 VB 和 MSComm 复制它。我知道切换中断信号并打开和关闭。但我不确定我应该用它做什么。我应该为我发送的每个数据字节保留它。或者发送一个字节的数据,然后切换。

我也很困惑我应该如何从 Controller 接收任何数据。我是否在打开中断时切换标志,然后在关闭时读取输入?

最佳答案

Michael Burr 对 break 工作方式的描述是准确的。通常,“中断”信号的发送时间明显长于一个字符时间。

如今,“Break”在串行通信中很少使用,但最常见的用途是作为提供数据包同步的“廉价”方式。 “中断”可以在数据包开始之前发送,以提醒接收器有新数据包在路上(并允许它重置缓冲区等)或在数据包结束时发出信号,表示不再需要数据.它是一种“元字符”,因为它允许您保留数据包内容的全部 8 位或 7 位值,而不必担心如何描述数据包的开始或结束。

要发送休息时间,通常您调用 SetCommBreak ,等待适当的时间(例如,在 9600 波特下大约 2 毫秒)然后调用 ClearCommBreak .当然,在此期间,您不能发送任何其他内容。

因此,假设协议(protocol)在数据包的开头需要“中断”,我会这样做(抱歉伪代码):-

procedure SendPacket(CommPort port, Packet packet)
{
SetCommBreak(port)
Sleep(2); // 2 milliseconds - assuming 9600 baud. Pro-rata for others
ClearCommBreak(port)

foreach(char in packet)
SendChar(port, char)
}

接收器的伪代码更加困难,因为您必须对传入的数据包格式和用于接收中断的 API 调用做出大量假设。这次我将用 C 语言编写,并假设存在一个虚函数。 WaitCommEvent可能是处理传入中断的关键。
bool ReadCharOrBreak(char *ch); // return TRUE if break, FALSE if ch contains received char

我们还将假设固定长度的 100 字节数据包在每个数据包之前发送“中断”。
void ReadAndProcessPackets()
{
char buff[100];
int count;

count = 0;

while (true)
{
char ch;
if (ReadcharOrBreak(ch))
count = 0; // start of packet - reset count
else
{
if (count < 100)
{
buff[count++] = ch;
if (count == 100)
ProcessPacket(buff);
}
else
Error("too many bytes rx'd without break")
}
}

警告 - 完全未经测试,但应该给你的想法......

有关使用 Break 的协议(protocol)示例,请查看 DMX-512 stage lighting protocol .

The start of a packet is signified by a Break followed by a "mark" (a logical one) known as the "Mark After Break" (MAB). The break signals end of one packet and the start of the next. It causes the receivers to start reception. After the break up to 513 slots are sent.

关于vb6 - RS 232 中断信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1279478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com