Пример #1
0
        private void pingMeters(Object metersDt)
        {
            DataTable dt = (DataTable)metersDt;
            int       columnIndexFactory = 1;

            List <string> factoryNumbers = new List <string>();

            if (Vp.OpenPort())
            {
                for (int i = 1; i < dt.Rows.Count; i++)
                {
                    object oColLocalAddr = dt.Rows[i][0];
                    object oColFactory   = dt.Rows[i][columnIndexFactory];
                    //object oColResult = dt.Rows[i][columnIndexResult];

                    //check if already polled
                    if (bPollOnlyOffline && oColFactory != null && oColFactory.ToString() != "Нет связи")
                    {
                        continue;
                    }

                    Thread.Sleep(5);
                    Meter.ChangeMAddress(uint.Parse(oColLocalAddr.ToString()));
                    string tmpSerialNumber = "";

                    if (Meter.OpenLinkCanal() && Meter.ReadSerialNumber(ref tmpSerialNumber))
                    {
                        dt.Rows[i][columnIndexFactory] = tmpSerialNumber;

                        if (cbWithData.Checked)
                        {
                            byte[] mAnswBytes = new byte[1];

                            // перебираем тарифы
                            for (byte j = 0; j < 5; j++)
                            {
                                try
                                {
                                    // получим данные ток по T0
                                    if (Meter.ReadCurrentMeterageToTarif(j, ref mAnswBytes))
                                    {
                                        for (ushort k = 0; k < captions.Length; k++)
                                        {
                                            float val = -1f;
                                            Meter.GetValueFromMeterageToTarifAnswer(k, mAnswBytes, ref val);
                                            dt.Rows[i][colNames[k] + j] = val;
                                        }
                                    }
                                    else
                                    {
                                        dt.Rows[i][j * 4] = "Ошибка";
                                    }
                                }
                                catch (Exception ex)
                                {
                                    WriteToStatus(ex.ToString());
                                }

                                if (j == 0 && rbT0.Checked)
                                {
                                    break;
                                }
                            }
                        }
                    }
                    else
                    {
                        dt.Rows[i][columnIndexFactory] = "Нет связи";
                    }

                    Invoke(meterPinged);

                    if (bStopProcess)
                    {
                        bStopProcess = false;
                        break;
                    }
                }

                Vp.Close();
            }
            else
            {
                Invoke(portProblems);
            }

            Invoke(pollingEnd);
        }