private void read(DataItem aItem) { if (aItem.SegID < 0) { aItem.read(mClient); } else { if (mSegActual[aItem.SegID] == false) { int lResult = readSegment(aItem.SegID, aItem.mMemoryType, aItem.DB); if (lResult != 0) { reportError("Error reading data for group of Items: " + mClient.ErrorText(lResult)); return; } mSegActual[aItem.SegID] = true; } if (mSegActual[aItem.SegID]) { var lValue = new byte[aItem.SegLength]; int lIndex = aItem.SegAddress - mSegStart[aItem.SegID]; if (aItem.DataType == EWordlen.S7_Bit) { if ((mSegBuffer[aItem.SegID][lIndex] & (1 << aItem.Bit)) != 0) { lValue[0] = 1; } else { lValue[0] = 0; } } else { Array.Copy(mSegBuffer[aItem.SegID], lIndex, lValue, 0, lValue.Length); } aItem.setValueFromPLC(lValue); } } }
private void read(DataItem aItem) { if (aItem.mGroup == 0) { aItem.read(mClient); } else { GroupDescriptor lGroupDsc = mGroups[aItem.mGroup - 1]; if (lGroupDsc.mActual == false) { int lResult = mClient.ReadArea((int)aItem.mMemoryType, aItem.DB, lGroupDsc.mStart, lGroupDsc.mBuffer.Length, (int)EWordlen.S7_Byte, lGroupDsc.mBuffer); if (lResult != 0) { reportError("Error reading data for group of Items: " + mClient.ErrorText(lResult)); return; } lGroupDsc.mActual = true; } byte[] lValue = new byte[aItem.BufferLength]; int lIndex = aItem.Byte - lGroupDsc.mStart; if (aItem.DataType == EWordlen.S7_Bit) { if ((lGroupDsc.mBuffer[lIndex] & (1 << aItem.Bit)) != 0) { lValue[0] = 1; } else { lValue[0] = 0; } } else { Array.Copy(lGroupDsc.mBuffer, lIndex, lValue, 0, lValue.Length); } aItem.setValueFromPLC(lValue); } }