private bool InFieldSet(bool sendToDevice, bool addEvent, int objectId, int trakObjId) { bool isSended = true; bool isChanged = true; if (sendToDevice) { ushort status = 0; for (int i = 0; i < 3; i++) { isSended = _rModuleWrapper.ObjectSendWorkMode(out status, trakObjId); if (isSended) { break; } } bool isLamp = PakStatusWord.Instance(status).LampMode; if (isSended && isLamp) { isSended = _rModuleWrapper.ObjectGetStatus(out status, trakObjId); isLamp = (PakStatusWord.Instance(status).LampMode); } isChanged = isSended && !isLamp; } if (isChanged) { _dbWrapper.WriteObjectInFieldState(addEvent, objectId, false); } return(isChanged); }
void ReaderIn_OnSerialStringReaded(object sender, SerialReaderEventArgs e) { // 1. Проверка в БД на наличие var objectState = GetObjectRecValue(e.ReadedString); if (objectState.ObjectId == 0) { return; } // 2. Контроль логики "вход-выход" или только "вход" if (!objectState.InField && _twoReaders) { return; } // 3. Посылка команды в эфир bool isChanged = true; UInt16 status; if (objectState.InField) { isChanged = _rmWrapper.ObjectSendPassiveMode(out status, objectState.ActiveObjectId); } else { isChanged = _rmWrapper.ObjectSendWorkMode(out status, objectState.ActiveObjectId); isChanged = isChanged && !PakStatusWord.Instance(status).LampMode; } // 4. Запись в БД /*if (isChanged)*/ var isWrited = _dbWrapper.WriteObjectInFieldState(true, objectState.ObjectId, objectState.InField); // 3. Позиционирование и обновление данных на экране в списке if (isWrited) { _dbWrapper.RefreshDataSetAllTables(); if (objectState.InField) { InvokeOnObjectToLamp(new ObjectChangeStateEventArgs(objectState.ObjectId)); } else { InvokeOnObjectToWork(new ObjectChangeStateEventArgs(objectState.ObjectId)); } //TrackerViewRowChanged(); } }
private void InFieldChangeState() { if (TrackerView.SelectedRows.Count > 1) { if (MessageBox.Show("Выделено несколько строк! Изменения коснутся только одиного" + Environment.NewLine + "Продолжаем?", "Обратите внимание", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { return; } } var row = StaticMethods.GetCurrentDataRow(TrackerView); if (row == null) { return; } int objectId = Convert.ToInt32(row["ObjectId"]); int activeObjectId = objectId; if (!Convert.IsDBNull(row["_ActiveObjectId"])) { activeObjectId = Convert.ToInt32(row["_ActiveObjectId"]); } bool inField = Convert.ToBoolean(row["InField"]); bool connectPresent = !_isNoModem; bool addEvent = true; if (connectPresent) { UInt16 status; //Cursor = Cursors.WaitCursor; bool sended = _rModuleWrapper.ObjectGetStatus(out status, activeObjectId); //Cursor = Cursors.Default; var statusWord = new PakStatusWord(status); if (!inField && (!sended || statusWord.Error || statusWord.Charge < 9)) { var sb = new StringBuilder("Изменение режима НЕ ДОПУСТИМО по следующим причинам:"); sb.AppendLine(); if (!sended) { sb.AppendLine(" - нет связи с трекером"); } else { if (statusWord.Error) { sb.AppendLine(" - ошибка оборудования"); } if (statusWord.Charge < 9) { sb.AppendLine(" - низкий заряд батареи"); } } MessageBox.Show(sb.ToString(), "Изменение режима", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } addEvent = false; if (!sended) { if (!FormHelper.OperatorRiskAgree()) { return; } connectPresent = false; addEvent = true; } } //Cursor = Cursors.WaitCursor; var stateEventArg = new ObjectChangeStateEventArgs(objectId); bool isChanged; if (inField) { isChanged = InFieldUnSet(connectPresent, addEvent, objectId, activeObjectId); _logic.InvokeOnObjectToLamp(stateEventArg); } else { isChanged = InFieldSet(connectPresent, addEvent, objectId, activeObjectId); _logic.InvokeOnObjectToWork(stateEventArg); } //Cursor = Cursors.Default; if (isChanged) { _dbWrapper.RefreshDataSetAllTables(); TrackerViewRowChanged(); } }