Beispiel #1
0
        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();//開始計時
        }
Beispiel #2
0
        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
                {
                }
            }    /*
                  * }*/
        }