У меня есть набор акселерометров для монеты, и я хочу подключить этот аппарат, используя 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, когда я кладу монету. Как я могу уловить это значение?
Вы не разместили код, который читает. Невозможно угадать, за исключением того, что вы не читаете ReadBufferSize(), это не метод. –
Ditto на комментарий @Hans Passant, где и где находится ваша скорость в бодах, и вы уверены, что у него есть линии DTR и RTS и что они связаны? – kenny
@kenny Я установил границу как 9600, как обычно (большая часть документации записывает, что это значение работает для большинства устройств), я забыл написать эти значения, потому что я использую visual studio gui для их установки. Я установил там скорость. DataBits - это 8, а StopBits - один, а четность - нет. – Chaagalar