TG-PlatformPlus/UserScripts/read_memory.py

392 lines
24 KiB
Python

from datetime import datetime
import os, time, csv, struct
from user_common import decompressBySection
def imageToCsvForSOAGK(imageFilePath, csvFilePath, disk, memoryParams):
diskNum = disk
try:
recordLength = int(memoryParams[f"Disk{disk}"]['RecordLength'])
with open(imageFilePath, "rb") as fi:
fi.read(12) #读取image文件开头的12个字节
with open(csvFilePath, "w") as fo:
if diskNum == 0:
titleStr = 'DateTime, PGRAm, PGRBm, PGRCm, PGRUm, PGRDm, PGRLm, PGRRm, AGRM_CountAm, AGRM_CountBm, '
titleStr += 'CounterSector0, TimerSector0, CounterSector1, TimerSector1, CounterSector2, TimerSector2, '
titleStr += 'CounterSector3, TimerSector3, CounterSector4, TimerSector4, CounterSector5, TimerSector5, '
titleStr += 'CounterSector6, TimerSector6, CounterSector7, TimerSector7, SFlag\n'
fo.write(titleStr)
while(1):
dataBuf = fi.read(recordLength)
if len(dataBuf) == recordLength:
data = struct.unpack('>2H', dataBuf[:4])
tempStr = f"{datetime.fromtimestamp(data[1] * 65536 + data[0]).strftime('%Y-%m-%d %H:%M:%S')}"
dataBuf = dataBuf[4:]
tempBuf = bytearray()
for i in range(int(len(dataBuf)/2)):
tempBuf.append(dataBuf[2*i+1])
tempBuf.append(dataBuf[2*i])
data = struct.unpack('<7B18HB', tempBuf[0:44])
for i in range(0, len(data)):
if i < 7:
tempStr += f", {decompressBySection(data[i])}"
else:
tempStr += f", {data[i]}"
fo.write(f"{tempStr}\n")
else:
break
elif diskNum == 1:
fo.write(f'DateTime, gyro_RMM_AD, vibr_X_AD, vibr_Y_AD, vibr_Z_AD\n')
while(1):
dataBuf = fi.read(256*28) #每条记录长度32字节
if len(dataBuf) == 256*28:
timeStamp, = struct.unpack('>I', dataBuf[0:4])
gyro_RPM_AD = struct.unpack('>500H', dataBuf[4:1004])
vibr_X_AD = struct.unpack('>1000H', dataBuf[1024:3024])
vibr_Y_AD = struct.unpack('>1000H', dataBuf[3072:5072])
vibr_Z_AD = struct.unpack('>1000H', dataBuf[5120:7120])
for k in range(1000):
#fo.write(f"{datetime.fromtimestamp(timeStamp+0.001*k).strftime('%Y-%m-%d %H:%M:%S')}.{k%1000:03}, {gyro_RPM_AD[k//2]}, {gyro_RPM[k//2]}, {vibr_X_AD[k]}, {vibr_X}, {vibr_Y_AD[k]}, {vibr_Y}, {vibr_Z_AD[k]}, {vibr_Z}\n")
#fo.write(f"{datetime.fromtimestamp(timeStamp).strftime('%Y-%m-%d %H:%M:%S')}.{k%1000:03}, {gyro_RPM_AD[k//2]}, {vibr_X_AD[k]}, {vibr_Y_AD[k]}, {vibr_Z_AD[k]}\n")
fo.write(f"{datetime.fromtimestamp(timeStamp).strftime('%Y-%m-%d %H:%M:%S')}, {gyro_RPM_AD[k//2]}, {vibr_X_AD[k]}, {vibr_Y_AD[k]}, {vibr_Z_AD[k]}\n")
else:
break
fo.close()
fi.close()
except Exception as e:
raise Exception(f"Error in imageToCsvForSOAGK(). {str(e)}")
def imageToCsvForAGR(imageFilePath, csvFilePath, disk, memoryParams):
diskNum = disk
try:
recordLength = int(memoryParams[f"Disk{disk}"]['RecordLength'])
with open(imageFilePath, "rb") as fi:
fi.read(12)
with open(csvFilePath, "w") as fo:
if diskNum == 0:
titleStr = 'DateTime, PGRAm, PGRBm, PGRCm, PGRUm, PGRDm, PGRLm, PGRRm, AGRM_CountAm, AGRM_CountBm, '
titleStr += 'CounterSector0, TimerSector0, CounterSector1, TimerSector1, CounterSector2, TimerSector2, '
titleStr += 'CounterSector3, TimerSector3, CounterSector4, TimerSector4, CounterSector5, TimerSector5, '
titleStr += 'CounterSector6, TimerSector6, CounterSector7, TimerSector7, SFlag\n'
fo.write(titleStr)
while(1):
dataBuf = fi.read(recordLength)
if len(dataBuf) == recordLength:
data = struct.unpack('>2H', dataBuf[:4])
tempStr = f"{datetime.fromtimestamp(data[0] * 65536 + data[1]).strftime('%Y-%m-%d %H:%M:%S')}"
dataBuf = dataBuf[4:]
data = struct.unpack('>7B18HB', dataBuf[0:44])
for i in range(0, len(data)):
if i < 7:
tempStr += f", {decompressBySection(data[i])}"
else:
tempStr += f", {data[i]}"
fo.write(f"{tempStr}\n")
else:
break
fo.close()
fi.close()
except Exception as e:
raise Exception(f"Error in imageToCsvForAGR(). {str(e)}")
def imageToCsvForDSM(imageFilePath, csvFilePath, disk, memoryParams):
diskNum = disk
try:
recordLength = int(memoryParams[f"Disk{diskNum}"]['RecordLength'])
with open(imageFilePath, "rb") as fi:
fi.read(12)
with open(csvFilePath, "w") as fo:
if diskNum == 0:
fo.write("DateTime, DMBM_DataIDm, DMBM_BootTimesm, DMBM_Statem, DMBM_TBusCurrentm, DMBM_TBusVoltagem, DMBM_BatCurrentm, DMBM_Capacitym, DMBM_BatVoltagem, DMBM_MudTempm\n")
while(1):
dataBuf = fi.read(recordLength)
if len(dataBuf) == recordLength:
data = struct.unpack('>I2BH6f', dataBuf)
fo.write(f"{datetime.fromtimestamp(data[0]).strftime('%Y-%m-%d %H:%M:%S')}, {data[1]}, {data[2]}, {data[3]}, {data[4]:2f}, {data[5]:2f}, {data[6]:2f}, {data[7]:2f}, {data[8]:2f}, {data[9]:2f}\n")
else:
break
if diskNum == 1:
fo.write("DateTime, DMBM_FlagABCm, DMBM_ABCStatusm, DMBM_ABCStatus_Parsem, DMBM_DSMStatusm, DMBM_FlagUSDCm, DMBM_FlagVSTm, DMBM_FlagDMBR0m, DMBM_FlagACPRm, DMBM_FlagAGRm, DMBM_CPSCm, DMBM_FlagDIM2m, DMBM_DIM2Statusm, DMBM_FlagSFUm, DMBM_SFUStatusm, DMBM_CDLm, DMBM_TGCECHOm, DMBM_FlagINPm, DMBM_FlagLDIm, DMBM_FlagWAGRm, DMBM_FlagNBIGm, DMBM_FlagMASTm, DMBM_FlagDARTm, DMBM_FlagIFPTm, DMBM_FlagDWPRm\n")
while(1):
dataBuf = fi.read(recordLength)
if len(dataBuf) == recordLength:
data = struct.unpack('>I2B2H20B', dataBuf[:30])
tempStr = f"{datetime.fromtimestamp(data[0]).strftime('%Y-%m-%d %H:%M:%S')}"
for i in range(1, len(data)):
tempStr += f", {data[i]}"
fo.write(f"{tempStr}\n")
else:
break
if diskNum == 2:
fo.write("DateTime, DPM_Borem, DPM_Annularm, DPM_BoreTempm, DPM_AnnularTempm\n")
while(1):
dataBuf = fi.read(recordLength)
if len(dataBuf) == recordLength:
data = struct.unpack('>IB12H2B', dataBuf[:31])
for i in range(6):
tempStr = f"{datetime.fromtimestamp(data[0]+6*i).strftime('%Y-%m-%d %H:%M:%S')}"
# tempStr += f", {data[1]}"
tempStr += f", {data[i*2+2]}"
tempStr += f", {data[i*2+1+2]}"
tempStr += f", {data[14]}, {data[15]}"
fo.write(f"{tempStr}\n")
else:
break
fo.close()
fi.close()
except Exception as e:
raise Exception(f"Error in imageToCsvForDSM(). {str(e)}")
def imageToCsvForDCM(imageFilePath, csvFilePath, disk, memoryParams):
diskNum = disk
try:
recordLength = int(memoryParams[f"Disk{diskNum}"]['RecordLength'])
with open(imageFilePath, "rb") as fi:
fi.read(12)
with open(csvFilePath, "w") as fo:
if diskNum == 1:
fo.write("DateTime, datawidth, DL_state, ErrorFlg, instrCmd, instrData, status, highlevel, lowlevel, timer, bin, RPM\n")
while(1):
dataBuf = fi.read(recordLength)
if len(dataBuf) == recordLength:
data = struct.unpack('>I4BH6B', dataBuf[0:16])
fo.write(f"{datetime.fromtimestamp(data[0]).strftime('%Y-%m-%d %H:%M:%S')}, {data[1]}, {data[2]}, {data[3]}, {data[4]}, {data[5]}, {data[6]}, {data[7]}, {data[8]}, {data[9]}, {data[10]}, {data[11]}\n")
else:
break
if diskNum == 0:
fo.write("DateTime, DCMM_DataID, DCMM_BootCount, DCMM_SysState, DCMM_BusUpCurrent, DCMM_BusVoltage, DCMM_Temperature, DCMM_MotorVoltage, DCMM_BusDownCurrent, DCMM_BatteryVoltage\n")
while(1):
dataBuf = fi.read(recordLength)
if len(dataBuf) == recordLength:
data = struct.unpack('>I2BH6f', dataBuf[:32])
tempStr = f"{datetime.fromtimestamp(data[0]).strftime('%Y-%m-%d %H:%M:%S')}"
for i in range(1, len(data)):
tempStr += f", {data[i]}"
fo.write(f"{tempStr}\n")
else:
break
if diskNum == 2:
fo.write("DateTime, DPM_Borem, DPM_Annularm, DPM_BoreTempm, DPM_AnnularTempm\n")
while(1):
dataBuf = fi.read(recordLength)
if len(dataBuf) == recordLength:
data = struct.unpack('>IB12H2B', dataBuf[:31])
for i in range(6):
tempStr = f"{datetime.fromtimestamp(data[0]+6*i).strftime('%Y-%m-%d %H:%M:%S')}"
# tempStr += f", {data[1]}"
tempStr += f", {data[i*2+2]}"
tempStr += f", {data[i*2+1+2]}"
tempStr += f", {data[14]}, {data[15]}"
fo.write(f"{tempStr}\n")
else:
break
fo.close()
fi.close()
except Exception as e:
raise Exception(f"Error in imageToCsvForDSM(). {str(e)}")
def imageToCsvForDCM_T(imageFilePath, csvFilePath, disk, memoryParams):
diskNum = disk
try:
recordLength = int(memoryParams[f"Disk{disk}"]['RecordLength'])
with open(imageFilePath, "rb") as fi:
fi.read(12)
with open(csvFilePath, "w") as fo:
if diskNum == 0:
titleStr = 'DateTime, DCM_BootTimesm, DCM_Statem, 3V6_VOLT_AD, 3V3OUT_VOLT_AD, TBus_Up_VOLT_AD, TBus_Down_VOLT_AD, '
titleStr += '90V_VOLT_AD, TBus_Up_CURR_AD, TBus_Down_CURR_AD, 48V_VOLT_AD, RPM, BOAT_TEMP\n '
fo.write(titleStr)
while(1):
dataBuf = fi.read(recordLength)
if len(dataBuf) == recordLength:
data = struct.unpack('>2H', dataBuf[:4])
tempStr = f"{datetime.fromtimestamp(data[1] * 65536 + data[0]).strftime('%Y-%m-%d %H:%M:%S')}"
tempBuf = dataBuf[4:]
data = struct.unpack('<11Hf', tempBuf[0:26])
for i in range(0, len(data)):
tempStr += f", {data[i]}"
fo.write(f"{tempStr}\n")
else:
break
fo.close()
fi.close()
except Exception as e:
raise Exception(f"Error in imageToCsvForDCM(). {str(e)}")
def imageToCsvForPCM(imageFilePath, csvFilePath, disk, memoryParams):
diskNum = disk
try:
recordLength = int(memoryParams[f"Disk{diskNum}"]['RecordLength'])
with open(imageFilePath, "rb") as fi:
fi.read(12)
with open(csvFilePath, "w") as fo:
if diskNum == 0:
fo.write("DateTime, DMBM_DataIDm, DMBM_BootTimesm, DMBM_Statem, DMBM_TBusCurrentm, DMBM_TBusVoltagem, DMBM_BatCurrentm, DMBM_Capacitym, DMBM_BatVoltagem, DMBM_MudTempm\n")
while(1):
dataBuf = fi.read(recordLength)
if len(dataBuf) == recordLength:
data = struct.unpack('>I2BH6f', dataBuf)
fo.write(f"{datetime.fromtimestamp(data[0]).strftime('%Y-%m-%d %H:%M:%S')}, {data[1]}, {data[2]}, {data[3]}, {data[4]:2f}, {data[5]:2f}, {data[6]:2f}, {data[7]:2f}, {data[8]:2f}, {data[9]:2f}\n")
else:
break
if diskNum == 1:
fo.write("DateTime, DMBM_FlagABCm, DMBM_ABCStatusm, DMBM_ABCStatus_Parsem, DMBM_DSMStatusm, DMBM_FlagUSDCm, DMBM_FlagVSTm, DMBM_FlagDMBR0m, DMBM_FlagACPRm, DMBM_FlagAGRm, DMBM_CPSCm, DMBM_FlagDIM2m, DMBM_DIM2Statusm, DMBM_FlagSFUm, DMBM_SFUStatusm, DMBM_CDLm, DMBM_TGCECHOm, DMBM_FlagINPm, DMBM_FlagLDIm, DMBM_FlagWAGRm, DMBM_FlagNBIGm, DMBM_FlagMASTm, DMBM_FlagDARTm, DMBM_FlagIFPTm, DMBM_FlagDWPRm\n")
while(1):
dataBuf = fi.read(recordLength)
if len(dataBuf) == recordLength:
data = struct.unpack('>I2B2H20B', dataBuf[:30])
tempStr = f"{datetime.fromtimestamp(data[0]).strftime('%Y-%m-%d %H:%M:%S')}"
for i in range(1, len(data)):
tempStr += f", {data[i]}"
fo.write(f"{tempStr}\n")
else:
break
if diskNum == 2:
fo.write("DateTime, DPM_Borem, DPM_Annularm, DPM_BoreTempm, DPM_AnnularTempm\n")
while(1):
dataBuf = fi.read(recordLength)
if len(dataBuf) == recordLength:
data = struct.unpack('>IB12H2B', dataBuf[:31])
for i in range(6):
tempStr = f"{datetime.fromtimestamp(data[0]+6*i).strftime('%Y-%m-%d %H:%M:%S')}"
# tempStr += f", {data[1]}"
tempStr += f", {data[i*2+2]}"
tempStr += f", {data[i*2+1+2]}"
tempStr += f", {data[14]}, {data[15]}"
fo.write(f"{tempStr}\n")
else:
break
fo.close()
fi.close()
except Exception as e:
raise Exception(f"Error in imageToCsvForPCM(). {str(e)}")
def imageToCsvForPMB(imageFilePath, csvFilePath, disk, memoryParams):
diskNum = disk
try:
recordLength = int(memoryParams[f"Disk{diskNum}"]['RecordLength'])
with open(imageFilePath, "rb") as fi:
fi.read(12)
with open(csvFilePath, "w") as fo:
if diskNum == 0:
fo.write("DateTime, PMB_BootTimesm, PMB_Statem, PMB_AnnularTemp, PMB_AnnularAD, PMB_AnnularPressure, PMB_BoreTemp, PMB_BoreAD, PMB_BorePressure, PMB_Temperature\n")
while(1):
dataBuf = fi.read(recordLength)
if len(dataBuf) == recordLength:
data = struct.unpack('>I2HfHffHfh', dataBuf[0:30])
fo.write(f"{datetime.fromtimestamp(data[0]).strftime('%Y-%m-%d %H:%M:%S')}, {data[1]}, {data[2]}, {data[3]:2f}, {data[4]}, {data[5]:2f}, {data[6]:2f}, {data[7]}, {data[8]:2f}, {data[9]}\n")
else:
break
if diskNum == 1:
fo.write("DateTime, PMB_AnnularAD, PMB_BoreAD, PMB_AnnularTemp, PMB_BoreTemp\n")
while(1):
dataBuf = fi.read(recordLength)
if len(dataBuf) == recordLength:
data = struct.unpack('>I120H2H', dataBuf[:248])
timeStamp = f"{datetime.fromtimestamp(data[0]).strftime('%Y-%m-%d %H:%M:%S')}"
for i in range(0, 60):
tempStr = f"{timeStamp}, {data[2*i+1]}, {data[2*i+1+1]}, {data[121]}, {data[122]}"
fo.write(f"{tempStr}\n")
else:
break
fo.close()
fi.close()
except Exception as e:
raise Exception(f"Error in imageToCsvForPMB(). {str(e)}")
def imageToCsvForNBMM(imageFilePath, csvFilePath, disk, memoryParams):
diskNum = disk
try:
recordLength = int(memoryParams[f"Disk{diskNum}"]['RecordLength'])
with open(imageFilePath, "rb") as fi:
fi.read(12)
with open(csvFilePath, "w") as fo:
if diskNum == 0:
fo.write("DateTime, NBMM_BootTimesm, NBMM_Statem, NBMM_MudPressurem, NBMM_MudPressureTempm, NBMM_DrillPressurem, NBMM_Torquem, NBMM_BendingXm, NBMM_BendingYm, NBMM_ViberTempm, NBMM_RMS_XYm, NBMM_RMS_Zm, NBMM_ShockLXYm, NBMM_ShockLZm, NBMM_SSm, NBMM_MaxRMS_XY, NBMM_AveRMS_XY, NBMM_MaxRMS_Z, NBMM_AveRMS_Z, NBMM_ShockCX, NBMM_ShockCY, NBMM_ShockCZ, NBMM_MaxRPM, NBMM_MinRPM, NBMM_AveRPM\n")
while(1):
dataBuf = fi.read(recordLength)
if len(dataBuf) == recordLength:
data = struct.unpack('>I24H', dataBuf[:52])
tempStr = f"{datetime.fromtimestamp(data[0]).strftime('%Y-%m-%d %H:%M:%S')}"
for i in range(1, 4):
tempStr += f", {data[i]}"
tempStr += f", {data[4]/100:2f}, {data[5]/10-750:1f}, {data[6]/10-80:1f}, {data[7]/10-220:1f}, {data[8]/10-220:1f}"
for i in range(9, 22):
tempStr += f", {data[i]}"
tempStr += f", {data[22]/10:1f}, {data[23]/10:1f}, {data[24]/10:1f}"
fo.write(f"{tempStr}\n")
else:
break
if diskNum == 1:
fo.write("DateTime, NBMM_MudPressureAD, NBMM_MudPressureTempAD, NBMM_DrillPressureAD, NBMM_TorqueAD, NBMM_BendingXAD, NBMM_BendingYAD\n")
while(1):
dataBuf = fi.read(recordLength)
if len(dataBuf) == recordLength:
data = struct.unpack('>I300H', dataBuf[:604])
timeStamp = f"{datetime.fromtimestamp(data[0]).strftime('%Y-%m-%d %H:%M:%S')}"
for i in range(50):
tempStr = ''
tempStr += f"{timeStamp}, {data[1+i*6]}, {data[2+i*6]}, {data[3+i*6]}, {data[4+i*6]}, {data[5+i*6]}, {data[6+i*6]}"
fo.write(f"{tempStr}\n")
else:
break
if diskNum == 2:
fo.write("DateTime, NBMM_GyroAD, NBMM_ViberXAD, NBMM_ViberYAD, NBMM_ViberZAD\n")
while(1):
dataBuf = fi.read(recordLength)
if len(dataBuf) == recordLength:
data, = struct.unpack('>I', dataBuf[:4])
timeStamp = f"{datetime.fromtimestamp(data).strftime('%Y-%m-%d %H:%M:%S')}"
gyroData = struct.unpack('>500H', dataBuf[4:1004])
viberXData = struct.unpack('>1000H', dataBuf[1024:3024])
viberYData = struct.unpack('>1000H', dataBuf[3072:5072])
viberZData = struct.unpack('>1000H', dataBuf[5120:7120])
for i in range(1000):
tempStr = ''
tempStr += f"{timeStamp}, {gyroData[i//2]}, {viberXData[i]}, {viberYData[i]}, {viberZData[i]}"
fo.write(f"{tempStr}\n")
else:
break
fo.close()
fi.close()
except Exception as e:
raise Exception(f"Error in imageToCsvForNBMM(). {str(e)}")
def imageToCsvForWBTM(imageFilePath, csvFilePath, disk, memoryParams):
diskNum = disk
try:
recordLength = int(memoryParams[f"Disk{diskNum}"]['RecordLength'])
with open(imageFilePath, "rb") as fi:
fi.read(12)
with open(csvFilePath, "w") as fo:
if diskNum == 0:
fo.write("DateTime, WBTM_BootTimesm, WBTM_Statem, WBTM_AnnularPressurem, WBTM_BorePressurem, WBTM_AnnularTempm, WBTM_BoreTempm, WBTM_DrillPressurem, WBTM_Torquem, WBTM_BendingXm, WBTM_BendingYm, WBTM_Temperaturem\n")
while(1):
dataBuf = fi.read(recordLength)
if len(dataBuf) == recordLength:
data = struct.unpack('>I4H7h', dataBuf[:26])
tempStr = f"{datetime.fromtimestamp(data[0]).strftime('%Y-%m-%d %H:%M:%S')}"
for i in range(1, 5):
tempStr += f", {data[i]}"
tempStr += f", {data[5]/100:2f}, {data[6]/100:2f}, {data[7]/100-750:1f}, {data[8]/100-80:1f}, {data[9]/100-220:1f}, {data[10]/100-220:1f}, {data[11]/100:2f}"
fo.write(f"{tempStr}\n")
else:
break
if diskNum == 1:
fo.write("DateTime, WBTM_EventType, WBTM_EventData_AnnularPressure, WBTM_EventData_BorePressure, WBTM_EventData_AnnularTemp, NBMM_EventData_BendingXAD, WBTM_EventData_BoreTemp, WBTM_EventData_DrillPressure, WBTM_EventData_Torque, WBTM_EventData_BendingX, WBTM_EventData_BendingY, WBTM_AnnularPressure_AD_Min, WBTM_AnnularPressure_AD_Max, WBTM_BorePressure_AD_Min, WBTM_BorePressure_AD_Max, WBTM_AnnularTemp_AD_Min, WBTM_AnnularTemp_AD_Max, WBTM_BoreTemp_AD_Min, WBTM_BoreTemp_AD_Max, WBTM_DrillPressure_AD_Min, WBTM_DrillPressure_AD_Max, WBTM_Torque_AD_Min, WBTM_Torque_AD_Max, WBTM_BendingX_AD_Min, WBTM_BendingX_AD_Max, WBTM_BendingY_AD_Min, WBTM_BendingY_AD_Maxs\n")
while(1):
dataBuf = fi.read(recordLength)
if len(dataBuf) == recordLength:
data = struct.unpack('>I3H7h', dataBuf[:24])
tempStr = f"{datetime.fromtimestamp(data[0]).strftime('%Y-%m-%d %H:%M:%S')}"
for i in range(1, 4):
tempStr += f", {data[i]}"
tempStr += f", {data[4]/100:2f}, {data[5]/100:2f}, {data[6]/100-750:1f}, {data[7]/100-80:1f}, {data[8]/100-220:1f}, {data[9]/100-220:1f}, {data[10]/100:2f}"
data = struct.unpack('400H', dataBuf[24:824])
tempStr += f", {min(data[0:50])}, {max(data[0:50])}, {min(data[50:100])}, {max(data[50:100])}, {min(data[100:150])}, {max(data[100:150])}, {min(data[150:200])}, {max(data[150:200])}, {min(data[200:250])}, {max(data[200:250])}, {min(data[250:300])}, {max(data[250:300])}, {min(data[300:350])}, {max(data[300:350])}, {min(data[350:400])}, {max(data[350:400])}"
fo.write(f"{tempStr}\n")
else:
break
fo.close()
fi.close()
except Exception as e:
raise Exception(f"Error in imageToCsvForWBTM(). {str(e)}")