コード例 #1
0
        public static int SendData(SerialPort CommPort, byte[] TxBuffer, int TxLength, ref byte[] RxBuffer, int RxLength)
        {
            int Length = 0;

            if (!CommPort.IsOpen)
            {
                return(0);
            }
            MB TxModBus = new MB();
            MB RxModBus = new MB();

            ModBusClass.ModBusCoppyCreate(ref ModBusClass.DefMoBus, ref TxModBus);
            ModBusClass.ModBusCoppyCreate(ref ModBusClass.DefMoBus, ref RxModBus);
            for (int i = 0; i < 10; i++)
            {
                Length = SendDataOne(CommPort, TxBuffer, TxLength, ref RxBuffer, RxLength);
                ModBusClass.ModBusCoppyCreate(ref ModBusClass.DefMoBus, ref RxModBus);
                ModBusClass.ModBus_Expend(RxBuffer, Length, ref RxModBus);
                if (RxModBus.ErrorFlag == ModBusClass.ModBus_Ok)
                {
                    return(Length);
                }
                //  else MessageBox.Show(Tools.HexToString(RxBuffer, 100));
            }
            //  MessageBox.Show("重试次数过多");
            return(Length);
        }
コード例 #2
0
 void Port1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
 {
     try
     {
         Thread.Sleep(20);
         int    n   = Value.serialPort1.BytesToRead;
         byte[] buf = new byte[n];
         Value.serialPort1.Read(buf, 0, n);
         Value.ReviceData.Add(buf);
         BeginInvoke(new MethodInvoker(delegate()
         {
             if (buf.Length > 4)
             {
                 ModBusClass.ModBus_Expend(buf, buf.Length, ref RxModBus);
                 if (RxModBus.ErrorFlag == ModBusClass.ModBus_Ok)
                 {
                     richTextBox1.SelectionColor = Color.Green;
                     string Msg = Tools.GetStringFromByte(RxModBus.Data);
                     Msg        = Msg.Replace("NULL", "");
                     richTextBox1.AppendText(Msg);
                     if (Msg.IndexOf("OK") > 0)
                     {
                         Count++;
                     }
                 }
             }
         }));
     }
     catch (Exception E) { MessageBox.Show(E.Message); }
 }
コード例 #3
0
ファイル: TankHand.cs プロジェクト: wpmyj/csharp
 private void FillValue()
 {
     ModBusClass.ModBusCoppyCreate(ref ModBusClass.DefMoBus, ref TxModBus);
     ModBusClass.ModBusCoppyCreate(ref ModBusClass.DefMoBus, ref RxModBus);
     ModBusClass.ModBusCoppyCreate(ref ModBusClass.DefMoBus, ref Usart.ThreadRxModBusMsg);
     ModBusClass.ModBusCoppyCreate(ref ModBusClass.DefMoBus, ref Usart.ThreadTxModBusMsg);
 }
コード例 #4
0
 private void FillValue()
 {
     ModBusClass.ModBus_Clear(ref TxModBus);                                                                                              //ModBusClass.HostAddr
     ModBusClass.ModBus_Clear(ref RxModBus);
     ModBusClass.ModBus_Create(ref ModBusClass.DefMoBus, 2, byte.Parse("5"), MasterSlaveMode.WorkMode_Master, ModBusClass.CheakMode_Crc); //产生默认配置
     ModBusClass.ModBusCoppyCreate(ref ModBusClass.DefMoBus, ref TxModBus);
     ModBusClass.ModBusCoppyCreate(ref ModBusClass.DefMoBus, ref RxModBus);
     ModBusClass.ModBusCoppyCreate(ref ModBusClass.DefMoBus, ref Usart.ThreadRxModBusMsg);
     ModBusClass.ModBusCoppyCreate(ref ModBusClass.DefMoBus, ref Usart.ThreadTxModBusMsg);
 }
コード例 #5
0
ファイル: Sensor.cs プロジェクト: wpmyj/csharp
 private void GetAngle()//获取角度  线程存放在变量AngleVlue
 {
     while (Value.App_Run)
     {
         int RxLength = Usart.SendData(serialPort1, Usart.ThreadTxBuffer, Usart.ThreadTxBufferSize, ref Usart.ThreadRxBuffer, 100);
         ModBusClass.ModBus_Expend(Usart.ThreadRxBuffer, RxLength, ref Usart.ThreadRxModBusMsg);
         AngleValue = Tools.ByteToFloat(Usart.ThreadRxModBusMsg.Data, 0, 0);
         Thread.Sleep(100);
     }
 }
コード例 #6
0
        private void SendSensor(ACFF Mode, byte[] Data, int Length)
        {
            Random ra = new Random();

            timer1.Enabled = false;
            FillValue();
            TxModBus.MsgFlag    = (byte)Mode;
            TxModBus.DataFlag   = 0x01;
            TxModBus.DataLength = Length;
            TxModBus.MsgLength  = Length + 3;
            int TxLength = ModBusClass.ModBus_CreateMsg(ref TxBuffer, ref TxModBus, (int)Mode, ra.Next(0, 255), 0x91, Data, Length);

            textBox5.Text = Tools.HexToString(TxBuffer, TxLength);
            TxBufferSize  = TxLength;
            Value.serialPort1.Write(TxBuffer, 0, TxLength);
        }
コード例 #7
0
        private void Write(ACFF Mode, byte[] Data, int Length)
        {
            Random ra = new Random();

            FillValue();
            TxModBus.MsgFlag    = (byte)Mode;
            TxModBus.DataFlag   = 0x01;
            TxModBus.DataLength = Length;
            TxModBus.MsgLength  = Length + 3;
            int TxLength = ModBusClass.ModBus_CreateMsg(ref TxBuffer, ref TxModBus, (int)Mode, ra.Next(0, 255), 0x91, Data, Length);

            try
            {
                Value.serialPort1.Write(TxBuffer, 0, TxLength);
            }
            catch { ResetCom(); }
        }
コード例 #8
0
        private void GetAngle()//获取角度  线程存放在变量AngleVlue
        {
            while (Value.App_Run)
            {
                int RxLength = Usart.SendData(Value.serialPort1, Usart.ThreadTxBuffer, Usart.ThreadTxBufferSize, ref Usart.ThreadRxBuffer, 100);
                ModBusClass.ModBus_Expend(Usart.ThreadRxBuffer, RxLength, ref Usart.ThreadRxModBusMsg);
                AngleValue = Tools.ByteToFloat(Usart.ThreadRxModBusMsg.Data, 0, 0);
                HumiValue  = Tools.ByteToFloat(Usart.ThreadRxModBusMsg.Data, 4, 0);

                try
                {
                    Vol         = Tools.ByteToFloat(Usart.ThreadRxModBusMsg.Data, 8, 0);
                    Userate_CPU = Usart.ThreadRxModBusMsg.Data[12];
                }
                catch { }
                Thread.Sleep(100);
            }
        }
コード例 #9
0
 private string SendRead(ACFF Mode, byte[] Data, int Length)
 {
     try
     {
         Random ra = new Random();
         FillValue();
         TxModBus.MsgFlag    = (byte)Mode;
         TxModBus.DataFlag   = 0x01;
         TxModBus.DataLength = Length;
         TxModBus.MsgLength  = Length + 3;
         int TxLength = ModBusClass.ModBus_CreateMsg(ref TxBuffer, ref TxModBus, (int)Mode, ra.Next(0, 255), 0x91, Data, Length);
         TxBufferSize = TxLength;
         int RxLength = Usart.SendData(Value.serialPort1, TxBuffer, TxLength, ref RxBuffer, 100);
         ModBusClass.ModBus_Expend(RxBuffer, RxLength, ref RxModBus);
         return(Tools.GetStringFromByte(RxModBus.Data));
     }
     catch { try { Value.serialPort1.Open(); } catch { }; return("NULL"); }
 }
コード例 #10
0
        public static int SendData(SerialPort CommPort, byte[] TxBuffer, int TxLength, ref byte[] RxBuffer, int RxLength)
        {
            int Length = 0;

            MB TxModBus = new MB();
            MB RxModBus = new MB();

            ModBusClass.ModBusCoppyCreate(ref ModBusClass.DefMoBus, ref TxModBus);
            ModBusClass.ModBusCoppyCreate(ref ModBusClass.DefMoBus, ref RxModBus);
            for (int i = 0; i < 20; i++)
            {
                Length = SendDataOne(CommPort, TxBuffer, TxLength, ref RxBuffer, RxLength);
                ModBusClass.ModBusCoppyCreate(ref ModBusClass.DefMoBus, ref RxModBus);
                ModBusClass.ModBus_Expend(RxBuffer, Length, ref RxModBus);
                if (RxModBus.ErrorFlag == ModBusClass.ModBus_Ok)
                {
                    return(Length);
                }
            }
            return(Length);
        }
コード例 #11
0
ファイル: Sensor.cs プロジェクト: wpmyj/csharp
        private string SendReadSensor(ACFF Mode, byte[] Data, int Length)
        {
            Random ra = new Random();

            timer1.Enabled = false;
            FillValue();
            TxModBus.MsgFlag    = (byte)Mode;
            TxModBus.DataFlag   = 0x91;
            TxModBus.DataLength = Length;
            TxModBus.MsgLength  = Length + 3;
            int TxLength = ModBusClass.ModBus_CreateMsg(ref TxBuffer, ref TxModBus, (int)Mode, ra.Next(0, 255), 0x91, Data, Length);

            textBox5.Text = Tools.HexToString(TxBuffer, TxLength);
            TxBufferSize  = TxLength;
            int RxLength = Usart.SendData(serialPort1, TxBuffer, TxLength, ref RxBuffer, 100);

            textBox6.Text = Tools.HexToString(RxBuffer, RxLength);
            ModBusClass.ModBus_Expend(RxBuffer, RxLength, ref RxModBus);
            if (RxModBus.ErrorFlag == ModBusClass.ModBus_Ok)
            {
                string R = Tools.GetStringFromByte(RxModBus.Data);
                if (Mode == ACFF.ACFF_GetCPUModel)
                {
                    label16.Text = R;
                }
                if (Mode == ACFF.ACFF_GetBSD)
                {
                    label17.Text = R;
                }
                if (Mode == ACFF.ACFF_GetCPUID)
                {
                    label15.Text = R;
                }
                if (Mode == ACFF.ACFF_GetCANSpeed)
                {
                    label14.Text = R;
                }
                if (Mode == ACFF.ACFF_GetSensorModel)
                {
                    label10.Text = R;
                }
                if (Mode == ACFF.ACFF_GetSensorNumber)
                {
                    label11.Text = R;
                }
                if (Mode == ACFF.ACFF_GetSensorName)
                {
                    label12.Text = R;
                }
                if (Mode == ACFF.ACFF_GetSensorNote)
                {
                    label13.Text = R;
                }
                timer1.Enabled = true;
            }
            else
            {
                MessageBox.Show("ModBus解析错误代码[" + RxModBus.ErrorFlag + "]");
            }
            return(Tools.GetStringFromByte(RxModBus.Data));
        }
コード例 #12
0
        private string SendReadSensor(ACFF Mode, byte[] Data, int Length)
        {
            Random ra = new Random();

            timer1.Enabled = false;
            FillValue();
            TxModBus.MsgFlag    = (byte)Mode;
            TxModBus.DataFlag   = 0x01;
            TxModBus.DataLength = Length;
            TxModBus.MsgLength  = Length + 3;
            int TxLength = ModBusClass.ModBus_CreateMsg(ref TxBuffer, ref TxModBus, (int)Mode, ra.Next(0, 255), 0x91, Data, Length);

            textBox5.Text = Tools.HexToString(TxBuffer, TxLength);
            TxBufferSize  = TxLength;
            RxBuffer      = new byte[512];
            int RxLength = Usart.SendData(Value.serialPort1, TxBuffer, TxLength, ref RxBuffer, 100);

            // MessageBox.Show(Tools.HexToString(RxBuffer, 100));
            textBox6.Text = Tools.HexToString(RxBuffer, RxLength);
            ModBusClass.ModBus_Expend(RxBuffer, RxLength, ref RxModBus);
            if (RxModBus.ErrorFlag == ModBusClass.ModBus_Ok)
            {
                string R = Tools.GetStringFromByte(RxModBus.Data);
                if (Mode == ACFF.SCFF_GetSystemInfor)
                {
                    label16.Text = R;
                }
                if (Mode == ACFF.SCFF_GetCPUModel)
                {
                    label17.Text = R;
                }
                if (Mode == ACFF.SCFF_GetHandVersion)
                {
                    label15.Text = R;
                }
                if (Mode == ACFF.SCFF_GetSoftVersion)
                {
                    label14.Text = R;
                }
                if (Mode == ACFF.SCFF_GetSensorModel)
                {
                    label10.Text = R;
                }
                if (Mode == ACFF.SCFF_GetSensorNumber)
                {
                    label11.Text = R;
                }
                if (Mode == ACFF.SCFF_GetSensorName)
                {
                    label12.Text = R;
                }
                if (Mode == ACFF.SCFF_GetSensorNote)
                {
                    label13.Text = R;
                }
                if (Mode == ACFF.SCFF_GetProgTime)
                {
                    label22.Text = R;
                }
                if (Mode == ACFF.SCFF_GetFlashSize)
                {
                    label41.Text = R;
                }
                if (Mode == ACFF.SCFF_GetLibVersion)
                {
                    label43.Text = R;
                }
            }
            else if (TxModBus.SlaveAddr != ModBusClass.BroadAddr)
            {
                textBox6.Text = "ModBus解析错误代码[" + RxModBus.ErrorFlag + "]";
            }
            return(Tools.GetStringFromByte(RxModBus.Data));
        }