private void button2_Click(object sender, EventArgs e) { st_CommParaSet commPara = new st_CommParaSet(); byte[] buffer = new byte[Marshal.SizeOf(commPara)]; // CommProtocol.MakeParaSet(ref buffer, CommProtocol.HALL_ANGLE); // comm.Write(buffer, 0, Marshal.SizeOf(commPara)); }
public void comm_DataReceived(object sender, SerialDataReceivedEventArgs e) { int i; try { byte[] framebuffer = new byte[128]; byte frametype = 0; int n = CVar.GetComm().BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致 if (n == 0) { return; } byte[] buf = new byte[n]; //声明一个临时数组存储当前来的串口数据 received_count += n; //增加接收计数 comm.Read(buf, 0, n); //读取缓冲数据 //Add receive data to que for (i = 0; i < n; i++) { FifoClass.EnFifo(buf[i]); } if (GetFrame(ref framebuffer, ref frametype) > 0) { st_CommParaSet commPara = new st_CommParaSet(); commPara = (st_CommParaSet)CommProtocol.BytesToStruct(framebuffer, commPara.GetType()); UploadData.hall_angle = commPara.hall_angle; UploadData.zeroAngle = commPara.hall_zero_angle; UploadData.hall_x = commPara.hall_x; UploadData.hall_y = commPara.hall_y; UploadData.maxDegree = commPara.maxDegree; UploadData.maxCurrent = commPara.maxCurrent; UploadData.Kp = commPara.pid_p; UploadData.Ki = commPara.pid_i; UploadData.Ke1 = commPara.pid_ke1; UploadData.Ke2 = commPara.pid_ke2; UploadData.reversse = commPara.reverse; UploadData.run2zero = commPara.run2zero; UploadData.traceMode = commPara.traceMode; } } finally { } }
public static void MakeFrame(byte Cmd) { // st_CommParaSet commPara = new st_CommParaSet(); commPara = (st_CommParaSet)BytesToStruct(FrameBuffer, commPara.GetType()); commPara.header.head = CMD_HEAD; commPara.header.cmd = Cmd; commPara.hall_x = 0; commPara.hall_y = 0; commPara.hall_angle = 0; commPara.hall_zero_angle = 0; if ((Cmd & CMD_SET_ZERO_ANGLE) == CMD_SET_ZERO_ANGLE) { // Do nothing } else if ((Cmd & CMD_SET_PID_PARA) == CMD_SET_PID_PARA) { commPara.pid_p = MotorPara.Kp; commPara.pid_i = MotorPara.Ki; commPara.pid_ke1 = MotorPara.Ke1; commPara.pid_ke2 = MotorPara.Ke2; } else if ((Cmd & CMD_SET_CONTROL_PARA) == CMD_SET_CONTROL_PARA) { commPara.maxDegree = MotorPara.maxDegree; commPara.maxCurrent = MotorPara.maxCurrent; commPara.reverse = MotorPara.reversse; commPara.run2zero = MotorPara.run2zero; } else if ((Cmd & CMD_SET_TRACE_MODE) == CMD_SET_TRACE_MODE) { commPara.traceMode = MotorPara.traceMode; } FrameBuffer = StructToBytes(commPara); }
public UInt16 GetFrame(ref byte[] buffer, ref byte type) { st_CommParaSet commPara = new st_CommParaSet(); int length = Marshal.SizeOf(commPara); int i; while (true) { if (FifoClass.FifoLen() >= length) { FifoClass.CheckFifo(ref buffer, 4); if (buffer[0] == CommProtocol.CMD_HEAD1 && buffer[1] == CommProtocol.CMD_HEAD2 && buffer[2] == CommProtocol.CMD_HEAD3 && buffer[3] == CommProtocol.CMD_HEAD4) { { for (i = 0; i < (length); i++) { buffer[i] = FifoClass.DeFifo(); } commPara = (st_CommParaSet)CommProtocol.BytesToStruct(buffer, commPara.GetType()); return((UInt16)length); } } else { FifoClass.DeFifo(); } } else { break; } } return(0); }