eXeLab
eXeL@B DVD 2017 !

Видеокурс программиста и крэкера 5D 2O17
(актуальность: декабрь 2O17)
Свежие инструменты, новые видеоуроки!

  • 400+ видеоуроков
  • 800 инструментов
  • 100+ свежих книг и статей

УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: Boostyq, alexcoder1, bartolomeo, Vicshann, 3ton, shura_k (+4 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Основной форум —› Помогите найти команду от контроллера к ПО по COM порту.
Посл.ответ Сообщение
Vovka001

Ранг: 2.0 (гость)
Статус: Участник

Создано: 1 октября 2017 02:06 New!
· Личное сообщение · #1

Ребята нужна помощь. Был самодельный контроллер турникета который сожгли, я сделал новый. Пакеты которые передает программа в контроллер на закрытие и открытие турникета я перехватил, встала проблема найти команду которую контроллер должен передавать в программу на подтверждения прохода. Вся передача осуществляется по COM порту. Команда на открытие выглядит так: 49 49 49 49 49 49 49 49 13 10
Команда на закрытие: 50 13 10
Это в десятичной системе счисления.
Помогите пожалуйста найти команду на подтверждения прохода.


{ Атач доступен только для участников форума } - Tourniquet.exe
LinXP

Ранг: 66.0 (постоянный)
Статус: Участник

Создано: 1 октября 2017 02:37 New!
· Личное сообщение · #2

Code:
  1. private void ReadTicketData(object s, EventArgs e)
  2. {
  3.     string str = this.ReaderSerialPort.ReadLine();
  4.     if (str.Length == 13)
  5.     {
  6.         char ch = str[1];
  7.         ch = str[2];
  8.         int index = (int.Parse(ch.ToString()) * 10) + int.Parse(ch.ToString());
  9.         ch = str[3];
  10.         ch = str[4];
  11.         int num2 = (int.Parse(ch.ToString()) * 10) + int.Parse(ch.ToString());
  12.         string liter = this.Alphabit[index].ToString() + this.Alphabit[num2].ToString();
  13.         string[] strArray = new string[6];
  14.         ch = str[5];
  15.         strArray[0] = ch.ToString();
  16.         ch = str[6];
  17.         strArray[1] = ch.ToString();
  18.         ch = str[7];
  19.         strArray[2] = ch.ToString();
  20.         ch = str[8];
  21.         strArray[3] = ch.ToString();
  22.         ch = str[9];
  23.         strArray[4] = ch.ToString();
  24.         strArray[5] = str[10].ToString();
  25.         string number = string.Concat(strArray);
  26.         this.CheckTicket(liter, number);
  27.     }
  28.     else
  29.     {
  30.         Log("Длина посылки от считывателя не соответсвует 14 байтам");
  31.         this.ReaderSerialPort.DiscardInBuffer();
  32.     }
  33. }


Code:
  1. private void ReadTourniquetData(object s, EventArgs e)
  2. {
  3.     byte[] buffer = new byte[this.tourniquetSerialPort.BytesToRead];
  4.     if (buffer.Length >= 1)
  5.     {
  6.         this.tourniquetSerialPort.Read(buffer, 0, buffer.Length);
  7.         if (buffer[0] == 0x35)
  8.         {
  9.             this.PassTimer.Stop();
  10.             if ((this.TicketSeria == "") && (this.TicketNumber == ""))
  11.             {
  12.                 Log("Проход");
  13.             }
  14.             else
  15.             {
  16.                 Log(string.Format("Проход по билету {0} {1}", this.TicketSeria, this.TicketNumber));
  17.                 this.UpdateTicketRecord(this.TicketSeria, this.TicketNumber);
  18.                 this.TicketSeria = "";
  19.                 this.TicketNumber = "";
  20.             }
  21.         }
  22.     }
  23.     else
  24.     {
  25.         Log("Длина посылки от контроллера турникета не соответсвует 3 байтам");
  26.         this.tourniquetSerialPort.DiscardInBuffer();
  27.     }
  28. }


насколько я понял программа должна получить от контроллера 14байт, с номером "билета", проверить его в базе и пустить

{ Атач доступен только для участников форума } - Tourniquet_src.rar
ClockMan


Ранг: 471.8 (мудрец)
Статус: Участник
оптимист

Создано: 1 октября 2017 02:51 New!
· Личное сообщение · #3

В метро будем бесплатно ездить
Vovka001

Ранг: 2.0 (гость)
Статус: Участник

Создано: 1 октября 2017 02:59 New!
· Личное сообщение · #4

Забыл сказать, что считывателем является сканер штрихкода который тоже подключен по COM порту только по другому порту. Допустим COM1 Соответственно код билета передается в COM1 порт и идет разрешение на проход, после чего в COM2 к которому подключен контроллер передается команда на открытия и после именно прохода контроллер передает посылку (которая мне нужна). Далее в базе отмечается что по данному билету проход совершён. Я предполагаю, но могу ошибаться, что посылка будет состоять из трех байт поскольку видел эту надпись: "Длина посылки от контроллера турникета не соответсвует 3 байтам"

Добавлено спустя 6 минут
private void ReadTourniquetData(object s, EventArgs e)
{
byte[] buffer = new byte[this.tourniquetSerialPort.BytesToRead];
if (buffer.Length >= 1)
{
this.tourniquetSerialPort.Read(buffer, 0, buffer.Length);
if (buffer[0] == 0x35)
{
this.PassTimer.Stop();
if ((this.TicketSeria == "") && (this.TicketNumber == ""))
{
Log("Проход");
}

Я правильно предполагаю из этой выдержки что команда на подтверждения прохода является 35 в Hex? Соответственно скорее всего мне нужно отправить 53 13 10 в порт и все будет замечательно?
LinXP

Ранг: 66.0 (постоянный)
Статус: Участник

Создано: 1 октября 2017 03:55 · Поправил: LinXP New!
· Личное сообщение · #5

if (buffer.Length >= 1) - вроде и одного байта должно хватить
да, по сути контроллер должен отправлять строку с буквой "S" + добавлять символы перевода строки 13 10 (0x0D, 0x0A они же CR+LF) = 3 байта,
строка на открытие "11111111", на закрытие "P"

| Сообщение посчитали полезным: Vovka001

Vovka001

Ранг: 2.0 (гость)
Статус: Участник

Создано: 2 октября 2017 00:26 New!
· Личное сообщение · #6

Все получилось, большое спасибо очень выручил. Считаю тема закрыта. Ещё раз спасибо.
reversecode


Ранг: 952.8 (! ! !)
Статус: Участник

Создано: 2 октября 2017 01:07 New!
· Личное сообщение · #7

через два дня в новостях.... из кремля был похищен чУмоЙданчик с красной кнопочкой,
специалисты по безопасности говорят был взломана система прохода через турникеты в самом кремле, подозреваемых ищут...

вы в следующих раз помогая думайте что и для кого вы делаете...

| Сообщение посчитали полезным: v00doo

LinXP

Ранг: 66.0 (постоянный)
Статус: Участник

Создано: 2 октября 2017 03:34 · Поправил: LinXP New!
· Личное сообщение · #8

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

| Сообщение посчитали полезным: bartolomeo

 eXeL@B —› Основной форум —› Помогите найти команду от контроллера к ПО по COM порту.
Эта тема закрыта. Ответы больше не принимаются.

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS