2011-01-01 2 views
0

У меня есть набор акселерометров для монеты, и я хочу подключить этот аппарат, используя serialport. Моя основная проблема заключается в том, что я пытался почти каждую настройку подключать эту машину. Номера выводов записываются на кабель как 3-й и 7-й. Поэтому я стараюсьподключение последовательного порта для неизвестного устройства

private void Form1_Load(object sender, EventArgs e) 
    { 
     // SerialPort paraPort defined at designer's generated code   
     paraport = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One); 


     //I wanna access to windows controls from the thread 
     System.Windows.Forms.Form.CheckForIllegalCrossThreadCalls = false; 
    } 


    private void button2_Click(object sender, EventArgs e) 
    { 
     //paraPort is the name of serialport class 
     paraPort.ReadBufferSize = 1024; 
     paraPort.WriteBufferSize = 1024; 
     paraPort.ReadTimeout = 1000; 
     paraPort.WriteTimeout = 1000; 
     paraPort.NewLine = "\n"; 

     //Because 7th pin is for RTS which means request 2 send 
     paraPort.Handshake = Handshake.RequestToSend; 


     //Data Terminal Ready Enable 
     paraPort.DtrEnable = true; 
     paraPort.RtsEnable = true; 
     paraPort.Open(); 

     //Then Thread check the procedure inside of try - catch block 

    try{ 
     // Thread money defined at designer's generated code 
     money = new Thread(new ThreadStart(CheckTheMachineState)); 
     money.Start(); 
    }catch(Exception e){ 
     MessageBox.Show("thread cannot be created"+e.Message); 
    } 

    } 


     private void CheckTheMachineState() 
     { 
      richTextBox1.AppendText("Thread is running\n"); 


      //I wanna get the value of IOCTL_SERIAL_WAIT_ON_MASK 
      //But I still don't know how 

     } 
    } 

Машина работает хорошо. Но когда я использую свойство paraPort.ReadBufferSize, он дает мне 0, когда монета принимает: S. Когда я использую метод paraPort.Read, он выдает исключение таймаута: \

Так что я могу сделать для этого? Я использую инструменты portmon, чтобы поймать сигнал монетоприемника.

Значение IOCTL_SERIAL_WAIT_ON_MASK изменено как SUCESS, когда я кладу монету. Как я могу уловить это значение?

+0

Вы не разместили код, который читает. Невозможно угадать, за исключением того, что вы не читаете ReadBufferSize(), это не метод. –

+0

Ditto на комментарий @Hans Passant, где и где находится ваша скорость в бодах, и вы уверены, что у него есть линии DTR и RTS и что они связаны? – kenny

+0

@kenny Я установил границу как 9600, как обычно (большая часть документации записывает, что это значение работает для большинства устройств), я забыл написать эти значения, потому что я использую visual studio gui для их установки. Я установил там скорость. DataBits - это 8, а StopBits - один, а четность - нет. – Chaagalar

ответ

0

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

+0

Я сделал это. serialPort.Dsrholding дал мне сигнал денег. Я использую анализатор RS232 для понимания свойств всей машины. – Chaagalar

Смежные вопросы