public byte[] getRegisterDataToChange() { //sends read request(03 or 01) to get register data for showing on textboxes and also to change. byte[] sendReq, requestedData = null, totalRegister, startAddress, temp = null; int sendIndex = 0, readReqFunctionCode, tR; string tempFC = ""; if (writeMultiReqFuncCode == 15) { readReqFunctionCode = 1; } else { readReqFunctionCode = 3; } tR = writeMultiReqTotalReg; tempFC = form1.formBaseDataTable.baseFunctionCode; //temporarly storing previous read request so read request for writing multiple data can be compared form1.formBaseDataTable.baseFunctionCode = "0" + readReqFunctionCode.ToString(); //multiple write read request function code if (form1._connectType.Equals("TCP")) { sendReq = new byte[12]; Array.Copy(new byte[] { 0, 0, 0, 0, 0, 6 }, 0, sendReq, sendIndex, 6); sendIndex += 6; } else { sendReq = new byte[8]; } try { sendReq[sendIndex++] = byte.Parse(form1.textBoxMasterId.Text); sendReq[sendIndex++] = (byte)readReqFunctionCode; //for reading multiple holding register startAddress = BitConverter.GetBytes((ushort)(writeMultiReqStartAdd)); Array.Reverse(startAddress); Array.Copy(startAddress, 0, sendReq, sendIndex, 2); sendIndex += 2; totalRegister = BitConverter.GetBytes((ushort)tR); Array.Reverse(totalRegister); Array.Copy(totalRegister, 0, sendReq, sendIndex, 2); sendIndex += 2; //============================================================================================================================================== var backgroundScheduler = TaskScheduler.Default; if (form1._connectType.Equals("TCP")) { temp = form1.tcpclient.sendReadReqForWriteData(sendReq); requestedData = new byte[temp[8]]; Array.Copy(temp, 9, requestedData, 0, temp[8]); } else { Thread.Sleep(100); Array.Copy(CRC16.getCrcByte(sendReq.Take(sendReq.Length - 2).ToArray()), 0, sendReq, sendIndex, 2); temp = form1.serialDataTable.SendReadReqForWriteData(sendReq); requestedData = new byte[temp[2]]; Array.Copy(temp, 3, requestedData, 0, temp[2]); } //if (form1._connectType.Equals("TCP")) //{ // temp = form1.tcpclient.sendReadReqForWriteData(sendReq); // requestedData = new byte[temp[8]]; // Array.Copy(temp, 9, requestedData, 0, temp[8]); // //Task.Factory.StartNew(delegate { temp = form1.tcpclient.sendReadReqForWriteData(sendReq); // // Task.Delay(10000).Wait(); // // requestedData = new byte[temp[8]]; // //}) // // .ContinueWith(delegate // // { // // Array.Copy(temp, 9, requestedData, 0, temp[8]); // // }, backgroundScheduler); // //or | // // V // //if (form1.buttonStop.Enabled) // //{ // // Task.Factory.StartNew(delegate { form1.tcpclient.stopTransfer(); }, backgroundScheduler). // // ContinueWith(delegate { temp = form1.tcpclient.sendReadReqForWriteData(sendReq); }, backgroundScheduler); // // //ContinueWith(delegate { form1.tcpclient.startTransfer(); }, uiScheduler); // //} // //else // //{ // // Task.Factory.StartNew(delegate { temp = form1.tcpclient.sendReadReqForWriteData(sendReq); }); // //} //} //else //{ // Array.Copy(CRC16.getCrcByte(sendReq.Take(sendReq.Length - 2).ToArray()), 0, sendReq, sendIndex, 2); // if (form1.buttonStop.Enabled) // { // Task.Factory.StartNew(delegate { form1.serialDataTable.stopTransfer(); }, backgroundScheduler). // ContinueWith(delegate { temp = form1.serialDataTable.sendReadReqForWriteData(sendReq); }, backgroundScheduler); // //ContinueWith(delegate { form1.serialDataTable.startTransfer(); }, backgroundScheduler); // } // else // { // Task.Factory.StartNew(delegate { temp = form1.serialDataTable.sendReadReqForWriteData(sendReq); }); // } // requestedData = new byte[temp[2]]; // Array.Copy(temp, 3, requestedData, 0, temp[2]); //} //============================================================================================================================================== //if (form1._connectType.Equals("TCP")) //{ // temp = form1.tcpclient.sendReadReqForWriteData(sendReq); // requestedData = new byte[temp[8]]; // Array.Copy(temp,9,requestedData,0, temp[8]); //} //else //{ // Array.Copy(CRC16.getCrcByte(sendReq.Take(sendReq.Length - 2).ToArray()), 0, sendReq, sendIndex, 2); // temp = form1.serialDataTable.sendReadReqForWriteData(sendReq); // requestedData = new byte[temp[2]]; // Array.Copy(temp, 3, requestedData, 0, temp[2]); //} } catch (Exception ae) { form1.AppendLog("Cannot read data for write request"); requestedData = new byte[2 * (int)tR]; } return(requestedData); }
public byte[] SendData(byte[] reqByte, int sendReqFunctionCode) { ushort sendDataStartAddress = 0, sendDataTotalRegister = 0; int i = 0; byte[] b = new byte[2]; byte[] sendByte = new byte[8]; if (reqByte != null) { sendByte = new byte[4 + reqByte.Length]; } sendByte[i++] = (byte)int.Parse(f.textBoxMasterId.Text); sendByte[i++] = (byte)sendReqFunctionCode; if (sendReqFunctionCode < 5) { sendDataStartAddress = (ushort)(serialBaseDataTable.baseStartAddress); sendDataTotalRegister = (ushort)serialBaseDataTable.baseTotalRegister; b = BitConverter.GetBytes(sendDataStartAddress); if (BitConverter.IsLittleEndian) { Array.Reverse(b); } Array.Copy(b, 0, sendByte, i, 2); i += 2; b = BitConverter.GetBytes(sendDataTotalRegister); if (BitConverter.IsLittleEndian) { Array.Reverse(b); } Array.Copy(b, 0, sendByte, i, 2); i += 2; } else { if (reqByte == null) { MessageBox.Show("write data is null.Cannot send WriteRequest inside sendData. "); return(null); } switch (sendReqFunctionCode) { case 5: Array.Copy(reqByte, 0, sendByte, i, reqByte.Length); break; case 6: Array.Copy(reqByte, 0, sendByte, i, reqByte.Length); break; case 15: Array.Copy(reqByte, 0, sendByte, i, reqByte.Length); break; case 16: Array.Copy(reqByte, 0, sendByte, i, reqByte.Length); break; default: sendByte = new byte[9]; Array.Copy(new byte[6] { 0, 0, 0, 0, 0, 3 }, 0, sendByte, 0, 6); sendByte[7] = byte.Parse(f.textBoxMasterId.Text); sendByte[7] = 131; sendByte[8] = (byte)1; break; } i += reqByte.Length; } Array.Copy(CRC16.getCrcByte(sendByte.Take(sendByte.Length - 2).ToArray()), 0, sendByte, i, 2); return(sendByte); }