public int writeConfFile(confFileFormate confRowData, string fileName)
        {
            int retCode = -1;

            if (fileName == "")
            {
                Console.WriteLine("Config file name can't be null");
                return(retCode);
            }
            try
            {
                StreamWriter confFile = new StreamWriter(fileName);

                // Write header to file
                confFile.Write("Comercial Reference" + ";" + confRowData.fileHeader.comRef + " \n");
                confFile.Write("Serial Number" + ";" + confRowData.fileHeader.serialNumber + " \n");
                confFile.Write("Controller FW Ver" + ";" + confRowData.fileHeader.kuFwVer + " \n");
                confFile.Write("Network FW Ver" + ";" + confRowData.fileHeader.kcFwVer + " \n");
                confFile.Write("Conf Data Len" + ";" + confRowData.fileHeader.confRegLen.ToString() + " \n");
                confFile.Write("CL Start Index" + ";" + confRowData.fileHeader.customStartIndex.ToString() + " \n");
                confFile.Write("CL Data Len" + ";" + confRowData.fileHeader.customRegLen.ToString() + " \n");
                for (int i = 0; i < confRowData.fileHeader.confRegLen; i++)
                {
                    confFile.Write(confRowData.fileData[i].regAdd.ToString() + ";" + confRowData.fileData[i].regVal.ToString() + " \n");
                }
                if (confRowData.fileHeader.confRegLen == confRowData.fileHeader.customStartIndex)
                {
                    int clLen = confRowData.fileData[confRowData.fileHeader.confRegLen].regVal;
                    for (int i = confRowData.fileHeader.customStartIndex; i < (clLen + confRowData.fileHeader.customStartIndex); i++)
                    {
                        confFile.Write(confRowData.fileData[i].regVal + " \n");
                    }
                }
                confFile.Close();
                retCode = 0;
            }
            catch (excepetion ex)
            {
                Console.WriteLine(ex.Message);
            }

            return(retCode);
        }
Пример #2
0
        private int startRestoreProcess(confFileFormate conf, string deviceIP)
        {
            int retCode = -1;

            modbusSlaveInfo sInfo = new modbusSlaveInfo();

            sInfo.slaveIPAdd = deviceIP;
            sInfo.slaveUid   = 1;
            sInfo.tcpPortId  = 502;
            mbAccess.setSlaveInfo(sInfo);
            ushort[] regVal = new ushort[1];
            /* enter in config mode before starting custom logic file access it is mandatory requirment */
            //if (comm.Read(ViewModelConstants.NodeNumber, 601, 1, ref regVal) == true)
            if (mbAccess.readModbusRegister(601, 1, regVal) == 0)
            {
                int isInConfigMode = regVal[0] & 0x0001;
                if (isInConfigMode == 0)
                {
                    regVal[0] |= 0x0001;
                    //if (comm.Write(ViewModelConstants.NodeNumber, 601, 1, regVal) == false)
                    if (mbAccess.writeModbusRegister(601, 1, regVal) != 0)
                    { /* resotre can't start without entring in config mode*/
                        MessageBox.Show("fail to enter in config mode");
                        return(retCode);
                    }
                }
            }

            if (restoreDeviceConfiguration(conf) == 0)
            {
                if (conf.fileHeader.customRegLen != 0)
                {
                    retCode = restoreCustomLogic(conf);
                }
            }



            return(retCode);
        }
 public ltmrConfigFileManager()
 {
     ltmrConfigFile = new confFileFormate[maxBackupFilesupported];
 }
Пример #4
0
        /* Read LTMR configuration including host configuration register and
         * custom logic file over Modbus serial line(HMI Port) */
        private void readLTMRConfiguration(deviceEntry dEntry)
        {
            ushort modbusStartAddress;
            ushort numberofRegister;

            byte[]          data     = new byte[512];
            UInt16[]        regVal   = new UInt16[120];
            int             index    = 0;
            confFileFormate confData = new confFileFormate();

            //Register Address 540-599, 600-699,800-898,1250-1269,3000-3087,3088-3119)
            confFileHeader bHeader = new confFileHeader();

            bHeader.comRef  = dEntry.comRef;
            bHeader.kcFwVer = dEntry.kcVer;
            bHeader.kuFwVer = dEntry.kuVer;

            modbusSlaveInfo sInfo = new modbusSlaveInfo();

            sInfo.slaveIPAdd = dEntry.deviceIP;
            sInfo.slaveUid   = 1;
            sInfo.tcpPortId  = 502;
            mbAccess.setSlaveInfo(sInfo);

            mbAccess.readModbusRegister(70, 5, regVal);

            bHeader.serialNumber = regVal[0].ToString() + regVal[1].ToString() + regVal[2].ToString() + regVal[3].ToString() + regVal[4].ToString();
            // confData.fileHeader = bHeader;
            confData.fileData = new confData[20480];

            modbusStartAddress = 540;
            numberofRegister   = 60;

            if (mbAccess.readModbusRegister(modbusStartAddress, numberofRegister, regVal) == 0)
            {
                for (int i = 0; i < numberofRegister; i++)
                {
                    confData.fileData[i].regAdd = (ushort)(modbusStartAddress + i);
                    confData.fileData[i].regVal = (ushort)(regVal[i]);
                }

                index = index + numberofRegister;
                modbusStartAddress = 600;
                numberofRegister   = 100;
                //if (comm.Read(ViewModelConstants.NodeNumber, modbusStartAddress, numberofRegister, ref data) == true)
                if (mbAccess.readModbusRegister(modbusStartAddress, numberofRegister, regVal) == 0)
                {
                    //confFile.Write("  Main Setting     " + " \n");
                    for (int i = 0; i < numberofRegister; i++)
                    {
                        confData.fileData[index + i].regAdd = (ushort)(modbusStartAddress + i);
                        confData.fileData[index + i].regVal = (ushort)(regVal[i]);
                    }

                    index = index + numberofRegister;
                    modbusStartAddress = 800;
                    numberofRegister   = 99;
                    //if (comm.Read(ViewModelConstants.NodeNumber, modbusStartAddress, numberofRegister, ref data) == true)
                    if (mbAccess.readModbusRegister(modbusStartAddress, numberofRegister, regVal) == 0)
                    {
                        for (int i = 0; i < numberofRegister; i++)
                        {
                            confData.fileData[index + i].regAdd = (ushort)(modbusStartAddress + i);
                            confData.fileData[index + i].regVal = (ushort)(regVal[i]);
                        }
                        index = index + numberofRegister;
                        modbusStartAddress = 1250;
                        numberofRegister   = 20;
                        //if (comm.Read(ViewModelConstants.NodeNumber, modbusStartAddress, numberofRegister, ref data) == true)
                        if (mbAccess.readModbusRegister(modbusStartAddress, numberofRegister, regVal) == 0)
                        {
                            for (int i = 0; i < numberofRegister; i++)
                            {
                                confData.fileData[index + i].regAdd = (ushort)(modbusStartAddress + i);
                                confData.fileData[index + i].regVal = (ushort)(regVal[i]);
                            }
                            index = index + numberofRegister;
                            modbusStartAddress = 3000;
                            numberofRegister   = 88;
                            // if (comm.Read(ViewModelConstants.NodeNumber, modbusStartAddress, numberofRegister, ref data) == true)
                            if (mbAccess.readModbusRegister(modbusStartAddress, numberofRegister, regVal) == 0)
                            {
                                for (int i = 0; i < numberofRegister; i++)
                                {
                                    confData.fileData[index + i].regAdd = (ushort)(modbusStartAddress + i);
                                    confData.fileData[index + i].regVal = (ushort)(regVal[i]);
                                }
                                index = index + numberofRegister;
                                modbusStartAddress = 3088;
                                numberofRegister   = 32;
                                // if (comm.Read(ViewModelConstants.NodeNumber, modbusStartAddress, numberofRegister, ref data) == true)
                                if (mbAccess.readModbusRegister(modbusStartAddress, numberofRegister, regVal) == 0)
                                {
                                    for (int i = 0; i < numberofRegister; i++)
                                    {
                                        confData.fileData[index + i].regAdd = (ushort)(modbusStartAddress + i);
                                        confData.fileData[index + i].regVal = (ushort)(regVal[i]);
                                    }
                                    index = index + numberofRegister;
                                }
                            }
                        }
                    }
                }
            }
            bHeader.confRegLen       = index;
            bHeader.customStartIndex = index;
            confData.fileHeader      = bHeader;

            /* check Operating mode before starting uploading custom logic file*/
            //((modbusStartAddress, numberofRegister, regVal) == 0)
            if (mbAccess.readModbusRegister(540, 1, regVal) == 0)
            {
                /* Custom logic file will present if Reg(540)>255 else no custom logic file hance ignore reading it*/
                if (regVal[0] > 255)
                {
                    bHeader.customRegLen = readLTMRLogicFile(ref confData);
                }
            }

            confData.fileHeader = bHeader;
            string confFileName = dEntry.deviceIP.Replace('.', '_');

            confFileName = confFileName + "_conf.csv";
            writeConfFile(confData, confFileName);
            //MessageBox.Show("backup Completed");
        }
Пример #5
0
        ///* read custom logic file from LTMR*/
        private int readLTMRLogicFile(ref confFileFormate confdata)
        {
            byte tokenId       = 0;
            int  pageId        = 0;
            int  wordRemain    = 0;
            int  logicFileSize = 0;

            UInt16[] regVal         = new UInt16[32];
            byte[]   data           = new byte[512];
            int      failCode       = 0;
            int      isInConfigMode = 0;
            int      startAdd       = confdata.fileHeader.customStartIndex;

            /* enter in config mode before starting custom logic file access it is mandatory requirment */
            //if (comm.Read(ViewModelConstants.NodeNumber, 601, 1, ref regVal) == true)
            if (mbAccess.readModbusRegister(601, 1, regVal) == 0)
            {
                isInConfigMode = regVal[0] & 0x0001;
                if (isInConfigMode == 0)
                {
                    regVal[0] |= 0x0001;
                    //if (comm.Write(ViewModelConstants.NodeNumber, 601, 1, regVal) == false)
                    if (mbAccess.writeModbusRegister(601, 1, regVal) == -1)
                    {
                        MessageBox.Show("logic File Back-up failed");
                        failCode = -1;
                    }
                }
            }
            else
            {
                failCode = -1;
            }
            /* get  the custom logic file size from device. which to be uploaded*/
            //if (comm.Read(ViewModelConstants.NodeNumber, 1203, 1, ref regVal) == true)
            if (mbAccess.readModbusRegister(1203, 1, regVal) == 0)
            {
                logicFileSize = regVal[0];
                wordRemain    = logicFileSize + 1;// 1 byte added for len of file
                if (logicFileSize > 0)
                {
                    /* get  the token to access the logic file available in device. */
                    //if (comm.Read(ViewModelConstants.NodeNumber, 1209, 1, ref regVal) == true)
                    if (mbAccess.readModbusRegister(1209, 1, regVal) == 0)
                    {
                        tokenId = (byte)(regVal[0] / 256); // taken is only MSB
                    }
                    else
                    {
                        failCode = -1;
                    }
                }
                else
                {
                    failCode = -1;
                    MessageBox.Show("Logic File Size is zero");
                }
            }
            if (tokenId > 0 && failCode == 0)
            {
                while (wordRemain > 0)
                {
                    /* Tell device to want access logical memory section (Custom logic) */
                    regVal[0] = 1;
                    //if (comm.Write(ViewModelConstants.NodeNumber, 1207, 1, regVal) == true)
                    if (mbAccess.writeModbusRegister(1207, 1, regVal) == 0)
                    {
                        /* Tell device the page number wants to read */
                        regVal[0] = (ushort)pageId;
                        //if (comm.Write(ViewModelConstants.NodeNumber, 1208, 1, regVal) == true)
                        if (mbAccess.writeModbusRegister(1208, 1, regVal) == 0)
                        {
                            int cmd = tokenId * 256; // token in MSB
                            cmd      += 1;           //read command
                            regVal[0] = (ushort)cmd;

                            /*Send command to device telling READ with provided token*/
                            //if (comm.Write(ViewModelConstants.NodeNumber, 1209, 1, regVal) == true)
                            if (mbAccess.writeModbusRegister(1209, 1, regVal) == 0)

                            {
                                int nReg = (wordRemain > 16) ? 16 : wordRemain;

                                /* read custom logic file of Max size 16 register/Word of asked pageId */
                                // if (comm.Read(ViewModelConstants.NodeNumber, 1210, (ushort)nReg, ref regVal) == true)
                                if (mbAccess.readModbusRegister(1210, (ushort)nReg, regVal) == 0)
                                {
                                    /* incereament tokenId by one every time for new request*/
                                    tokenId++;
                                    /* incereament pageId by Max Page size every time for new page request*/
                                    pageId     += 16;
                                    wordRemain -= nReg;
                                    /* dump this page in file and go for next pageId*/
                                    for (int i = 0; i < nReg; i++)
                                    {
                                        confdata.fileData[startAdd + i].regVal = regVal[i];
                                    }
                                    startAdd += nReg;
                                }
                                if (wordRemain <= 0)
                                {
                                    /* Release the token after uploading complete logic file */
                                    cmd       = tokenId * 256; // token in MSB
                                    cmd      += 5;             //release token command
                                    regVal[0] = (ushort)cmd;
                                    //if (comm.Write(ViewModelConstants.NodeNumber, 1209, 1, regVal) == true)
                                    if (mbAccess.writeModbusRegister(1209, 1, regVal) == 0)
                                    {
                                        //MessageBox.Show("Logical file backup successful ");
                                        Console.WriteLine("Logical file backup successful ");
                                    }
                                }
                            }
                            else
                            {
                                failCode = -1;
                            }
                        }
                        else
                        {
                            failCode = -1;
                        }
                    }
                    else
                    {
                        failCode = -1;
                    }
                }//while

                if (failCode == -1)
                {
                    MessageBox.Show("logical file Backup failed");
                }
            }

            /* Exit from config mode if enter in this fuction else nothing to do */
            if (isInConfigMode == 0)
            {
                //if (comm.Read(ViewModelConstants.NodeNumber, 601, 1, ref regVal) == true)
                if (mbAccess.readModbusRegister(601, 1, regVal) == 0)
                {
                    regVal[0] &= 0xFFFE;
                    //if (comm.Write(ViewModelConstants.NodeNumber, 601, 1, regVal) == false)
                    if (mbAccess.writeModbusRegister(601, 1, regVal) == -1)
                    {
                        MessageBox.Show("Failed to exit from config mode");
                    }
                }
            }
            return(logicFileSize);
        }
Пример #6
0
        private int restoreDeviceConfiguration(confFileFormate conf)
        {
            int retCode = -1;

            ushort [] reg601 = new ushort[1];
            int       i = 0, j = 0;

            ushort[] regVal = new ushort[100];

            for (i = 0; i < 60; i++)
            {
                regVal[j++] = conf.fileData[i].regVal;
            }
            if (mbAccess.writeModbusRegister(540, 60, regVal) != 0)
            {
                Console.WriteLine("faile to resoter 540 range ");
            }

            // skip 601
            regVal[0] = conf.fileData[i].regVal; //600
            reg601[0] = conf.fileData[i + 1].regVal;
            if (mbAccess.writeModbusRegister(600, 1, regVal) != 0)
            {
                Console.WriteLine("faile to resoter 600 ");
            }

            j = 0;
            for (i = 62; i < 160; i++)
            {
                regVal[j++] = conf.fileData[i].regVal;
            }
            if (mbAccess.writeModbusRegister(602, 98, regVal) != 0)
            {
                Console.WriteLine("faile to resoter 602 range ");
            }

            j = 0;
            for (i = 160; i < 259; i++)
            {
                regVal[j++] = conf.fileData[i].regVal;
            }
            //myClient.mbWrite(800, 99, regVal);
            if (mbAccess.writeModbusRegister(800, 99, regVal) != 0)
            {
                Console.WriteLine("faile to resoter 800 range ");
            }

            j = 0;
            for (i = 259; i < 279; i++)
            {
                regVal[j++] = conf.fileData[i].regVal;
            }
            //myClient.mbWrite(1200, 20, regVal);
            if (mbAccess.writeModbusRegister(1250, 20, regVal) != 0)
            {
                Console.WriteLine("faile to resoter 1200 range ");
            }

            j = 0;
            for (i = 279; i < 367; i++)
            {
                regVal[j++] = conf.fileData[i].regVal;
            }
            // myClient.mbWrite(3000, 88, regVal);
            if (mbAccess.writeModbusRegister(3000, 88, regVal) != 0)
            {
                Console.WriteLine("faile to resoter 3000 range ");
            }

            j = 0;
            for (i = 367; i < 399; i++)
            {
                regVal[j++] = conf.fileData[i].regVal;
            }
            // myClient.mbWrite(3088, 32, regVal);
            if (mbAccess.writeModbusRegister(3088, 32, regVal) != 0)
            {
                Console.WriteLine("faile to resoter 3088 range ");
            }
            //myClient.mbClose();
            if (mbAccess.writeModbusRegister(601, 1, reg601) != 0)
            {
                Console.WriteLine("faile to resoter 601 ");
            }
            retCode = 0;

            return(retCode);
        }
Пример #7
0
        private int restoreCustomLogic(confFileFormate conf)
        {
            int retCode = -1;

            int  tokenSize  = conf.fileHeader.customRegLen;
            byte tokenId    = 0;
            int  pageId     = 0;
            int  wordRemain = tokenSize;

            ushort[] clToken = new ushort[tokenSize];
            UInt16[] regVal  = new UInt16[32];

            for (int i = 0; i < tokenSize; i++)
            {
                clToken[i] = conf.fileData[i + conf.fileHeader.customStartIndex].regVal;
            }
            /* get  the token to access the logic file available in device. */
            //if (comm.Read(ViewModelConstants.NodeNumber, 1209, 1, ref regVal) == true)
            if (mbAccess.readModbusRegister(1209, 1, regVal) == 0)
            {
                tokenId = (byte)(regVal[0] / 256); // taken is only MSB
            }
            else
            {
                MessageBox.Show("fail to get valid token from device");
                return(retCode);
            }


            /*Check the size of downloading file should be less then the supported by device */
            if (mbAccess.readModbusRegister(1202, 1, regVal) == 0)
            {
                if (tokenSize > regVal[0])
                {   /* Action can't be completed as file size is larger than the supported */
                    MessageBox.Show("File size is larger then supported");
                    return(retCode);
                }
            }

            /* clear all windows register which has old data*/
            regVal[0]  = (UInt16)(tokenId << 8); // token
            regVal[0] += 4;                      //command clear all logic memory
            tokenId++;
            if (mbAccess.writeModbusRegister(1209, 1, regVal) != 0)
            {
                MessageBox.Show("Fail to clear Logic memory old data");
                return(retCode);
            }

            while (wordRemain > 0)
            {
                /* Tell device to want access logical memory section (Custom logic) */
                regVal[0] = 1;                             //1207
                /* Tell device the page number wants to read */
                regVal[1] = (ushort)pageId;                //1208
                /* send command to write data on window*/
                regVal[2] = (UInt16)((tokenId * 256) + 3); // token in MSB + Write command(3) inLSB
                int nReg = (wordRemain > 16) ? 16 : wordRemain;
                /* Write logic token of nReg in logic window */
                int j = 0;
                for (int i = 3; i < (3 + nReg); i++)
                {
                    regVal[i] = clToken[j + pageId];
                    j++;
                }
                //if (comm.Write(ViewModelConstants.NodeNumber, 1207, 1, regVal) == true)
                if (mbAccess.writeModbusRegister(1207, (UInt16)(3 + nReg), regVal) == 0)
                {
                    /* incereament tokenId by one every time for new request*/
                    tokenId++;
                    /* incereament pageId by Max Page size every time for new page request*/
                    pageId     += 16;
                    wordRemain -= nReg;
                    if (wordRemain <= 0)
                    {
                        retCode = 0;
                    }
                }
                else
                {
                    MessageBox.Show("fail to write data to window ");
                    break;
                }
            }//while

            /* to the final work of download */
            if (retCode == 0)
            {
                /* write the file size downloaded to device */
                regVal[0] = 1;                            // 1207
                regVal[1] = 0;                            //1208
                regVal[2] = (UInt16)((tokenId << 8) + 3); //1209
                regVal[3] = (UInt16)(tokenSize - 1);      //1210 keep 1 byte out
                tokenId++;
                if (mbAccess.writeModbusRegister(1207, 4, regVal) == 0)
                {
                    regVal[0] = (UInt16)((tokenId << 8) + 2); //1209 WRITE TO FRAM
                    mbAccess.writeModbusRegister(1209, 1, regVal);
                    tokenId++;
                    /* wait for a second to get data written over the Flash*/
                    System.Threading.Thread.Sleep(1000);
                    /* Release the token after uploading complete logic file */
                    regVal[0] = (UInt16)((tokenId << 8) + 5);
                    //if (comm.Write(ViewModelConstants.NodeNumber, 1209, 1, regVal) == true)
                    if (mbAccess.writeModbusRegister(1209, 1, regVal) == -1)
                    {
                        retCode = -1;
                    }
                }
            }

            return(retCode);
        }