/// <summary> /// 发送数据,执行完WriteFrame及AddPackage后执行此函数才发送数据 /// </summary> public void Send() { SendFrame.PackageNum = (byte)SendBlock.Amount; SendBuffer[0] = SendFrame.S1; SendBuffer[1] = SendFrame.S2; SendBuffer[2] = SendFrame.Source; SendBuffer[3] = SendFrame.Target; SendBuffer[4] = SendFrame.Reserve; SendBuffer[5] = SendFrame.PackageNum; int j = FrameLength; ZBlock p; for (int i = 0; i < SendFrame.PackageNum; i++) { byte sum = 0; p = SendBlock.FetchObject(); SendBuffer[j] = p.Word; sum += SendBuffer[j]; j++; SendBuffer[j] = p.Reserve; sum += SendBuffer[j]; j++; for (int k = 0; k < BlockLength - 3; k++) { SendBuffer[j] = p.Data[k]; sum += SendBuffer[j]; j++; } SendBuffer[j] = sum; j++; } SerialObject.WriteBytes(SendBuffer, 0, j); _SendFrameNum++; _SendBlockNum += SendFrame.PackageNum; }
/// <summary> /// 读取接收到缓存中的帧头 /// </summary> public ZFrame FetchFrame() { return(ReceiveFrame.FetchObject()); }
/// <summary> /// 读取接收到缓存中的数据包 /// </summary> public ZBlock FetchBlock() { return(ReceiveBlock.FetchObject()); }
//接收数据 void SerialObject_OnReceviceByte() { while (SerialObject != null && SerialObject.BufferByteNum > 0) { Buffer.InsertObject(SerialObject.ReadByte()); while (Buffer.Amount > 0) { if (Buffer[0] != S1) { Buffer.FetchObject(); _LostByteNum++; } else { break; } } if (CheckFrame()) { AnalyseProtocol(); } } }