private void timer1_Tick(object sender, EventArgs e) { Modbus_Serial.Dispose(); Modbus_Serial.Open(); buffer = modbus.GetTransmit(); Modbus_Serial.Write(buffer, 0, buffer.Length); Enable_Timer2(); Is_Need_Receive = true; switch (buffer[modbus.Modbus_FunctionCode_Index]) { case Modbus_Rule.FuctionCode3: case Modbus_Rule.FuctionCode4: Receive_Length = modbus.GetResponseLength(buffer[modbus.Modbus_FunctionCode_Index], buffer[modbus.Modbus_Quantity_Index]); break; case Modbus_Rule.FuctionCode6: Receive_Length = modbus.GetResponseLength(buffer[modbus.Modbus_FunctionCode_Index], buffer.Length); break; case Modbus_Rule.FuctionCode16: Receive_Length = modbus.GetResponseLength(buffer[modbus.Modbus_FunctionCode_Index], buffer[modbus.Modbus_Modbus_FunctionCode16_Quantity_Index]); break; } Total_TextBox.AppendText("Tx: "); Total_TextBox.AppendText(BitConverter.ToString(buffer).Replace("-", " ")); Total_TextBox.AppendText(Environment.NewLine); Total_Times++; Total_Count_TextBox.Text = Total_Times.ToString(); //Modbus_Serial.Close(); //s.Start();//開始計時 }
private void Modbus_Serial_DataReceived(object sender, SerialDataReceivedEventArgs e) { Int16 j = 0; Int32 length = 0; Byte[] Receive_Buffer = new Byte[256]; /* * if (Is_Need_Receive == true) * {*/ if (Modbus_Serial.IsOpen) { Thread.Sleep(Convert.ToInt16(Receive_Length * 2.5));///Receive_Length * 2 try { length = Modbus_Serial.Read(Receive_Buffer, 0, Receive_Buffer.Length); j = 0; for (int i = Temp_Receive_Length; i < Temp_Receive_Length + length; i++)// Temp_Receive_Length + length { Temp_Receive_Buffer[i] = Receive_Buffer[j]; j++; } Temp_Receive_Length += length; /* * if (Temp_Receive_Length == Receive_Length) * { * if (modbus.GetCrcEqual(ref Temp_Receive_Buffer, Temp_Receive_Buffer.Length - modbus.Temp_Receive_Buffer_Offest, * Temp_Receive_Buffer[Temp_Receive_Buffer.Length - modbus.Temp_Receive_Buffer_Crc_Offest2], * Temp_Receive_Buffer[Temp_Receive_Buffer.Length - modbus.Temp_Receive_Buffer_Crc_Offest1]) == true) * { * Array.Resize(ref Temp_Receive_Buffer, Temp_Receive_Length);// 傳入矩陣位址 * Display receive_result = new Display(DisplayText); * this.Invoke(receive_result, new Object[] { Temp_Receive_Buffer }); * Clear_Timer2_Parameter(); * } * } * else if (Temp_Receive_Length == modbus.Modbus_Error_Length) * { * if (modbus.GetCrcEqual(ref Temp_Receive_Buffer, Temp_Receive_Length - modbus.Temp_Receive_Buffer_Offest, * Temp_Receive_Buffer[Temp_Receive_Length - modbus.Temp_Receive_Buffer_Crc_Offest2], * Temp_Receive_Buffer[Temp_Receive_Length - modbus.Temp_Receive_Buffer_Crc_Offest1]) == true) * { * Array.Resize(ref Temp_Receive_Buffer, Temp_Receive_Length);// 傳入矩陣位址 * Display receive_result = new Display(DisplayText); * this.Invoke(receive_result, new Object[] { Temp_Receive_Buffer }); * Clear_Timer2_Parameter(); * } * }*/ if (Temp_Receive_Length == Receive_Length || Temp_Receive_Length == modbus.Modbus_Error_Length) { Array.Resize(ref Temp_Receive_Buffer, Temp_Receive_Length);// 傳入矩陣位址 Display receive_result = new Display(DisplayText); this.Invoke(receive_result, new Object[] { Temp_Receive_Buffer }); Clear_Timer2_Parameter(); } else {/* * Array.Resize(ref Temp_Receive_Buffer, Temp_Receive_Length);// 傳入矩陣位址 * Display receive_result = new Display(Display_Error_Text); * this.Invoke(receive_result, new Object[] { Temp_Receive_Buffer }); * Clear_Timer2_Parameter();*/ } } catch { } } /* * }*/ }