public string ReadString(ushort address, ushort points)
        {
            CustomReadHoldingRegistersRequest  readAscii = new CustomReadHoldingRegistersRequest(3, 1, address, points);
            CustomReadHoldingRegistersResponse response  = master.ExecuteCustomMessage <CustomReadHoldingRegistersResponse>(readAscii);

            return(System.Text.Encoding.ASCII.GetString(response.Data));
        }
Example #2
0
        public virtual void ExecuteCustomMessage_ReadHoldingRegisters()
        {
            CustomReadHoldingRegistersRequest  request  = new CustomReadHoldingRegistersRequest(3, SlaveAddress, 104, 2);
            CustomReadHoldingRegistersResponse response = Master.ExecuteCustomMessage <CustomReadHoldingRegistersResponse>(request);

            Assert.AreEqual(new ushort[] { 0, 0 }, response.Data);
        }
        public float[] ReadFloat(ushort address, ushort points)
        {
            float[] floatval = new float[points];
            CustomReadHoldingRegistersRequest  readFloat = new CustomReadHoldingRegistersRequest(3, 1, address, points);
            CustomReadHoldingRegistersResponse response  = master.ExecuteCustomMessage <CustomReadHoldingRegistersResponse>(readFloat);

            for (ushort i = 0; i < points; i++)
            {
                byte[] floatOr = new byte[] { response.Data[3 + 4 * i], response.Data[2 + 4 * i], response.Data[1 + 4 * i], response.Data[0 + 4 * i] };
                floatval[i] = BitConverter.ToSingle(floatOr, 0);
            }
            return(floatval);
        }
        public int[] ReadInt32(ushort address, ushort points)
        {
            int[] longval = new int[points];
            CustomReadHoldingRegistersRequest  readLong = new CustomReadHoldingRegistersRequest(3, 1, address, points);
            CustomReadHoldingRegistersResponse response = master.ExecuteCustomMessage <CustomReadHoldingRegistersResponse>(readLong);

            for (ushort i = 0; i < points; i++)
            {
                byte[] longOr = new byte[] { response.Data[3 + 4 * i], response.Data[2 + 4 * i], response.Data[1 + 2 * i], response.Data[0 + 2 * i] };
                longval[i] = BitConverter.ToInt32(longOr, 0);
            }
            return(longval);
        }
Example #5
0
        public virtual void ExecuteCustomMessage_WriteMultipleRegisters()
        {
            ushort testAddress = 120;

            ushort[] testValues = new ushort[] { 10, 20, 30, 40, 50 };
            CustomReadHoldingRegistersRequest   readRequest  = new CustomReadHoldingRegistersRequest(3, SlaveAddress, testAddress, (ushort)testValues.Length);
            CustomWriteMultipleRegistersRequest writeRequest = new CustomWriteMultipleRegistersRequest(16, SlaveAddress, testAddress, new RegisterCollection(testValues));

            var response = Master.ExecuteCustomMessage <CustomReadHoldingRegistersResponse>(readRequest);

            ushort[] originalValues = response.Data;
            Master.ExecuteCustomMessage <CustomWriteMultipleRegistersResponse>(writeRequest);
            response = Master.ExecuteCustomMessage <CustomReadHoldingRegistersResponse>(readRequest);
            ushort[] newValues = response.Data;
            Assert.AreEqual(testValues, newValues);
            writeRequest = new CustomWriteMultipleRegistersRequest(16, SlaveAddress, testAddress, new RegisterCollection(originalValues));
            Master.ExecuteCustomMessage <CustomWriteMultipleRegistersResponse>(writeRequest);
        }
        private void GetAlarmsEvents(ProgressBar progress, ushort FC, ushort quantity, bool getAlarms)
        {
            progress.Value = 0;

            string    OmniIP = "10.10.1." + Convert.ToString(FC + 10);
            TcpClient client = new TcpClient(OmniIP, 502);

            client.ReceiveTimeout = 500;
            ModbusIpMaster master = ModbusIpMaster.CreateIp(client);

            //Create text file
            string fileName;

            if (getAlarms)
            {
                fileName = "FC" + Convert.ToString(FC) + "_alarms.txt";
            }
            else
            {
                fileName = "FC" + Convert.ToString(FC) + "_events.txt";
            }
            TextWriter txt = new StreamWriter(fileName);

            //Number of events to load
            master.WriteSingleRegister((byte)1, (ushort)3769, quantity);

            //Send command to load Events on buffer
            byte commandByte;

            if (getAlarms)
            {
                commandByte = 0x10;
            }
            else
            {
                commandByte = 0x80;
            }
            //byte[] invCommandBytes = new byte[] { 0, commandNibble, 0, 0 };
            RegisterCollection invCommand = new RegisterCollection(new byte[] { 0, commandByte, 0, 0 });
            CustomWriteMultipleRegistersRequest reqCommand = new CustomWriteMultipleRegistersRequest(16, 1, 15129, invCommand);

            master.ExecuteCustomMessage <CustomWriteMultipleRegistersResponse>(reqCommand);

            //Wait buffer is ready
            CustomReadHoldingRegistersResponse cmdReg;

            do
            {
                CustomReadHoldingRegistersRequest readCmd = new CustomReadHoldingRegistersRequest(3, 1, 15129, 1);
                cmdReg = master.ExecuteCustomMessage <CustomReadHoldingRegistersResponse>(readCmd);
                //Console.WriteLine(Convert.ToString(cmdReg.Data[1]));  ----Old command for console version----
            } while (cmdReg.Data[1] != 0);

            //Read buffer
            int             endIndex;
            int             CRIndex;
            DateTime        timeStamp;
            IFormatProvider dateFormat = new System.Globalization.CultureInfo("en-GB");

            for (ushort i = 0; i < 600; i++)
            {
                try  //send request to Omni for the current package
                {
                    CustomReadBufferRequest  reqBuffer = new CustomReadBufferRequest(65, 1, 9402, i);
                    CustomReadBufferResponse packet    = master.ExecuteCustomMessage <CustomReadBufferResponse>(reqBuffer);
                    //stop if find end of file
                    endIndex = packet.StrData.IndexOf(Convert.ToChar(26)); //get index of end of file if exists
                    if (endIndex != -1)                                    //if end of file was found
                    {
                        txt.Write(packet.StrData.Substring(0, endIndex));
                        break;
                    }

                    //stop if find time before yesterday at 17:00
                    try
                    {
                        CRIndex = packet.StrData.IndexOf(Convert.ToChar(13));//get index of carriage return to find date
                        if (getAlarms)
                        {
                            timeStamp = Convert.ToDateTime(packet.StrData.Substring(CRIndex + 1, 19), dateFormat);
                        }
                        else
                        {
                            timeStamp = Convert.ToDateTime(packet.StrData.Substring(CRIndex + 10, 18), dateFormat);
                        }

                        if (timeStamp < DateTime.Today.AddDays(-1).AddHours(17))
                        {
                            txt.Write(packet.StrData.Substring(0, CRIndex));
                            break;
                        }
                    }
                    catch { }
                    txt.Write(packet.StrData);
                    progress.Increment(1);
                }
                catch                                    //if request timeout, omni is refilling buffer
                {
                    System.Threading.Thread.Sleep(3000); //delay 3s
                    //Restart client connection
                    client.Close();
                    client = new TcpClient(OmniIP, 502);
                    client.ReceiveTimeout = 500;
                    master         = ModbusIpMaster.CreateIp(client);
                    progress.Value = 0;
                    i--;//decrement packet index to reapeat the request
                }
            }

            progress.Value = 63;
            txt.Close();

            client.Close();
        }