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); }
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); } }
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); }
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); }
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); } }
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); }
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(); } }
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); } }
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"); } }
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); }
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)); }
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)); }