Thermocouple mV conversion library

Dependents:   CN0391

Committer:
adisuciu
Date:
Mon Nov 07 16:04:51 2016 +0000
Revision:
1:5421fc992678
Parent:
0:a878bf59a337
Updated include filename case

Who changed what in which revision?

UserRevisionLine numberNew contents of line
adisuciu 0:a878bf59a337 1 def isFloat(string):
adisuciu 0:a878bf59a337 2 try:
adisuciu 0:a878bf59a337 3 float(string)
adisuciu 0:a878bf59a337 4 return True
adisuciu 0:a878bf59a337 5 except ValueError:
adisuciu 0:a878bf59a337 6 return False
adisuciu 0:a878bf59a337 7
adisuciu 0:a878bf59a337 8 with open("thermocouple.cpp","w") as out:
adisuciu 0:a878bf59a337 9 with open("Thermocouple_core_cpp.txt","r") as inp:
adisuciu 0:a878bf59a337 10 out.write(inp.read())
adisuciu 0:a878bf59a337 11 out.write("\n\n\n")
adisuciu 0:a878bf59a337 12 pass
adisuciu 0:a878bf59a337 13
adisuciu 0:a878bf59a337 14 with open("thermocouple.h","w") as out:
adisuciu 0:a878bf59a337 15 with open("Thermocouple_core_h.txt", "r") as inp:
adisuciu 0:a878bf59a337 16 out.write(inp.read())
adisuciu 0:a878bf59a337 17 out.write("\n\n\n")
adisuciu 0:a878bf59a337 18 pass
adisuciu 0:a878bf59a337 19
adisuciu 0:a878bf59a337 20 with open("thermocouple_lut.cpp","w") as out:
adisuciu 0:a878bf59a337 21 with open("Thermocouple_lut_core_cpp.txt","r") as inp:
adisuciu 0:a878bf59a337 22 out.write(inp.read())
adisuciu 0:a878bf59a337 23 out.write("\n\n\n")
adisuciu 0:a878bf59a337 24 pass
adisuciu 0:a878bf59a337 25
adisuciu 0:a878bf59a337 26 with open('tc.txt', 'r') as myfile:
adisuciu 0:a878bf59a337 27 initstr=myfile.read().replace('\n', ' ')
adisuciu 0:a878bf59a337 28
adisuciu 0:a878bf59a337 29
adisuciu 0:a878bf59a337 30 #print(initstr.split());
adisuciu 0:a878bf59a337 31 splitted = initstr.split();
adisuciu 0:a878bf59a337 32
adisuciu 0:a878bf59a337 33 while splitted:
adisuciu 0:a878bf59a337 34 i=0
adisuciu 0:a878bf59a337 35
adisuciu 0:a878bf59a337 36 for word in splitted:
adisuciu 0:a878bf59a337 37 if(word == 'type'):
adisuciu 0:a878bf59a337 38 break
adisuciu 0:a878bf59a337 39 i=i+1
adisuciu 0:a878bf59a337 40 del splitted[:i+1]
adisuciu 0:a878bf59a337 41 if not splitted:
adisuciu 0:a878bf59a337 42 break
adisuciu 0:a878bf59a337 43 tctype = splitted[0][0].lower()
adisuciu 0:a878bf59a337 44
adisuciu 0:a878bf59a337 45 class_name = "Thermocouple_Type_" + tctype.capitalize()
adisuciu 0:a878bf59a337 46 lut_def_name = "TYPE_" + tctype.capitalize() + "_LUT"
adisuciu 0:a878bf59a337 47 print(lut_def_name)
adisuciu 0:a878bf59a337 48
adisuciu 0:a878bf59a337 49 i=0
adisuciu 0:a878bf59a337 50 state=0
adisuciu 0:a878bf59a337 51 lut = []
adisuciu 0:a878bf59a337 52 for word in splitted:
adisuciu 0:a878bf59a337 53 if(word=="************************************"):
adisuciu 0:a878bf59a337 54 break
adisuciu 0:a878bf59a337 55 if(word=="mV"):
adisuciu 0:a878bf59a337 56 state = 1
adisuciu 0:a878bf59a337 57 continue
adisuciu 0:a878bf59a337 58 if(state == 1 and isFloat(word)):
adisuciu 0:a878bf59a337 59 lut.append(word)
adisuciu 0:a878bf59a337 60 else:
adisuciu 0:a878bf59a337 61 state=0
adisuciu 0:a878bf59a337 62 i=i+1
adisuciu 0:a878bf59a337 63 print(lut)
adisuciu 0:a878bf59a337 64 del splitted[:i]
adisuciu 0:a878bf59a337 65 i=0
adisuciu 0:a878bf59a337 66
adisuciu 0:a878bf59a337 67 globaloffset = lut[0]
adisuciu 0:a878bf59a337 68
adisuciu 0:a878bf59a337 69 if(float(lut[0]) == float(lut[2])-10):
adisuciu 0:a878bf59a337 70 del lut[:3]
adisuciu 0:a878bf59a337 71 else:
adisuciu 0:a878bf59a337 72 del lut[0]
adisuciu 0:a878bf59a337 73
adisuciu 0:a878bf59a337 74 j=0
adisuciu 0:a878bf59a337 75 print lut
adisuciu 0:a878bf59a337 76 lutfloat=[]
adisuciu 0:a878bf59a337 77 for val in lut:
adisuciu 0:a878bf59a337 78 b=1
adisuciu 0:a878bf59a337 79 if(i%11==0):
adisuciu 0:a878bf59a337 80 #print "11 " + val
adisuciu 0:a878bf59a337 81 b=0
adisuciu 0:a878bf59a337 82 if(i%12==0):
adisuciu 0:a878bf59a337 83 #print "12 "+ val
adisuciu 0:a878bf59a337 84 i=0
adisuciu 0:a878bf59a337 85 b=0
adisuciu 0:a878bf59a337 86 i=i+1
adisuciu 0:a878bf59a337 87 j=j+1
adisuciu 0:a878bf59a337 88 if(b):
adisuciu 0:a878bf59a337 89 lutfloat.append(float(val))
adisuciu 0:a878bf59a337 90
adisuciu 0:a878bf59a337 91
adisuciu 0:a878bf59a337 92 #print "unsorted"
adisuciu 0:a878bf59a337 93 #print lutfloat
adisuciu 0:a878bf59a337 94 lutfloat.sort()
adisuciu 0:a878bf59a337 95 #print "sorted"
adisuciu 0:a878bf59a337 96 #print lutfloat
adisuciu 0:a878bf59a337 97 i=0
adisuciu 0:a878bf59a337 98 with open("thermocouple_lut.cpp", "a") as out:
adisuciu 0:a878bf59a337 99 out.write("#ifdef "+lut_def_name+"\n")
adisuciu 0:a878bf59a337 100 out.write("const int16_t " + class_name + "::lut_offset = " + str(globaloffset)+";\n")
adisuciu 0:a878bf59a337 101 out.write("const uint16_t " + class_name + "::lut_size = " + str(len(lutfloat))+";\n")
adisuciu 0:a878bf59a337 102 out.write("const int32_t "+class_name+"::lut["+str(len(lutfloat))+"] = {\n")
adisuciu 0:a878bf59a337 103 for val in lutfloat:
adisuciu 0:a878bf59a337 104 out.write(str(int(val*1000)).rjust(8)+ ", ")
adisuciu 0:a878bf59a337 105 i=i+1
adisuciu 0:a878bf59a337 106 if(i==10):
adisuciu 0:a878bf59a337 107 out.write("\n")
adisuciu 0:a878bf59a337 108 i=0
adisuciu 0:a878bf59a337 109 out.write("};\n")
adisuciu 0:a878bf59a337 110 out.write("#endif\n\n")
adisuciu 0:a878bf59a337 111 i=0
adisuciu 0:a878bf59a337 112
adisuciu 0:a878bf59a337 113 ranger = []
adisuciu 0:a878bf59a337 114 values = []
adisuciu 0:a878bf59a337 115 exp=[]
adisuciu 0:a878bf59a337 116 ranger_index = -1 #HACK HACK HACK
adisuciu 0:a878bf59a337 117
adisuciu 0:a878bf59a337 118 while(splitted[0] != '************************************'):
adisuciu 0:a878bf59a337 119 for word in splitted:
adisuciu 0:a878bf59a337 120 if(word=='range:'):
adisuciu 0:a878bf59a337 121 ranger.append([])
adisuciu 0:a878bf59a337 122 values.append([])
adisuciu 0:a878bf59a337 123 ranger_index=ranger_index+1
adisuciu 0:a878bf59a337 124 break
adisuciu 0:a878bf59a337 125 if(word=='exponential:'):
adisuciu 0:a878bf59a337 126 exp.append(splitted[i+3])
adisuciu 0:a878bf59a337 127 exp.append(splitted[i+6])
adisuciu 0:a878bf59a337 128 exp.append(splitted[i+9])
adisuciu 0:a878bf59a337 129 i=i+10
adisuciu 0:a878bf59a337 130 print exp
adisuciu 0:a878bf59a337 131 break
adisuciu 0:a878bf59a337 132 i=i+1
adisuciu 0:a878bf59a337 133 if(word=='exponential:'):
adisuciu 0:a878bf59a337 134 print("exponential")
adisuciu 0:a878bf59a337 135 del splitted[:i + 1]
adisuciu 0:a878bf59a337 136 i=0
adisuciu 0:a878bf59a337 137 break
adisuciu 0:a878bf59a337 138 del splitted[:i+1]
adisuciu 0:a878bf59a337 139 print splitted
adisuciu 0:a878bf59a337 140 i=0
adisuciu 0:a878bf59a337 141
adisuciu 0:a878bf59a337 142 ranger[ranger_index].append(splitted[0])
adisuciu 0:a878bf59a337 143 ranger[ranger_index].append(splitted[1])
adisuciu 0:a878bf59a337 144 nr_of_coef = int(splitted[2])+1
adisuciu 0:a878bf59a337 145 del splitted[:3]
adisuciu 0:a878bf59a337 146 for i in range(nr_of_coef):
adisuciu 0:a878bf59a337 147 values[ranger_index].append(splitted[i])
adisuciu 0:a878bf59a337 148 del splitted[:nr_of_coef]
adisuciu 0:a878bf59a337 149 print ranger
adisuciu 0:a878bf59a337 150 print values
adisuciu 0:a878bf59a337 151 i=0
adisuciu 0:a878bf59a337 152
adisuciu 0:a878bf59a337 153 with open("Thermocouple.h", "a") as out:
adisuciu 0:a878bf59a337 154 poly_size = str(len(ranger))
adisuciu 0:a878bf59a337 155
adisuciu 0:a878bf59a337 156 out.write("class " + class_name + " : public Thermocouple\n{")
adisuciu 0:a878bf59a337 157 out.write("\npublic:\n\t~" + class_name +"();")
adisuciu 0:a878bf59a337 158 out.write("\n\tstatic const thermocouple_poly_subrange inv_poly[" + poly_size + "];\n")
adisuciu 0:a878bf59a337 159 out.write("\tstatic const int inv_poly_size;\n\tfloat convert_inv(float temp);\n\n")
adisuciu 0:a878bf59a337 160
adisuciu 0:a878bf59a337 161 with open("Thermocouple.cpp", "a") as out:
adisuciu 0:a878bf59a337 162
adisuciu 0:a878bf59a337 163 out.write("const int " + class_name + "::inv_poly_size = " + str(len(ranger)) + ";\n")
adisuciu 0:a878bf59a337 164 out.write("const Thermocouple::thermocouple_poly_subrange " + class_name + "::inv_poly[" + poly_size + "] =\n{\n")
adisuciu 0:a878bf59a337 165 for ran in ranger:
adisuciu 0:a878bf59a337 166 poly = []
adisuciu 0:a878bf59a337 167 power = []
adisuciu 0:a878bf59a337 168 for val in values[i]:
adisuciu 0:a878bf59a337 169 a = val.split("E")
adisuciu 0:a878bf59a337 170 poly.append(a[0])
adisuciu 0:a878bf59a337 171 power.append(int(a[1]))
adisuciu 0:a878bf59a337 172 print(poly)
adisuciu 0:a878bf59a337 173 print(power)
adisuciu 0:a878bf59a337 174 out.write("\t{")
adisuciu 0:a878bf59a337 175 for r in ran:
adisuciu 0:a878bf59a337 176 out.write(r.rjust(11))
adisuciu 0:a878bf59a337 177 out.write("// characteristic curve for temp range between " + ran[0] + " and " + ran[1] + "\n\t{")
adisuciu 0:a878bf59a337 178 for p in poly:
adisuciu 0:a878bf59a337 179 out.write(str(p).rjust(11) + ",")
adisuciu 0:a878bf59a337 180 out.write("},\n")
adisuciu 0:a878bf59a337 181 out.write("\t{")
adisuciu 0:a878bf59a337 182 for p in power:
adisuciu 0:a878bf59a337 183 # print(p)
adisuciu 0:a878bf59a337 184 out.write(str(p).rjust(11) + ",")
adisuciu 0:a878bf59a337 185 out.write("},\n\t")
adisuciu 0:a878bf59a337 186 out.write(str(len(poly)))
adisuciu 0:a878bf59a337 187 out.write(" }")
adisuciu 0:a878bf59a337 188
adisuciu 0:a878bf59a337 189 poly = []
adisuciu 0:a878bf59a337 190 power = []
adisuciu 0:a878bf59a337 191 i = i + 1
adisuciu 0:a878bf59a337 192 if i != len(ranger):
adisuciu 0:a878bf59a337 193 out.write(",")
adisuciu 0:a878bf59a337 194 out.write("\n")
adisuciu 0:a878bf59a337 195 out.write("};\n")
adisuciu 0:a878bf59a337 196
adisuciu 0:a878bf59a337 197 out.write(
adisuciu 0:a878bf59a337 198 "\nfloat " + class_name + "::convert_inv(float temp)\n{\n\treturn Thermocouple::convert(temp, inv_poly, inv_poly_size);\n}\n")
adisuciu 0:a878bf59a337 199 out.write(
adisuciu 0:a878bf59a337 200 "\nfloat " + class_name + "::lookup_inv(float temp)\n{""\n#ifdef " + lut_def_name + "\n\tif((temp+lut_offset)>lut_size)\n\t\treturn lut[lut_size-1];\n\telse\n\t\treturn lut[(uint16_t)temp+lut_offset];\n#else\n\t/* NOT IMPLEMENTED */\n\treturn 0;\n#endif\n}\n")
adisuciu 0:a878bf59a337 201
adisuciu 0:a878bf59a337 202 i=0
adisuciu 0:a878bf59a337 203
adisuciu 0:a878bf59a337 204 for word in splitted:
adisuciu 0:a878bf59a337 205 if(word == 'Voltage' and splitted[i-1] != "Temperature"):
adisuciu 0:a878bf59a337 206 break
adisuciu 0:a878bf59a337 207 i=i+1
adisuciu 0:a878bf59a337 208
adisuciu 0:a878bf59a337 209 del splitted[:i+1]
adisuciu 0:a878bf59a337 210 i=0
adisuciu 0:a878bf59a337 211 #print(splitted)
adisuciu 0:a878bf59a337 212 ranger = []
adisuciu 0:a878bf59a337 213 values = []
adisuciu 0:a878bf59a337 214 for word in splitted:
adisuciu 0:a878bf59a337 215
adisuciu 0:a878bf59a337 216 if(word == 'Range:'):
adisuciu 0:a878bf59a337 217 break
adisuciu 0:a878bf59a337 218 ranger.append([word])
adisuciu 0:a878bf59a337 219 #print(i)
adisuciu 0:a878bf59a337 220 i = i + 1
adisuciu 0:a878bf59a337 221
adisuciu 0:a878bf59a337 222 del splitted[:i+1]
adisuciu 0:a878bf59a337 223 for j in range(i):
adisuciu 0:a878bf59a337 224 ranger[j].append(splitted[j])
adisuciu 0:a878bf59a337 225 values.append([])
adisuciu 0:a878bf59a337 226 del splitted[:i]
adisuciu 0:a878bf59a337 227 #print(values)
adisuciu 0:a878bf59a337 228
adisuciu 0:a878bf59a337 229 i=0
adisuciu 0:a878bf59a337 230 for word in splitted:
adisuciu 0:a878bf59a337 231 if(word == "Error"):
adisuciu 0:a878bf59a337 232 break
adisuciu 0:a878bf59a337 233 values[i%len(ranger)].append(word)
adisuciu 0:a878bf59a337 234 i=i+1
adisuciu 0:a878bf59a337 235
adisuciu 0:a878bf59a337 236
adisuciu 0:a878bf59a337 237 poly=[]
adisuciu 0:a878bf59a337 238 power = []
adisuciu 0:a878bf59a337 239 i=0
adisuciu 0:a878bf59a337 240
adisuciu 0:a878bf59a337 241 with open("Thermocouple.h","a") as out:
adisuciu 0:a878bf59a337 242 poly_size = str(len(ranger))
adisuciu 0:a878bf59a337 243
adisuciu 0:a878bf59a337 244 out.write("\tstatic const thermocouple_poly_subrange poly["+poly_size+"];\n")
adisuciu 0:a878bf59a337 245 out.write("\tstatic const int poly_size;\n\tfloat convert(float voltage);\n")
adisuciu 0:a878bf59a337 246 out.write("#ifdef "+lut_def_name+"\n")
adisuciu 0:a878bf59a337 247 out.write("\tstatic const int32_t lut[];\n\tstatic const int16_t lut_offset;\n\tstatic const uint16_t lut_size;\n\tfloat lookup(float voltage);\n\tfloat lookup_inv(float temp);\n#endif\n};\n\n\n")
adisuciu 0:a878bf59a337 248
adisuciu 0:a878bf59a337 249
adisuciu 0:a878bf59a337 250 with open("Thermocouple.cpp","a") as out:
adisuciu 0:a878bf59a337 251
adisuciu 0:a878bf59a337 252 out.write("const int "+ class_name + "::poly_size = "+str(len(ranger))+";\n")
adisuciu 0:a878bf59a337 253 out.write("const Thermocouple::thermocouple_poly_subrange "+ class_name+ "::poly["+poly_size+"] =\n{\n")
adisuciu 0:a878bf59a337 254 for ran in ranger:
adisuciu 0:a878bf59a337 255 for val in values[i]:
adisuciu 0:a878bf59a337 256 a=val.split("E")
adisuciu 0:a878bf59a337 257 poly.append(a[0])
adisuciu 0:a878bf59a337 258 power.append(int(a[1]))
adisuciu 0:a878bf59a337 259 print(poly)
adisuciu 0:a878bf59a337 260 print(power)
adisuciu 0:a878bf59a337 261 out.write("\t{")
adisuciu 0:a878bf59a337 262 for r in ran:
adisuciu 0:a878bf59a337 263 out.write(r.rjust(11) +", ")
adisuciu 0:a878bf59a337 264 out.write("// characteristic curve for mV range between " + ran[0] +" and "+ ran[1]+ "\n\t{")
adisuciu 0:a878bf59a337 265 for p in poly:
adisuciu 0:a878bf59a337 266 out.write(str(p).rjust(11) + ",")
adisuciu 0:a878bf59a337 267 out.write("},\n")
adisuciu 0:a878bf59a337 268 out.write("\t{")
adisuciu 0:a878bf59a337 269 for p in power:
adisuciu 0:a878bf59a337 270 # print(p)
adisuciu 0:a878bf59a337 271 out.write(str(p).rjust(11) + ",")
adisuciu 0:a878bf59a337 272 out.write("},\n\t")
adisuciu 0:a878bf59a337 273 out.write(str(len(poly)))
adisuciu 0:a878bf59a337 274 out.write(" }")
adisuciu 0:a878bf59a337 275
adisuciu 0:a878bf59a337 276 poly = []
adisuciu 0:a878bf59a337 277 power = []
adisuciu 0:a878bf59a337 278 i=i+1
adisuciu 0:a878bf59a337 279 if i!=len(ranger):
adisuciu 0:a878bf59a337 280 out.write(",")
adisuciu 0:a878bf59a337 281 out.write("\n")
adisuciu 0:a878bf59a337 282 out.write("};\n")
adisuciu 0:a878bf59a337 283 out.write("\n" + class_name + "::~"+class_name+"()\n{\n\n}\n")
adisuciu 0:a878bf59a337 284 out.write("\nfloat "+ class_name +"::convert(float voltage)\n{\n\treturn Thermocouple::convert(voltage, poly, poly_size);\n}\n")
adisuciu 0:a878bf59a337 285 out.write("\nfloat "+class_name+"::lookup(float voltage)\n{""\n#ifdef "+lut_def_name+"\n\treturn Thermocouple::lookup(lut, voltage, lut_size, lut_offset);\n#else\n\t/* NOT IMPLEMENTED */\n\treturn 0;\n#endif\n}\n")
adisuciu 0:a878bf59a337 286
adisuciu 0:a878bf59a337 287 with open("Thermocouple.h", "a") as out:
adisuciu 0:a878bf59a337 288 out.write("\n#endif\n")
adisuciu 0:a878bf59a337 289
adisuciu 0:a878bf59a337 290
adisuciu 0:a878bf59a337 291
adisuciu 0:a878bf59a337 292
adisuciu 0:a878bf59a337 293
adisuciu 0:a878bf59a337 294 #print(ranger)
adisuciu 0:a878bf59a337 295 #print(values)
adisuciu 0:a878bf59a337 296
adisuciu 0:a878bf59a337 297
adisuciu 0:a878bf59a337 298
adisuciu 0:a878bf59a337 299
adisuciu 0:a878bf59a337 300