Сигнал прерывания RS 232

onClick в <div> ожидает функцию, которую вы даете в # 1 (так называемая функция стрелки).

На # 2 вы даете результат выполнения this.props.onClick(this.state.id), который является недействительным.

6
задан GEOCHET 9 April 2019 в 23:57
поделиться

6 ответов

Описание Майклом Берром того, как работает перерыв, является точным. Часто сигналы «прерывание» отправляются значительно дольше, чем время одного символа.

В наши дни «прерывание» нечасто используется в последовательной связи, но чаще всего используется как «дешевый» способ обеспечения синхронизации пакетов. "Break" может быть отправлен до начала пакета, чтобы предупредить получателя о том, что новый пакет находится в пути (и позволить ему сбросить буферы и т. Д.), Или в конце пакета, чтобы сигнализировать, что больше данных не ожидается. . Это своего рода «метасимвол» в том смысле, что он позволяет вам сохранять полный диапазон 8- или 7-битных значений для содержимого пакета и не беспокоиться о том, как разграничиваются начало или конец пакета.

Отправить паузу обычно вы вызываете SetCommBreak , подождите соответствующий период (скажем, около 2 миллисекунд при 9600 бод), затем вызовите ClearCommBreak . Конечно, в это время вы больше ничего не отправляете.

Итак, предполагая, что протокол требует «перерыва» в начале пакета, я бы сделал это (извините за псевдокод): -

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-байтовые пакеты фиксированной длины с отправкой «break» перед каждым пакетом.

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, Перерыв, за которым следует "отметка" ( логический), известный как "Отметить после Перерыв »(МАБ). Перерыв сигнализирует об окончании один пакет и начало следующего. Это заставляет приемники запускаться прием. После разрыва до 513 слоты отправляются.

9
ответ дан 8 December 2019 в 13:48
поделиться

Отправка повреждения может быть достигнута:

  • понижение скорости передачи
  • отправка 0x00, который будет казаться как повреждение.
  • возвращают скорость передачи.

Во время повреждения, не будет возможно получить данные, так как скорость передачи не корректна.

я использовал это для коммуникации Linbus, которая имеет 1 ведущее устройство, отправляющее повреждение затем 0x55 как синхронизация.

1
ответ дан 8 December 2019 в 13:48
поделиться

Сигнал прерывания - недопустимый символ. Когда линия RS-232 неактивна, напряжение находится в состоянии «метка» (или «1») (что составляет -12 вольт, если я правильно помню). При отправке символа протокол переводит строку в состояние «пробел» (или «0») на один бит (начальный бит), затем переключает сигнал в зависимости от данных (биты данных) и любых битов четности. . Затем он удерживает линию в состоянии ожидания / отметки (или 1) для количества битов, определяемых стоповыми битами, которые обычно настраиваются (обычно 1 стоповый бит, по моему опыту).

Поскольку всегда есть некоторый период время, когда линия будет находиться в состоянии отметки между символами данных, начало символа всегда можно распознать. Это также означает, что наибольший период времени, в течение которого линия может находиться в состоянии пробела, составляет:

1 start bit + however many data bits + a parity bit (if any)

Сигнал разрыва определяется как удержание строки в состоянии пробела дольше этого периода времени - ни один действительный байт данных не может этого сделать, поэтому «символ» разрыва на самом деле не является символом. Это особый сигнал.

Насколько вам нужно подать сигнал прерывания, полностью зависит от используемого протокола.

6
ответ дан 8 December 2019 в 13:48
поделиться

«Разрыв» был предназначен для случаев, когда синхронизация строк полностью запуталась.

Я должен оставить его включенным для каждого байта отправляемых данных. Или отправьте байт данных, а затем переключитесь.

Попробуйте отправить хороший длинный сигнал «пауза» (500 мс?), Затем подождите немного (50 мс?), А затем отправьте свои данные.

1
ответ дан 8 December 2019 в 13:48
поделиться

Я решил добавить parent_id столбец в базе данных и вместо того, чтобы присоединиться к ответам слева, я просто выделил все комментарии сразу, чтобы позже отсортировать комментарии и ответы с серверным кодом, вот запрос:

SELECT c.*, u.username, u.photo
FROM (comments c)
JOIN users u ON c.user_id = u.id
WHERE c.topic_id = 9
ORDER BY c.id ASC

Теперь я передаю результат запроса в функцию ниже так что каждый ответ будет добавлен как массив внутри массива комментариев, давно прошедшее (на самом деле 1980-е годы) дней как программист связи. Обычно вы отправляете паузу, удерживая все биты на низком уровне или высокий (в зависимости от вашего оборудования связи). Чтобы вызвать перерыв либо повторно отправить значение 0x00 в течение примерно полсекунды, либо значение 0xFF.

0
ответ дан 8 December 2019 в 13:48
поделиться

Вы должны увидеть данные, которые отправляет порт. Вам понадобится нуль-модемный кабель, компьютер с последовательным портом (или USB-ключ последовательного порта) и терминальная программа (как HyperTerminal в Windows - не входит в Vista). Если вы правильно сконфигурируете свою программу терминала (правильная скорость, количество битов данных, правильная настройка start-stop и правильный порт), все данные будут отображаться на экране. Иногда требуется нажать клавишу ввода, чтобы начать просмотр данных. Вы можете переключить настройку терминальной программы во время теста, чтобы увидеть, не изменится ли что-нибудь ("шум" в данных).

0
ответ дан 8 December 2019 в 13:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: