TG-PlatformPlus/UserScripts/read_memory.py

658 lines
45 KiB
Python

from datetime import datetime
import os, time, csv, struct
from user_common import decompressBySection
def imageToCsvForVSM(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, VSM_TEMPm, VSM_XY_Shockm, VSM_RMSXYm, VSM_Z_Shockm, VSM_RMSZm, VSM_SSm, '
titleStr += 'VSM_XY_MAX_RMSm_AD, VSM_XY_AVG_RMSm_AD, VSM_Z_MAX_RMSm_AD, VSM_Z_AVG_RMSm_AD, '
titleStr += 'VSM_RPM_AVGm, VSM_RPM_MAXm, VSM_RPM_MINm, VSM_BootCountm\n'
fo.write(titleStr)
while(1):
dataBuf = fi.read(recordLength)
if len(dataBuf) == recordLength:
data = struct.unpack('>IH3B7HB', dataBuf[:24])
tempStr = f"{datetime.fromtimestamp(data[0]).strftime('%Y-%m-%d %H:%M:%S')}"
for i in range(1, len(data)):
if i == 2 or i == 3:
tempStr += f", {(data[i]&0xF0)>>4}, {(data[i]&0x0F)}"
else:
tempStr += f", {data[i]}"
fo.write(f"{tempStr}\n")
else:
break
elif diskNum == 1:
titleStr = 'DateTime, gyro_RMM_AD, vibr_X_AD, vibr_Y_AD, vibr_Z_AD\n'
fo.write(titleStr)
while(1):
dataBuf = fi.read(recordLength)
if len(dataBuf) == recordLength:
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")
pass
else:
break
fo.close()
fi.close()
except Exception as e:
raise Exception(f"Error in imageToCsvForVSM(). {str(e)}")
def imageToCsvForVSM_HT(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, VSM_TEMPm, VSM_RMSXYm, VSM_RMSZm, VSM_XY_Shockm, VSM_Z_Shockm, VSM_SSm, '
titleStr += 'VSM_XY_MAX_RMSm_AD, VSM_XY_AVG_RMSm_AD, VSM_Z_MAX_RMSm_AD, VSM_Z_AVG_RMSm_AD, '
titleStr += 'VSM_X_SHOCK_CPSm, VSM_Y_SHOCK_CPSm, VSM_Z_SHOCK_CPSm, VSM_RPM_MAXm, VSM_RPM_MINm, '
titleStr += 'VSM_RPM_AVGm, VSM_BootCountm\n'
fo.write(titleStr)
while(1):
dataBuf = fi.read(recordLength)
if len(dataBuf) == recordLength:
data = struct.unpack('>IH5B4H3B3hB', dataBuf[:29])
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
elif diskNum == 1:
titleStr = 'DateTime, gyro_RMM_AD, vibr_X_AD, vibr_Y_AD, vibr_Z_AD\n'
fo.write(titleStr)
while(1):
dataBuf = fi.read(recordLength)
if len(dataBuf) == recordLength:
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")
pass
else:
break
fo.close()
fi.close()
except Exception as e:
raise Exception(f"Error in imageToCsvForVSM_HT(). {str(e)}")
def imageToCsvForDMG(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, BootCount, PGRAm, PGRUm, PGRDm, PGRLm, PGRRm, AGRM_CountAm, '
titleStr += 'CounterSector0, TimerSector0, CounterSector1, TimerSector1, CounterSector2, TimerSector2, '
titleStr += 'CounterSector3, TimerSector3, CounterSector4, TimerSector4, CounterSector5, TimerSector5, '
titleStr += 'CounterSector6, TimerSector6, CounterSector7, TimerSector7, '
titleStr += 'RPM, INC, GX, GY, GZ, MX, MY, MZ, Bat_Cap, Bat_Cur\n'
fo.write(titleStr)
while(1):
dataBuf = fi.read(recordLength)
if len(dataBuf) == recordLength:
data, = struct.unpack('>I', dataBuf[:4])
tempStr = f"{datetime.fromtimestamp(data).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('>6B27H', dataBuf[0:60])
for i in range(0, len(data)):
if i < 1:
tempStr += f", {(data[i])}"
elif i < 7:
tempStr += f", {decompressBySection(data[i])}"
elif i < 24:
tempStr += f", {(data[i])}"
elif i < 25:
tempStr += f", {(data[i]/100.0-100)}"
elif i < 26:
tempStr += f", {(data[i]/100.0)}"
elif i < 32:
tempStr += f", {(data[i]/10000.0-2)}"
elif i < 33:
tempStr += f", {(data[i]/100.0)}"
else:
tempStr += f", {data[i]}"
fo.write(f"{tempStr}\n")
else:
break
elif diskNum == 1:
titleStr = 'DateTime, BootCount, StatusWord, MeasurmentWord, RPM, AZI, INC, GTF, MTF, GT, MT, DIP, Temperature,'
titleStr += 'GX, GY, GZ, MX, MY, MZ, PGRAm, PGRBm, PGRCm, PGRUm, PGRDm, PGRLm, PGRRm\n'
fo.write(titleStr)
while(1):
dataBuf = fi.read(recordLength)
if len(dataBuf) == recordLength:
data, = struct.unpack('>I', dataBuf[0:4])
tempStr = f"{datetime.fromtimestamp(data).strftime('%Y-%m-%d %H:%M:%S')}"
dataBuf = dataBuf[4:]
data = struct.unpack('>25H', dataBuf[0:50])
tempStr += f", {data[0]}, {data[1]}, {data[2]}, {data[3]/100.0-100}, {data[4]/100.0}, {data[5]/100.0}, {data[6]/100.0}, {data[7]/100.0}"
tempStr += f", {data[8]/10000.0}, {data[9]/10000.0}, {data[10]/100.0}, {data[11]/100.0-100}, {data[12]/10000.0-2}, {data[13]/10000.0-2}, {data[14]/10000.0-2}"
tempStr += f", {data[15]/10000.0-2}, {data[16]/10000.0-2}, {data[17]/10000.0-2}"
for i in range(7):
tempStr += f", {decompressBySection(data[i+18])}"
fo.write(f"{tempStr}\n")
else:
break
fo.close()
fi.close()
except Exception as e:
raise Exception(f"Error in imageToCsvForDMG(). {str(e)}")
def imageToCsvForSOAGKV2(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('>I', dataBuf[:4])
tempStr = f"{datetime.fromtimestamp(data).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('>26H', dataBuf[0:52])
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:
titleStr = 'DateTime, BootCount, StatusWord, MeasurmentWord, RPM, AZI, INC, GTF, MTF, GT, MT, DIP, Temperature,'
titleStr += 'GX, GY, GZ, MX, MY, MZ, PGRAm, PGRBm, PGRCm, PGRUm, PGRDm, PGRLm, PGRRm\n'
fo.write(titleStr)
while(1):
dataBuf = fi.read(recordLength)
if len(dataBuf) == recordLength:
data, = struct.unpack('>I', dataBuf[0:4])
tempStr = f"{datetime.fromtimestamp(data).strftime('%Y-%m-%d %H:%M:%S')}"
dataBuf = dataBuf[4:]
data = struct.unpack('>25H', dataBuf[0:50])
tempStr += f", {data[0]}, {data[1]}, {data[2]}, {data[3]/100.0-100}, {data[4]/100.0}, {data[5]/100.0}, {data[6]/100.0}, {data[7]/100.0}"
tempStr += f", {data[8]/10000.0}, {data[9]/10000.0}, {data[10]/100.0}, {data[11]/100.0-100}, {data[12]/10000.0-2}, {data[13]/10000.0-2}, {data[14]/10000.0-2}"
tempStr += f", {data[15]/10000.0-2}, {data[16]/10000.0-2}, {data[17]/10000.0-2}"
for i in range(7):
tempStr += f", {decompressBySection(data[i+18])}"
fo.write(f"{tempStr}\n")
else:
break
fo.close()
fi.close()
except Exception as e:
raise Exception(f"Error in imageToCsvForSOAGKV2(). {str(e)}")
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('>I', dataBuf[:4])
tempStr = f"{datetime.fromtimestamp(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_T(). {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:
titleStr = 'DateTime, Typem, AnnularPrem, BorePrem, AnnularMudTempm, BoreMudTempm, WOBm, Torquem, BendingXm, Tempm, '
titleStr += 'AnnularPre1, AnnularPre2, AnnularPre3, AnnularPre4, AnnularPre5, AnnularPre6, AnnularPre7, AnnularPre8, AnnularPre9, AnnularPre10, '
titleStr += 'AnnularPre11, AnnularPre12, AnnularPre13, AnnularPre14, AnnularPre15, AnnularPre16, AnnularPre17, AnnularPre18, AnnularPre19, AnnularPre20, '
titleStr += 'AnnularPre21, AnnularPre22, AnnularPre23, AnnularPre24, AnnularPre25, AnnularPre26, AnnularPre27, AnnularPre28, AnnularPre29, AnnularPre30, '
titleStr += 'AnnularPre31, AnnularPre32, AnnularPre33, AnnularPre34, AnnularPre35, AnnularPre36, AnnularPre37, AnnularPre38, AnnularPre39, AnnularPre40, '
titleStr += 'AnnularPre41, AnnularPre42, AnnularPre43, AnnularPre44, AnnularPre45, AnnularPre46, AnnularPre47, AnnularPre48, AnnularPre49, AnnularPre50, '
titleStr += 'BorePre1, BorePre2, BorePre3, BorePre4, BorePre5, BorePre6, BorePre7, BorePre8, BorePre9, BorePre10, '
titleStr += 'BorePre11, BorePre12, BorePre13, BorePre14, BorePre15, BorePre16, BorePre17, BorePre18, BorePre19, BorePre20, '
titleStr += 'BorePre21, BorePre22, BorePre23, BorePre24, BorePre25, BorePre26, BorePre27, BorePre28, BorePre29, BorePre30, '
titleStr += 'BorePre31, BorePre32, BorePre33, BorePre34, BorePre35, BorePre36, BorePre37, BorePre38, BorePre39, BorePre40, '
titleStr += 'BorePre41, BorePre42, BorePre43, BorePre44, BorePre45, BorePre46, BorePre47, BorePre48, BorePre49, BorePre50, '
titleStr += 'AnnularTemp1, AnnularTemp2, AnnularTemp3, AnnularTemp4, AnnularTemp5, AnnularTemp6, AnnularTemp7, AnnularTemp8, AnnularTemp9, AnnularTemp10, '
titleStr += 'AnnularTemp11, AnnularTemp12, AnnularTemp13, AnnularTemp14, AnnularTemp15, AnnularTemp16, AnnularTemp17, AnnularTemp18, AnnularTemp19, AnnularTemp20, '
titleStr += 'AnnularTemp21, AnnularTemp22, AnnularTemp23, AnnularTemp24, AnnularTemp25, AnnularTemp26, AnnularTemp27, AnnularTemp28, AnnularTemp29, AnnularTemp30, '
titleStr += 'AnnularTemp31, AnnularTemp32, AnnularTemp33, AnnularTemp34, AnnularTemp35, AnnularTemp36, AnnularTemp37, AnnularTemp38, AnnularTemp39, AnnularTemp40, '
titleStr += 'AnnularTemp41, AnnularTemp42, AnnularTemp43, AnnularTemp44, AnnularTemp45, AnnularTemp46, AnnularTemp47, AnnularTemp48, AnnularTemp49, AnnularTemp50, '
titleStr += 'BoreTemp1, BoreTemp2, BoreTemp3, BoreTemp4, BoreTemp5, BoreTemp6, BoreTemp7, BoreTemp8, BoreTemp9, BoreTemp10, '
titleStr += 'BoreTemp11, BoreTemp12, BoreTemp13, BoreTemp14, BoreTemp15, BoreTemp16, BoreTemp17, BoreTemp18, BoreTemp19, BoreTemp20, '
titleStr += 'BoreTemp21, BoreTemp22, BoreTemp23, BoreTemp24, BoreTemp25, BoreTemp26, BoreTemp27, BoreTemp28, BoreTemp29, BoreTemp30, '
titleStr += 'BoreTemp31, BoreTemp32, BoreTemp33, BoreTemp34, BoreTemp35, BoreTemp36, BoreTemp37, BoreTemp38, BoreTemp39, BoreTemp40, '
titleStr += 'BoreTemp41, BoreTemp42, BoreTemp43, BoreTemp44, BoreTemp45, BoreTemp46, BoreTemp47, BoreTemp48, BoreTemp49, BoreTemp50, '
titleStr += 'WOBAD_1, WOBAD_2, WOBAD_3, WOBAD_4, WOBAD_5, WOBAD_6, WOBAD_7, WOBAD_8, WOBAD_9, WOBAD_10, '
titleStr += 'WOBAD_11, WOBAD_12, WOBAD_13, WOBAD_14, WOBAD_15, WOBAD_16, WOBAD_17, WOBAD_18, WOBAD_19, WOBAD_20, '
titleStr += 'WOBAD_21, WOBAD_22, WOBAD_23, WOBAD_24, WOBAD_25, WOBAD_26, WOBAD_27, WOBAD_28, WOBAD_29, WOBAD_30, '
titleStr += 'WOBAD_31, WOBAD_32, WOBAD_33, WOBAD_34, WOBAD_35, WOBAD_36, WOBAD_37, WOBAD_38, WOBAD_39, WOBAD_40, '
titleStr += 'WOBAD_41, WOBAD_42, WOBAD_43, WOBAD_44, WOBAD_45, WOBAD_46, WOBAD_47, WOBAD_48, WOBAD_49, WOBAD_50, '
titleStr += 'TorqueAD_1, TorqueAD_2, TorqueAD_3, TorqueAD_4, TorqueAD_5, TorqueAD_6, TorqueAD_7, TorqueAD_8, TorqueAD_9, TorqueAD_10, '
titleStr += 'TorqueAD_11, TorqueAD_12, TorqueAD_13, TorqueAD_14, TorqueAD_15, TorqueAD_16, TorqueAD_17, TorqueAD_18, TorqueAD_19, TorqueAD_20, '
titleStr += 'TorqueAD_21, TorqueAD_22, TorqueAD_23, TorqueAD_24, TorqueAD_25, TorqueAD_26, TorqueAD_27, TorqueAD_28, TorqueAD_29, TorqueAD_30, '
titleStr += 'TorqueAD_31, TorqueAD_32, TorqueAD_33, TorqueAD_34, TorqueAD_35, TorqueAD_36, TorqueAD_37, TorqueAD_38, TorqueAD_39, TorqueAD_40, '
titleStr += 'TorqueAD_41, TorqueAD_42, TorqueAD_43, TorqueAD_44, TorqueAD_45, TorqueAD_46, TorqueAD_47, TorqueAD_48, TorqueAD_49, TorqueAD_50, '
titleStr += 'BendingXAD_1, BendingXAD_2, BendingXAD_3, BendingXAD_4, BendingXAD_5, BendingXAD_6, BendingXAD_7, BendingXAD_8, BendingXAD_9, BendingXAD_10, '
titleStr += 'BendingXAD_11, BendingXAD_12, BendingXAD_13, BendingXAD_14, BendingXAD_15, BendingXAD_16, BendingXAD_17, BendingXAD_18, BendingXAD_19, BendingXAD_20, '
titleStr += 'BendingXAD_21, BendingXAD_22, BendingXAD_23, BendingXAD_24, BendingXAD_25, BendingXAD_26, BendingXAD_27, BendingXAD_28, BendingXAD_29, BendingXAD_30, '
titleStr += 'BendingXAD_31, BendingXAD_32, BendingXAD_33, BendingXAD_34, BendingXAD_35, BendingXAD_36, BendingXAD_37, BendingXAD_38, BendingXAD_39, BendingXAD_40, '
titleStr += 'BendingXAD_41, BendingXAD_42, BendingXAD_43, BendingXAD_44, BendingXAD_45, BendingXAD_46, BendingXAD_47, BendingXAD_48, BendingXAD_49, BendingXAD_50, '
titleStr += 'BendingYAD_1, BendingYAD_2, BendingYAD_3, BendingYAD_4, BendingYAD_5, BendingYAD_6, BendingYAD_7, BendingYAD_8, BendingYAD_9, BendingYAD_10, '
titleStr += 'BendingYAD_11, BendingYAD_12, BendingYAD_13, BendingYAD_14, BendingYAD_15, BendingYAD_16, BendingYAD_17, BendingYAD_18, BendingYAD_19, BendingYAD_20, '
titleStr += 'BendingYAD_21, BendingYAD_22, BendingYAD_23, BendingYAD_24, BendingYAD_25, BendingYAD_26, BendingYAD_27, BendingYAD_28, BendingYAD_29, BendingYAD_30, '
titleStr += 'BendingYAD_31, BendingYAD_32, BendingYAD_33, BendingYAD_34, BendingYAD_35, BendingYAD_36, BendingYAD_37, BendingYAD_38, BendingYAD_39, BendingYAD_40, '
titleStr += 'BendingYAD_41, BendingYAD_42, BendingYAD_43, BendingYAD_44, BendingYAD_45, BendingYAD_46, BendingYAD_47, BendingYAD_48, BendingYAD_49, BendingYAD_50, '
titleStr += 'Temp__1, Temp__2, Temp__3, Temp__4, Temp__5, Temp__6, Temp__7, Temp__8, Temp__9, Temp__10, '
titleStr += 'Temp__11, Temp__12, Temp__13, Temp__14, Temp__15, Temp__16, Temp__17, Temp__18, Temp__19, Temp__20, '
titleStr += 'Temp__21, Temp__22, Temp__23, Temp__24, Temp__25, Temp__26, Temp__27, Temp__28, Temp__29, Temp__30, '
titleStr += 'Temp__31, Temp__32, Temp__33, Temp__34, Temp__35, Temp__36, Temp__37, Temp__38, Temp__39, Temp__40, '
titleStr += 'Temp__41, Temp__42, Temp__43, Temp__44, Temp__45, Temp__46, Temp__47, Temp__48, Temp__49, Temp__50\n'
fo.write(titleStr)
# 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])
for i in range(1,len(data)):
tempStr += f", {data[i]}"
# 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)}")