Files
virtual_simulation_midware/midware/config/__pycache__/excel_config.cpython-311.pyc

113 lines
21 KiB
Plaintext
Raw Normal View History

2026-06-16 15:40:19 +08:00
<EFBFBD>
<00>jd'<00><00><><00>dZddlZddlmZddlZddlZddlZddlZddl Z d<04>Z
d<05>Z e dkre d<07><00>Z ee <0A><00>dSdS)u<>
Excel 配置解析excel_config.py基于openpyxl实现 Excel 文件解析提取外设名称、UDP 端口、协议类型、基地址等信息存入DEVICE_CONFIG_DICT。
<EFBFBD>N)<01>loggerc<00>
<00>t|t<00><00>sdStjdd|<00><00><00><00><00>} |rt |d<04><00>ndS#t tf$rtj d|<00>d<06><03><00>YdSwxYw)u<>处理十六进制字符串转整数(兼容带逗号 / 空格的格式,如 0x20800000、0x0000 1234
:param hex_str: 十六进制字符串
:return: 转换后的整数,失败返回 0
rz[,\s]<5D><00>u十六进制转换失败u,默认返回 0)
<EFBFBD>
isinstance<EFBFBD>str<74>re<72>sub<75>strip<69>int<6E>
ValueError<EFBFBD> TypeErrorr<00>warning)<02>hex_str<74> clean_hexs <20>oe:\pythonProjects\virtual_simulation_midware_20260508\virtual_simulation_midware\midware\config\excel_config.py<70>
hex_to_intrs<><00><00>
<16>w<EFBFBD><03> $<24> $<24><11><10>q<EFBFBD><12><06><08>"<22>g<EFBFBD>m<EFBFBD>m<EFBFBD>&6<>&6<>7<>7<>I<EFBFBD><11>&/<2F>6<>s<EFBFBD>I<EFBFBD>r<EFBFBD>"<22>"<22>"<22>Q<EFBFBD>6<><36> <16> <09> "<22><11><11><11><0E><0E>P<>g<EFBFBD>P<>P<>P<>Q<>Q<>Q<><10>q<EFBFBD>q<EFBFBD><11><><EFBFBD>s<00>A<00>)B<03>Bc<00><><00><12>i}d}d}d} |<00>d<04><00>r/tj|<00><00>}|<05>|d<03><05><00>|}d}t j|d<06><07><00>}|j}tjd|<00>d |j <00><00><04><00>d
<EFBFBD>|d D<00><00>}d <0C>|D<00><00>r%|<07>
d <0A>|D<00><00>d<00><00>ndd<10>|D<00><00>r%|<07>
d<11>|D<00><00>d<00><00>ndd<12>|D<00><00>r%|<07>
d<13>|D<00><00>d<00><00>ndd<14>|D<00><00>r%|<07>
d<15>|D<00><00>d<00><00>ndd<16>|D<00><00>r%|<07>
d<17>|D<00><00>d<00><00>ndd<18>|D<00><00>r%|<07>
d<19>|D<00><00>d<00><00>ndd<1A>|D<00><00>r%|<07>
d<1B>|D<00><00>d<00><00>ndd<1C>|D<00><00>r%|<07>
d<1D>|D<00><00>d<00><00>ndd<1E>|D<00><00>r%|<07>
d<1F>|D<00><00>d<00><00>ndd <20>|D<00><00>r%|<07>
d!<21>|D<00><00>d<00><00>ndd"<22>|D<00><00>r%|<07>
d#<23>|D<00><00>d<00><00>ndd$<24>|D<00><00>r%|<07>
d%<25>|D<00><00>d<00><00>ndd&<26> <0C>gd'<27>}<08>fd(<28>|D<00><00>} | <09>r4tj d)d*<2A> | <09><00><00>d+<2B><03><00>||re |<02> <00><00>tjd,<2C><00>n;#t$r.}
tjd-t#|
<EFBFBD><00><00><00><02><00>Yd}
~
nd}
~
wwxYw|r<>t$j<00>|<03><00>r ddl} | <0B>d.<2E><00>t%j|<03><00>tjd/<2F><00>S#t$r.}
tjd0t#|
<EFBFBD><00><00><00><02><00>Yd}
~
Sd}
~
wwxYwSSt1|<06>d1d<06>2<EFBFBD><00><00><00>} t5| d1<64>3<EFBFBD><00>D<00>]<5D>\} }|<0E>d4stjd5| <0A>d6<64><03><00><00>-|<0E>d4<00><00><00>}t9d7|<0E>d8<00><00><02><00>t9d9t;|<0E>d8<00><00><00><00><02><00>t9t#|<0E>d8<00><00><00><00>t#|<0E>d8<00><00>}t9d:|<10><00><00><00><00><02><00>|<0E>d;r2|<0E>d;<00><00><00><00><00><00>nd<|<0E>d8<00>Ht#|<0E>d8<00><00><00><00><00>rtA|<0E>d8<00><00>nd=tC|<0E>d><00><00>tC|<0E>d?<00><00>|<0E>d@rHt#|<0E>d@<00><00><00><00><00>rtA|<0E>d@<00><00>ndA|<0E>dBrHt#|<0E>dB<00><00><00><00><00>rtA|<0E>dB<00><00>ndC|<0E>dDrHt#|<0E>dD<00><00><00><00><00>rtA|<0E>dD<00><00>nd |<0E>dErHt#|<0E>dE<00><00><00><00><00>rtA|<0E>dE<00><00>nd |<0E>dFr |<0E>dF<00><00><00>ndG|<0E>dHrHt#|<0E>dH<00><00><00><00><00>rtA|<0E>dH<00><00>ndI|<0E>dJrHt#|<0E>dJ<00><00><00><00><00>rtA|<0E>dJ<00><00>ndIddK<64> }|dLdMvr&tjd5| <0A>dN|<0F>dO|dL<00>dP<64><07><00><00><04>6|||<tjdQ|<0F>dR|dL<00>dStE|dT<00><00><00>dU|dV<00>dW|dX<00>dY|dZ<00>d[|d\<00><00><0E><00><00><04><>tjd]tG|<01><00><00>d^<5E><03><00>t9d]tG|<01><00><00>d^<5E><03><00>n<>#tH$r,tj d_|<00><00><02><00>t9d_|<00><00><02><00>Yn[t$rO}
tj d`t#|
<EFBFBD><00><00><00>d<06>a<EFBFBD><00>t9d`t#|
<EFBFBD><00><00><00><02><00>Yd}
~
nd}
~
wwxYw|re |<02> <00><00>tjd,<2C><00>n;#t$r.}
tjd-t#|
<EFBFBD><00><00><00><02><00>Yd}
~
nd}
~
wwxYw|r<>t$j<00>|<03><00>r<> ddl} | <0B>d.<2E><00>t%j|<03><00>tjd/<2F><00><00>nJ#t$r/}
tjd0t#|
<EFBFBD><00><00><00><02><00>Yd}
~
<EFBFBD>nd}
~
wwxYw<01>n #|re |<02> <00><00>tjd,<2C><00>n;#t$r.}
tjd-t#|
<EFBFBD><00><00><00><02><00>Yd}
~
nd}
~
wwxYw|r<>t$j<00>|<03><00>r ddl} | <0B>d.<2E><00>t%j|<03><00>tjd/<2F><00>w#t$r.}
tjd0t#|
<EFBFBD><00><00><00><02><00>Yd}
~
wd}
~
wwxYwwwxYw|S)bu<62>加载 Excel/CSV 外设配置文件,解析核心配置项
:param file_path: Excel/CSV文件路径xlsx/xls/csv
:return: 外设配置字典key = 外设名称value = 配置项字典
Nz file.xlsxFz.csv)<01>indexT)<01> data_onlyu成功打开配置文件u工作表c<00>R<00>g|]$}|jr|j<00><00><00>nd<00><02>%S)r)<02>valuer )<02>.0<EFBFBD>cells r<00>
<listcomp>z#load_csv_config.<locals>.<listcomp>8s2<00><00>M<>M<>M<>t<EFBFBD><04>
<EFBFBD>:<3A>$<24>*<2A>"<22>"<22>$<24>$<24>$<24><02>M<>M<>M<><00>c<00>B<00>g|]}|<01><00><00>dk<00>|<01><02>S<00><01>名称<E5908D><01>lower<65>r<00>hs rrz#load_csv_config.<locals>.<listcomp>:<00>V<00><00>XD<02>XD<02>XD<02>^_<>mn<6D>mt<6D>mt<6D>mv<6D>mv<6D>{C<02>nC<02>nC<02>XY<58>nC<02>nC<02>nCrc<00>B<00>g|]}|<01><00><00>dk<00>|<01><02>Srr!r#s rrz#load_csv_config.<locals>.<listcomp>:<00>*<00><00>#O<>#O<>#O<>!<21><11><17><17><19><19>h<EFBFBD>9N<39>9N<39>A<EFBFBD>9N<39>9N<39>9Nrr<00><><EFBFBD><EFBFBD><EFBFBD>c<00>B<00>g|]}|<01><00><00>dk<00>|<01><02>S<00><01>编号r!r#s rrz#load_csv_config.<locals>.<listcomp>;r%rc<00>B<00>g|]}|<01><00><00>dk<00>|<01><02>Sr*r!r#s rrz#load_csv_config.<locals>.<listcomp>;r'rc<00>><00>g|]}|<01><00><00>dv<00>|<01><02>S<00>)u协议<E58D8F> 协议类型r!r#s rrz#load_csv_config.<locals>.<listcomp><sj<00><00>pn<02>pn<02>pn<02>vw<76>FG<02>FM<02>FM<02>FO<02>FO<02>Sm<02>Fm<02>Fm<02>pq<70>Fm<02>Fm<02>Fmrc<00>><00>g|]}|<01><00><00>dv<00>|<01><02>Sr.r!r#s rrz#load_csv_config.<locals>.<listcomp><s+<00><00>)g<>)g<>)g<><01>q<EFBFBD>w<EFBFBD>w<EFBFBD>y<EFBFBD>y<EFBFBD>Lf<4C>?f<>?f<>!<21>?f<>?f<>?frc<00>><00>g|]}|<01><00><00>dv<00>|<01><02>S<00>)<02>内存基地址u 基地址r!r#s rrz#load_csv_config.<locals>.<listcomp>=sn<00><00>y}<02>y}<02>y}<02>@A<02>OP<02>OV<02>OV<02>OX<02>OX<02>\|<02>O|<02>O|<02>yz<79>O|<02>O|<02>O|rc<00>><00>g|]}|<01><00><00>dv<00>|<01><02>Sr2r!r#s rrz#load_csv_config.<locals>.<listcomp>=s+<00><00>,p<>,p<>,p<>1<EFBFBD>!<21>'<27>'<27>)<29>)<29>Oo<4F>Bo<42>Bo<42>Q<EFBFBD>Bo<42>Bo<42>Borc<00>><00>g|]}|<01><00><00>dv<00>|<01><02>S<00>)<02>内存偏移地址u 偏移地址r!r#s rrz#load_csv_config.<locals>.<listcomp>>sr<00><00>BL<03>BL<03>BL<03>IJ<02>XY<02>X_<02>X_<02>Xa<02>Xa<02>eK<03>XK<03>XK<03>CD<02>XK<03>XK<03>XKrc<00>><00>g|]}|<01><00><00>dv<00>|<01><02>Sr6r!r#s rrz#load_csv_config.<locals>.<listcomp>>s+<00><00>/y<>/y<>/y<>a<EFBFBD>Q<EFBFBD>W<EFBFBD>W<EFBFBD>Y<EFBFBD>Y<EFBFBD>Rx<52>Ex<45>Ex<45><01>Ex<45>Ex<45>Exrc<00>><00>g|]}|<01><00><00>dv<00>|<01><02>S<00>)<05> UDP端口<E7ABAF> 端口地址<E59CB0>
udp 地址zUDP port<72>portr!r#s rrz#load_csv_config.<locals>.<listcomp>?sr<00><00>Qs<03>Qs<03>Qs<03>XY<02>gh<02>gn<02>gn<02>gp<02>gp<02>tr<03>gr<03>gr<03>RS<02>gr<03>gr<03>grrc<00>><00>g|]}|<01><00><00>dv<00>|<01><02>Sr:r!r#s rrz#load_csv_config.<locals>.<listcomp>?sG<00><00>'I<02>'I<02>'I<02>Q<EFBFBD>A<EFBFBD>G<EFBFBD>G<EFBFBD>I<EFBFBD>I<EFBFBD>JH<02>=H<02>=H<02>q<EFBFBD>=H<02>=H<02>=Hrc<00>><00>g|]}|<01><00><00>dv<00>|<01><02>S))r;r<r=<00> remote_port<72> remote portr!r#s rrz#load_csv_config.<locals>.<listcomp>@sr<00><00>s_<04>s_<04>s_<04>z{<02>IJ<03>IP<03>IP<03>IR<03>IR<03>V^<04>I^<04>I^<04>tu<02>I^<04>I^<04>I^rc<00>><00>g|]}|<01><00><00>dv<00>|<01><02>S))<05>UDP远程端口<E7ABAF>远程端口地址u远程udp 地址rArBr!r#s rrz#load_csv_config.<locals>.<listcomp>@sL<00><00>-k<02>-k<02>-k<02>1<EFBFBD>!<21>'<27>'<27>)<29>)<29>Pj<02>Cj<02>Cj<02>Q<EFBFBD>Cj<02>Cj<02>Cjrc<00>><00>g|]}|<01><00><00>dv<00>|<01><02>S))<02> TCP端口<E7ABAF>tcp_local_portr!r#s rrz#load_csv_config.<locals>.<listcomp>Asr<00><00>PT<03>PT<03>PT<03>WX<02>fg<02>fm<02>fm<02>fo<02>fo<02>sS<03>fS<03>fS<03>QR<02>fS<03>fS<03>fSrc<00>><00>g|]}|<01><00><00>dv<00>|<01><02>S))rGr<u
TCP 地址rHr!r#s rrz#load_csv_config.<locals>.<listcomp>AsG<00><00>'H<02>'H<02>'H<02>Q<EFBFBD>A<EFBFBD>G<EFBFBD>G<EFBFBD>I<EFBFBD>I<EFBFBD>JG<02>=G<02>=G<02>q<EFBFBD>=G<02>=G<02>=Grc<00>><00>g|]}|<01><00><00>dv<00>|<01><02>S))rG<00> tcp_bus_portr!r#s rrz#load_csv_config.<locals>.<listcomp>Bsr<00><00>fh<03>fh<03>fh<03>mn<02>|}<02>|C<03>|C<03>|E<03>|E<03>Ig<03>|g<03>|g<03>gh<02>|g<03>|g<03>|grc<00>><00>g|]}|<01><00><00>dv<00>|<01><02>S))uTCP远程端口rEu远程tcp 地址rKr!r#s rrz#load_csv_config.<locals>.<listcomp>BsL<00><00>-^<02>-^<02>-^<02>1<EFBFBD>!<21>'<27>'<27>)<29>)<29>P]<02>C]<02>C]<02>Q<EFBFBD>C]<02>C]<02>C]rc<00>B<00>g|]}|<01><00><00>dk<00>|<01><02>S<00><01>说明r!r#s rrz#load_csv_config.<locals>.<listcomp>Cr%rc<00>B<00>g|]}|<01><00><00>dk<00>|<01><02>SrNr!r#s rrz#load_csv_config.<locals>.<listcomp>Cr'rc<00>><00>g|]}|<01><00><00>dv<00>|<01><02>S<00>)<02>发送缓存区大小u 发送缓存r!r#s rrz#load_csv_config.<locals>.<listcomp>D<00>r<00><00>HU<03>HU<03>HU<03>OP<02>^_<02>^e<02>^e<02>^g<02>^g<02>kT<03>^T<03>^T<03>IJ<02>^T<03>^T<03>^Trc<00>><00>g|]}|<01><00><00>dv<00>|<01><02>SrRr!r#s rrz#load_csv_config.<locals>.<listcomp>D<00>+<00><00>2<32>2<32>2<32><11><01><07><07> <09> <09>U~<7E>H~<7E>H~<7E>1<EFBFBD>H~<7E>H~<7E>H~rc<00>><00>g|]}|<01><00><00>dv<00>|<01><02>S<00>)<02>接收缓存区大小u 接收缓存r!r#s rrz#load_csv_config.<locals>.<listcomp>ErTrc<00>><00>g|]}|<01><00><00>dv<00>|<01><02>SrXr!r#s rrz#load_csv_config.<locals>.<listcomp>ErVr) r r+r/r3r7r;rDrG<00>TCP总线端口rOrSrY)r r/r3c<00>,<00><01>g|]}<01>|dk<00>|<01><02>S)r(<00>)r<00>col<6F> col_mappings <20>rrz#load_csv_config.<locals>.<listcomp>Js(<00><><00>O<>O<>O<><03> <0B>C<EFBFBD>8H<38>B<EFBFBD>8N<38>8N<38><03>8N<38>8N<38>8Nru配置文件缺少核心列<E58897>,u请检查表头uExcel工作簿已正常关闭u关闭Excel工作簿失败g<EFBC9A><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?u临时Excel文件已删除u 删除临时Excel文件失败<E8B4A5>)<02>min_row<6F> values_only)<01>startr u第 u(外设名称为空跳过该行u 原始值r+u 类型z isdigit?:r/r<00>cr3r7r;i<>"rDi'rGr[rOu无rSirY) <0C>protocol<6F>number<65> base_addr<64> offset_addr<64>udp_portrArHrK<00>desc<73>
send_cache<EFBFBD>
recv_cache<EFBFBD>enablerf)<05>UART<52>CAN<41>1553B<33>AD<41>OCu 行 [u]:协议类型 u: 不合法,仅支持 UART/CAN/1553B/AD/OC跳过该行u解析外设配置z | u | 基地址 rhu | 端口号 rju | 发送缓存 rlu | 接收缓存 rmu
| 说明 rku%配置文件解析完成,共加载 u 个有效外设配置u配置文件不存在u配置文件解析失败:)<01>exc_info)%<25>endswith<74>pd<70>read_csv<73>to_excel<65>openpyxl<78> load_workbook<6F>activer<00>info<66>titler<00>error<6F>join<69>close<73>debug<75> Exceptionrr<00>os<6F>path<74>exists<74>time<6D>sleep<65>remove<76>list<73> iter_rows<77> enumerater <00>print<6E>type<70>isdigit<69>upperr r<00>hex<65>len<65>FileNotFoundError)<13> file_path<74> device_config<69>wb<77>
temp_excel<EFBFBD> is_temp_file<6C>df<64>ws<77>header<65> required_cols<6C> missing_cols<6C>er<65><00> rows_data<74>row_num<75>row<6F>dev_name<6D> str_value<75>dev_infor_s @r<00>load_csv_configr<67> s<><00><><00>
<17>M<EFBFBD> <0A>B<EFBFBD><1C>J<EFBFBD><18>L<EFBFBD>jL<01> <14> <1D> <1D>f<EFBFBD> %<25> %<25> <20><13><1B>Y<EFBFBD>'<27>'<27>B<EFBFBD> <0E>K<EFBFBD>K<EFBFBD>
<EFBFBD>%<25>K<EFBFBD> 0<> 0<> 0<>"<22>I<EFBFBD><1F>L<EFBFBD><16> #<23>I<EFBFBD><14> ><3E> ><3E> ><3E><02> <0F>Y<EFBFBD><02><0E> <0B>V<>)<29>V<>V<>B<EFBFBD>H<EFBFBD>V<>V<>W<>W<>W<>N<01>M<>r<EFBFBD>!<21>u<EFBFBD>M<>M<>M<><06>XD<02>XD<02>ci<63>XD<02>XD<02>XD<02>L<02>f<EFBFBD>l<EFBFBD>l<EFBFBD>#O<>#O<>v<EFBFBD>#O<>#O<>#O<>PQ<50>#R<>S<>S<>S<>JL<02>XD<02>XD<02>ci<63>XD<02>XD<02>XD<02>L<02>f<EFBFBD>l<EFBFBD>l<EFBFBD>#O<>#O<>v<EFBFBD>#O<>#O<>#O<>PQ<50>#R<>S<>S<>S<>JL<02>pn<02>pn<02>|B<02>pn<02>pn<02>pn<02>v<02>F<EFBFBD>L<EFBFBD>L<EFBFBD>)g<>)g<>V<EFBFBD>)g<>)g<>)g<>hi<68>)j<>k<>k<>k<>tv<02>y}<02>y}<02>EK<02>y}<02>y}<02>y}<02> E<03>v<EFBFBD>|<7C>|<7C>,p<>,p<><06>,p<>,p<>,p<>qr<71>,s<>t<>t<>t<>CE<03>BL<03>BL<03>NT<02>BL<03>BL<03>BL<03>#T<03>&<26>,<2C>,<2C>/y<>/y<>6<EFBFBD>/y<>/y<>/y<>z{<7B>/|<7C>"}<7D>"}<7D>"}<7D>RT<03>Qs<03>Qs<03>]c<02>Qs<03>Qs<03>Qs<03>{<03><16><1C><1C>'I<02>'I<02>&<26>'I<02>'I<02>'I<02>JK<02>'L<02>M<02>M<02>M<02>y{<03>s_<04>s_<04>E<03>s_<04>s_<04>s_<04> g<04>v<EFBFBD>|<7C>|<7C>-k<02>-k<02><06>-k<02>-k<02>-k<02>lm<02>-n<02> o<02> o<02> o<02>eg<04>PT<03>PT<03>\b<02>PT<03>PT<03>PT<03>\<03><16><1C><1C>'H<02>'H<02>&<26>'H<02>'H<02>'H<02>IJ<02>'K<02>L<02>L<02>L<02>Z\<03>fh<03>fh<03>rx<02>fh<03>fh<03>fh<03> p<03>v<EFBFBD>|<7C>|<7C>-^<02>-^<02><06>-^<02>-^<02>-^<02>_`<02>-a<02> b<02> b<02> b<02>np<03>XD<02>XD<02>ci<63>XD<02>XD<02>XD<02>L<02>f<EFBFBD>l<EFBFBD>l<EFBFBD>#O<>#O<>v<EFBFBD>#O<>#O<>#O<>PQ<50>#R<>S<>S<>S<>JL<02>HU<03>HU<03>TZ<02>HU<03>HU<03>HU<03>&]<03>V<EFBFBD>\<5C>\<5C>2<32>2<32>f<EFBFBD>2<32>2<32>2<32>AB<02>3C<02>&D<02>&D<02>&D<02>[]<03>HU<03>HU<03>TZ<02>HU<03>HU<03>HU<03>&]<03>V<EFBFBD>\<5C>\<5C>2<32>2<32>f<EFBFBD>2<32>2<32>2<32>AB<02>3C<02>&D<02>&D<02>&D<02>[]<03> 
<EFBFBD> 
<EFBFBD> <0B> F<01>E<>E<> <0A>O<>O<>O<>O<>}<7D>O<>O<>O<> <0C> <17> !<21> <12>L<EFBFBD>d<>#<23>(<28>(<28><<3C>:P<>:P<>d<>d<>d<> e<> e<> e<> <20>n <0E> I<01> I<01><12><08><08>
<EFBFBD>
<EFBFBD>
<EFBFBD><16> <0C><<3C>=<3D>=<3D>=<3D>=<3D><><1C> I<01> I<01> I<01><16><0E>G<>s<EFBFBD>1<EFBFBD>v<EFBFBD>v<EFBFBD>G<>G<>H<>H<>H<>H<>H<>H<>H<>H<><48><EFBFBD><EFBFBD><EFBFBD> I<01><><EFBFBD><EFBFBD> <18> L<01>B<EFBFBD>G<EFBFBD>N<EFBFBD>N<EFBFBD>:<3A>6<>6<> L<01> L<01><1B> <0B> <0B> <0B><14>
<EFBFBD>
<EFBFBD>3<EFBFBD><0F><0F><0F><12> <09>*<2A>%<25>%<25>%<25><16> <0C>9<>:<3A>:<3A>:<3A>:<3A><><1C> L<01> L<01> L<01><16><0E>J<>#<23>a<EFBFBD>&<26>&<26>J<>J<>K<>K<>K<>K<>K<>K<>K<>K<><4B><EFBFBD><EFBFBD><EFBFBD> L<01><><EFBFBD><EFBFBD> L<01> L<01>y<19><12><1C><1C>a<EFBFBD>T<EFBFBD><1C>B<>B<>C<>C<> <09>&<26>i<EFBFBD>q<EFBFBD>9<>9<>9<>$ <0E>$ <0E>L<EFBFBD>G<EFBFBD>S<EFBFBD><16>{<7B>8<EFBFBD>,<2C>-<2D> <19><16><0E>W<>g<EFBFBD>W<>W<>W<>X<>X<>X<><18><1A>;<3B>x<EFBFBD>0<>1<>7<>7<>9<>9<>H<EFBFBD> <11>=<3D><13>[<5B><18>%:<3A>!;<3B>=<3D>=<3D> ><3E> ><3E> ><3E> <11>@<40>d<EFBFBD>3<EFBFBD>{<7B>8<EFBFBD>'<<3C>#=<3D>><3E>><3E>@<40>@<40> A<> A<> A<> <11>#<23>c<EFBFBD>+<2B>h<EFBFBD>/<2F>0<>1<>1<> 2<> 2<> 2<><1B>C<EFBFBD> <0B>H<EFBFBD> 5<>6<>7<>7<>I<EFBFBD> <11>3<>i<EFBFBD>/<2F>/<2F>1<>1<>3<>3<> 4<> 4<> 4<>QT<01>T_<54>`n<>To<54>Pp<50>x<>C<EFBFBD> <0B>N<EFBFBD> ;<3B><<3C>B<>B<>D<>D<>J<>J<>L<>L<>L<>vx<76>>A<>+<2B>h<EFBFBD>BW<42>>X<>>d<>il<69>mp<6D>q|<7C>~F<02>rG<02>nH<02>jI<02>jI<02>jQ<02>jQ<02>jS<02>jS<02>>d<>#<23>c<EFBFBD>+<2B>h<EFBFBD>"7<>8<>9<>9<>9<>Z\<02>'<27><03>K<EFBFBD>8I<38>,J<>(K<>L<>L<>)<29>#<23>k<EFBFBD>:N<>.O<>*P<>Q<>Q<>CF<43>{<7B>S^<5E>G_<47>C`<60>]<02>eh<65>il<69>mx<6D>zE<02>nF<02>jG<02>fH<02>fH<02>fP<02>fP<02>fR<02>fR<02>]<02>C<EFBFBD><03>K<EFBFBD> <0B>$<<3C> =<3D>><3E>><3E>><3E>Y]<02>LO<4C>P[<5B>\m<>Pn<50>Lo<4C> r<02>tw<74>x{<7B>}H<02>IZ<02>}[<02>y\<02>u]<02>u]<02>ue<02>ue<02>ug<02>ug<02> r<02>s<EFBFBD>3<EFBFBD>{<7B>3D<33>'E<>#F<>G<>G<>G<>nr<02>IL<49>[<5B>Yd<59>Me<4D>If<49>#`<02>kn<6B>or<6F>s~<7E>@K<02>tL<02>pM<02>lN<02>lN<02>lV<02>lV<02>lX<02>lX<02>#`<02>#<23>c<EFBFBD>+<2B>k<EFBFBD>*B<>&C<>"D<>"D<>"D<>_`<02>MP<4D>Q\<5C>]n<>Qo<51>Mp<4D>!p<02>ux<75>y|<7C>~I<02>J[<02>~\<02>z]<02>v^<02>v^<02>vf<02>vf<02>vh<02>vh<02>!p<02><03>C<EFBFBD> <0B>4E<34>(F<>$G<> H<> H<> H<>op<02>>A<>+<2B>h<EFBFBD>BW<42>>X<>c<><03>K<EFBFBD><08>1<>2<>8<>8<>:<3A>:<3A>:<3A>^c<>QT<51>U`<60>ax<61>Uy<55>Qz<51>B<03>@C<02>DG<02>HS<02>Tk<02>Hl<02>Dm<02>@n<02>@n<02>@v<02>@v<02>@x<02>@x<02>B<03>c<EFBFBD>#<23>k<EFBFBD>2I<32>&J<>"K<>L<>L<>L<>B<03>QT<51>U`<60>ax<61>Uy<55>Qz<51>B<03>@C<02>DG<02>HS<02>Tk<02>Hl<02>Dm<02>@n<02>@n<02>@v<02>@v<02>@x<02>@x<02>B<03>c<EFBFBD>#<23>k<EFBFBD>2I<32>&J<>"K<>L<>L<>L<>B<03><1E> <0E> <0E>H<EFBFBD> <18>
<EFBFBD>#<23>+O<>O<>O<><16><0E> a<02>g<EFBFBD> a<02> a<02>X<EFBFBD> a<02> a<02>PX<50>Yc<59>Pd<50> a<02> a<02> a<02>b<02>b<02>b<02><18>&.<2E>M<EFBFBD>(<28> #<23> <12>L<EFBFBD>`<02><08>`<02>`<02>X<EFBFBD>j<EFBFBD>5I<35>`<02>`<02>X[<5B>\d<>ep<65>\q<>Xr<58>Xr<58>`<02>`<02>%<25>j<EFBFBD>1<>`<02>`<02>CK<43>L<EFBFBD>CY<43>`<02>`<02>ks<6B>uA<02>lB<02>`<02>`<02>NV<02>W]<02>N^<02>`<02>`<02> <0E> <0E> <0E> <0E>
<0F> <0B>f<>C<EFBFBD> <0A><N<><N<>f<>f<>f<>g<>g<>g<> <0A>`<60>c<EFBFBD>-<2D>6H<36>6H<36>`<60>`<60>`<60>a<>a<>a<>a<><61> <1C>6<>6<>6<><0E> <0C>;<3B> <09>;<3B>;<3B><<3C><<3C><<3C> <0A>4<><19>4<>4<>5<>5<>5<>5<>5<> <14>6<>6<>6<><0E> <0C>;<3B>3<EFBFBD>q<EFBFBD>6<EFBFBD>6<EFBFBD>;<3B>;<3B>d<EFBFBD>K<>K<>K<>K<> <0A>4<>C<EFBFBD><01>F<EFBFBD>F<EFBFBD>4<>4<>5<>5<>5<>5<>5<>5<>5<>5<><35><EFBFBD><EFBFBD><EFBFBD>6<><36><EFBFBD><EFBFBD>
<0E> I<01> I<01><12><08><08>
<EFBFBD>
<EFBFBD>
<EFBFBD><16> <0C><<3C>=<3D>=<3D>=<3D>=<3D><><1C> I<01> I<01> I<01><16><0E>G<>s<EFBFBD>1<EFBFBD>v<EFBFBD>v<EFBFBD>G<>G<>H<>H<>H<>H<>H<>H<>H<>H<><48><EFBFBD><EFBFBD><EFBFBD> I<01><><EFBFBD><EFBFBD> <18> L<01>B<EFBFBD>G<EFBFBD>N<EFBFBD>N<EFBFBD>:<3A>6<>6<> L<01> L<01><1B> <0B> <0B> <0B><14>
<EFBFBD>
<EFBFBD>3<EFBFBD><0F><0F><0F><12> <09>*<2A>%<25>%<25>%<25><16> <0C>9<>:<3A>:<3A>:<3A>:<3A><><1C> L<01> L<01> L<01><16><0E>J<>#<23>a<EFBFBD>&<26>&<26>J<>J<>K<>K<>K<>K<>K<>K<>K<>K<><4B><EFBFBD><EFBFBD><EFBFBD> L<01><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <0E> I<01> I<01><12><08><08>
<EFBFBD>
<EFBFBD>
<EFBFBD><16> <0C><<3C>=<3D>=<3D>=<3D>=<3D><><1C> I<01> I<01> I<01><16><0E>G<>s<EFBFBD>1<EFBFBD>v<EFBFBD>v<EFBFBD>G<>G<>H<>H<>H<>H<>H<>H<>H<>H<><48><EFBFBD><EFBFBD><EFBFBD> I<01><><EFBFBD><EFBFBD> <18> L<01>B<EFBFBD>G<EFBFBD>N<EFBFBD>N<EFBFBD>:<3A>6<>6<> L<01> L<01><1B> <0B> <0B> <0B><14>
<EFBFBD>
<EFBFBD>3<EFBFBD><0F><0F><0F><12> <09>*<2A>%<25>%<25>%<25><16> <0C>9<>:<3A>:<3A>:<3A>:<3A><><1C> L<01> L<01> L<01><16><0E>J<>#<23>a<EFBFBD>&<26>&<26>J<>J<>K<>K<>K<>K<>K<>K<>K<>K<><4B><EFBFBD><EFBFBD><EFBFBD> L<01><><EFBFBD><EFBFBD> L<01> L<01><><EFBFBD><EFBFBD> <19>s<><00>L.e<00><(M%<02>%
N<05>/$N<05>N<05>AP<02>
P<<05>$P7<05>7P<<05>Te<00>k-<00>3g <03>k-<00> g <03>Ag<03>k-<00>g <03> k-<00>&(h<00>
i<03>$i<03>i<03>,Aj/<00>/
k(<03>9$k#<03>#k(<03>-o6<03>1(l<04>o6<03>
m<07>$$m <07>o6<03> m<07>$o6<03>7An9<04>8o6<03>9
o1<07>$o,<07>'o6<03>,o1<07>1o6<03>__main__zconfig_files/device_config.csv)<0F>__doc__ry<00>logururr <00>pandasrvr<><00>sys<79>iorr<><00>__name__<5F> test_configr<67>r]rr<00><module>r<>s<><00><01><04><04><10><0F><0F><0F><19><19><19><19><19><19> <09> <09> <09> <09><13><13><13><13> <09> <09> <09> <09>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD> <09> <09> <09> <09> <11> <11> <11>v<19>v<19>v<19>r <0C>z<EFBFBD><19><19>!<21>/<2F>"B<>C<>C<>K<EFBFBD> <09>E<EFBFBD>+<2B><16><16><16><16><16><1A>r