Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }