From 4ce0def3cd1247f86841bed68e2176c34c07b710 Mon Sep 17 00:00:00 2001 From: esarrey <eliott.sarrey@gmail.com> Date: Fri, 9 Jun 2023 10:25:05 +0200 Subject: [PATCH] Fully working b_sweep --- .gitignore | 5 ++- .vs/VSWorkspaceState.json | 2 +- ...015f0ba8-f9eb-4fb3-8476-f512bae48cd3.vsidx | Bin 3901 -> 0 bytes ...0be09d6d-0426-4af2-bc57-cfa37326716c.vsidx | Bin 63612 -> 0 bytes ...2099b974-40cc-4214-ac4a-e988077b281f.vsidx | Bin 2602 -> 0 bytes ...d83fd0c8-b937-441d-9691-f2de6420a626.vsidx | Bin 5947 -> 0 bytes .vs/minimoke/v17/.wsuo | Bin 31744 -> 35840 bytes .vs/slnx.sqlite | Bin 90112 -> 90112 bytes client.py | 12 ++++++ cshargapp.c | 20 ---------- hall_probe.py | 14 ------- main.py | 12 +----- server.py | 15 ++++++++ src/classes/controltab.py | 12 +++--- src/classes/hall_sensor.py | 35 ++++++++++++------ src/classes/stage.py | 26 +++++++++++-- src/hallsensor/read/Program.cs | 16 ++++++++ src/hallsensor/read/read.csproj | 16 ++++++++ src/hallsensor/read/read.sln | 25 +++++++++++++ src/hallsensor/zeroing/Program.cs | 18 +++++++++ src/hallsensor/zeroing/zeroing.csproj | 16 ++++++++ src/hallsensor/zeroing/zeroing.sln | 25 +++++++++++++ src/procedures/b_sweep.py | 11 ++++-- src/procedures/x_sweep.py | 7 +++- src/procedures/y_sweep.py | 7 +++- 25 files changed, 220 insertions(+), 74 deletions(-) delete mode 100644 .vs/minimoke/FileContentIndex/015f0ba8-f9eb-4fb3-8476-f512bae48cd3.vsidx delete mode 100644 .vs/minimoke/FileContentIndex/0be09d6d-0426-4af2-bc57-cfa37326716c.vsidx delete mode 100644 .vs/minimoke/FileContentIndex/2099b974-40cc-4214-ac4a-e988077b281f.vsidx delete mode 100644 .vs/minimoke/FileContentIndex/d83fd0c8-b937-441d-9691-f2de6420a626.vsidx create mode 100644 client.py delete mode 100644 cshargapp.c delete mode 100644 hall_probe.py create mode 100644 server.py create mode 100644 src/hallsensor/read/Program.cs create mode 100644 src/hallsensor/read/read.csproj create mode 100644 src/hallsensor/read/read.sln create mode 100644 src/hallsensor/zeroing/Program.cs create mode 100644 src/hallsensor/zeroing/zeroing.csproj create mode 100644 src/hallsensor/zeroing/zeroing.sln diff --git a/.gitignore b/.gitignore index d28ae8a..45dc3c0 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,7 @@ *__pycache__ data/ dlls/ -*.ini \ No newline at end of file +*.ini +*.vs +*bin/ +*obj/ \ No newline at end of file diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json index bbb289e..53f9194 100644 --- a/.vs/VSWorkspaceState.json +++ b/.vs/VSWorkspaceState.json @@ -5,6 +5,6 @@ "\\src\\classes", "\\src\\configs" ], - "SelectedNode": "\\src\\classes\\controltab.py", + "SelectedNode": "\\src", "PreviewInSolutionExplorer": false } \ No newline at end of file diff --git a/.vs/minimoke/FileContentIndex/015f0ba8-f9eb-4fb3-8476-f512bae48cd3.vsidx b/.vs/minimoke/FileContentIndex/015f0ba8-f9eb-4fb3-8476-f512bae48cd3.vsidx deleted file mode 100644 index 714d6a9852513c5a4473628c94ba2ca2945b68ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3901 zcmaLYX`38X6$kJ^zy;J0jSAv|?K0KMRCj=c*e>LD*Qu_`+*-W%R%Y5vEXFWEBr}2O zpyCF|=Du&Z;|ltk55r48hi^Rp)90aj=9$Oy<kqk5Ip^N$>YD0IlIdGkR#uK5;{(SH z3s$aUZ@PXl0X>e%sF&uw!mMT{>ZMVyi29>w7)K|Ek?TdCqRlh?L9te6@u_}nlGxO7 zX5!k!-o}CA#t(X2H-p*@8b9ohhViN4us<Be!{PAcaCo{uICHu`8q{VIOp=(SHPh1A z)L3h5V+u0m)Re*0wejBg#so4UH6a`K`eRxhQ#7V{e2ylg!GxlTH52P5RXGWFCXq`L zmr$Bmn>b1?grqGf>QU6E=p@CS`16^BjHgLOlR#8cN@NqVDU}l{6DmE`5xD_5A~z#% zDXbAUhKxc@p`r6cn<nj#(l|@Wr8%X!O)HnWYD&?R!nCBRGg)jhW3wvBswSKH+=QHL zz8>f6gWOVH@V`1Qr+Jy@rO(Tdht)h}d1(2z*5hV<(5#o0HGOLeYrHkVCKoJ!QvN_` z-=?v(wYA>bnYFF0jIAnLJL_WW$u?wXv2E+ZObd$n>ntb~d0Es|5hA(EsH9L%smw!J zZIr$$eJHsU^2#LDn5yx)YU-*osj9kiQRRxtg{leFMqWq5+VB@q*4eDKhRbzLwaaT) zx!%M@eHR-y=s8n3Q#vyI5FDkB_&m70bftIIn7=Al6+W*0xW`X|KeFfVJzwYh<nP;8 z&ilp(e)5HHoS*ry>O<5Ekq>Ki;J*xVfqY1-ki~c`Srzd87NO2U<HE&JXxpa98%K>R z8$Uj8?0Iq<dAX5?%`>Mr&14pbnUDFgTnHE2sNY7u&C9k3ZSC4NYTLZlx5KiN(N;6x z*`IG+-n+K5zq|d=_5-_@_qLL&mmc5U*}FF1;@RchtB>q#&G#>DUAnS8pYP1K9^Srk zrJe8W&9Cmqk3R9=W3N8>pBG=d?!=oH8!Phm;SI!i!=fZ&t}o>Qk;j`0Z{&ek7Wp^w zfNxT9EzI%u!<%>@Am%r#Z&lx>zMVxt^x=mC-l85?-=V%!J;5T566@c^1HM~*k9w<m zoBCcB0nvZE`abpjECQnb0ri9G9W3GwIW9!shj_rA`e7CUk^hMLQT1ai0;0aEMl1p% z-&a4benP#IMJ$W{H6Acl2kKBg$s!>7?o#ho?_m+kqVE(Bcv`)eMI0si&Pa73=AYyN zN9w24PqPS!`e)S7vIvO$ed<}&un36ySe>wlWl>LfKvGi{0g<1onVPeRWzlzz2V7V2 zE@NKsKrD-VDcOS}U-5wWO@N<Mo$6TxL_J`_@&80$BV7wIKhFbhXntAbH?=-fKd*hu zqVIy%x73U37u1$TK=j|QZnFr8{1??r>I3Qyi-72RP<@C+K;$1*FS7`U{Fl^6)GO+) zy2m0Q`mbWb0Wp6R6ON-q{V^VJp9cbBKF5S(S>&(rfRC$RW)Vk;zOV3rUsaz_zovd& z{RWGG=>MkrE%izDDfMaf+bjZN-81U5>T~Mz>I*CaqW?SUch&Ey-&cR2{*XmLtoxDr zWA!KMPgw*+-_J1NI7-xi&IA5}2Vz;|f5`*>iU$H>{%iF&>Wk`c)!(s*WwGw}Jm4SH zKe7mj{GTx4fSCVTeM$X``d1cllvwvSsU8&hzw?0q(E75-|5NKPtFNg4Qva>qe?6aY z+_+%nIJ^ai8x9^MCtY&Z9i&gD30BBix3=r+&bn&1_Nc1-mdU1PU*EagUUJ<Aa&}Zs z3MXFQK&EmZU9;p4ZE$Ex*g$gf36g{Rb=!AUX^{)bS+`cs<l=IJ-JMIH<ho|5;(;!H zx#dg_hgxLX<+|(2g`|*R7nycBDacf+a&ei;b>%+`X_15Eq(we~tmxKCwQH8OlIxa9 zwJUVD-!1D_Nbb-lO;$J#T~emq#pOXspKN~uE4pPhrm}N)A!+GyXVKE#psbat6l5wZ mWZLZ_SCc+D$bQ{g$zfwWm}5BMxP8IOn!bb2sW08UDEtrP(PZfW diff --git a/.vs/minimoke/FileContentIndex/0be09d6d-0426-4af2-bc57-cfa37326716c.vsidx b/.vs/minimoke/FileContentIndex/0be09d6d-0426-4af2-bc57-cfa37326716c.vsidx deleted file mode 100644 index 33bb2c830d296742c083522eb36d10aee13d396e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63612 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 bWc<GS_djs||6e;>H@DtX|NpIDssH~k^F+7d diff --git a/.vs/minimoke/FileContentIndex/2099b974-40cc-4214-ac4a-e988077b281f.vsidx b/.vs/minimoke/FileContentIndex/2099b974-40cc-4214-ac4a-e988077b281f.vsidx deleted file mode 100644 index b9d9f206bef70b9e762ba6f30484a262a3981ed3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2602 zcmeH}U5eZ=49BNmw1q+s(6_vd16?Qku*))UN~|Q_ku4)DI}?^A$Ln2sfF7cUDD^P2 z&^vUD(ceY}OFs*&-i@C(o6Vn-DdYWFHgAglczfQwD^m5lYVcKn?F6P8OchMMGp#kZ zt&z$cAL=IDq{-gZ7Mz7-6WB~v(ayQ4iW8b7&79kM*V?<bt#8}*zHT1w>s^zeS8xu- z2s8i@&<p_~jt~`6f}BASbO4>Ys_t;xq3Is6-!(m&o}ee`IrjS98F5Y=krQ;!il#zS zqq#+!v1jZRG2wtn4r7n8*o?`bG$@F&U?$WXET?orP56X(gaKvnICvUZ2H_FSh&o0b z1ttp<(8O-yd0Mgu^+<ki{l4*pK9re!9DVdYW*^n-*6ZYTEwS(Iyl>`xWP+L?5M%-+ z_e>?a5(g!sVi%&77>JpYkXXt{Gty#dO##M$HlPL{Ln`@~giJ(@BSx>04>5Dh8r77W z860=W-6M~}(J?0$!xC7OXXS%WrcF?Cj%ivFL2;*qNqiEPsuxp>1!*dQAP@xy!6-fo zcLj-X$TsD!DwK0!>h~p?!ZNeuJZFVGhrDFnW;K=GBrWfXqL_7Ho$Lwr#CpOPG)?-l z({-JLpL6#F^n`No@!<9NaDRk;vASeiU_a~2YU<U;HOab~b@i{Md#dCwAJ3)x=`2@! oC2%EhC2%EhCGg)8c>Nzg{6pZh{(9MeyXenL+xP3Dzb~!fU!8uyNB{r; diff --git a/.vs/minimoke/FileContentIndex/d83fd0c8-b937-441d-9691-f2de6420a626.vsidx b/.vs/minimoke/FileContentIndex/d83fd0c8-b937-441d-9691-f2de6420a626.vsidx deleted file mode 100644 index d005c7508d8746d707340afab198f132a04b3131..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5947 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 diff --git a/.vs/minimoke/v17/.wsuo b/.vs/minimoke/v17/.wsuo index ec85072c95ebb78e21297f627dc5bda11eed08a5..5d1c69e4bf2fb683d17e73b622966d935f56d427 100644 GIT binary patch delta 4387 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 delta 2062 zcmd5-Uuaup6u;k1Zku%X_RrF}G)<HKN$aRhP1|INwcGBRH2s$*GwwmALK9QnSevO! zr0c4=1OFg{k=_G3-!>cr#fNQq@j)<xu=%7z5PXroID8RBj5L$3o^!poMsTPF!9#w0 z=lst1o$ou}J?D#ZkykcYaf}Jq4>a+t9=dpU<MY3SSAKfuYu3(jT-gmP{0e&-DttoR zg+v!(3k7cXcpzs|7Gxw&B1q~Ho8;Byo<5q9mk?wU*Mzzi(SX>k^AtRQ*ozQ#j^;O$ z4ygtkEIK-+F|>LSeTV@_nfD4_)PktFJNBd2f(RiVL5w0EMbM6Wphfs$ZN5|GV|tc9 z4o>{@EWI+uF|wpnkywzUY$-lvNF0fTr?CZEk$C{osCy_c^4f8<={l`6?!$px08Ti1 zcAR4y<#>Jm5?h;B!0fP#^f@RzT{U<d<!NI-8V~4BgF9SfM^K;8?MWP`5Yvbm#4I8P zT@AM8$52Zm9!F3VIMVKcCytLnrok!Xkj%pi7Ps^=YOm;1wtzX>{~zbFZl4RPyJjSY z32d40m^4yx*BzlVbFd=DEk^AU&k|4(6Jl+NYIGd(Qe0v@u5#9d5$DjLxFo6={?9fN zw2h#;=W`2{o{@%d42_RqXn9s7$`B-Se<nW3`czj~(iT!*(oC(%l}R%!yH=S16<1u+ z`jcLUZGX<4fUs={%26{Dp=z5IsR^l^jVYyE>#K}yK(*&A{OoZ;(UW1LQ1KL)1@gV; zReJ<J<$XdFmwW(c><PHV57c?kdT2M?wZ|<+3u*TphJ0H>6wq5&vxP8@27mwEg(~_v z*zB4VUHUTPbWlEp33e+?hHCe$NIgqE`iDD<?w*)P?cQNH)}s4BPMYatoNvIl8ci*p zUN{N&hCDE+999)8CU|D}X7jgieDT@AUoV{heqjCWYu2w;fxUDM<o-ce?^mJxdKrAY zrCxW!?b9~66m>N%rA}mP78$(SH)S#28STsD`V@8uDt!r&I=sy|8x`q6$Uj&R=(SAW z=i0ygcd@irDUI<+Ou+h=FohzY&8ZJ7_-W4-3abCsjw?@E#i;bJz;TRQ)UPpSikx}| zl;Ly0-uze{88c<M9Bg$=Xmz{O617s}lGNsKqagEt`Ki>T(k<g;hM=o|ZT>@HaQl z-kFxiFL#83@4o-u@jKJ-R?-FKqyqACL_ONN{X^SdnmYQSP%0min=zKSPme{f1YAry zp_jM+?MfalKlLJP&U{xo_T*Lm#<)`NyNgddb-5=qG89Y)14G_GD3kX31H&nA+BY)d u4f&r9WrF@pY9Y9v=dQq7Y_wFIYvq}yLUC@x%yW_7`OaL6xuh&9jlTh+Y!EmA diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite index 3a9037579e96cb40ae4f99c9a04191c8055e9fe8..3c073a60d44e469bb26e35a19f9b85368deed5f3 100644 GIT binary patch delta 1241 zcmZWpPiP!<6n?+X>@PcU_xE;_ZkFB6&Q4h+?IGL5Eo~EeXowL6V}cS7Ml(CvjLFDm zciow;<Y2oe1rezZRVziI#7pr~S3HQd6)`PB4i*nqL6o*20jqfEA5v)F>}HyT%wZVb z_r33Z-@M;U<5Hk;DR45y)c1QwnR>p!(;fNY0|UcP4!DcyAK8IsUj3PcWIP9W71!`0 zo@++6PjGLyEcGi-TP5>_qERlJwNazEU`8crpE6mi)U7$QHdb~lXUV;~zn^Je4zP$E z22kC=(V<}IW@t4W53M%$MBWa$tIu}76w6+Ja66%L$U>0odUdJj$?1CV_k|V&0Pzec z+%{`<vzDta5ug-4OlV$*!i)BTQJXia)m+i*7@CsKWK$dtDGGP1GqFBjCY|K4k12e? zD3x^EEZY@NOYvd1KCT8@^W4+pnT@9l<MAV{TC#_RQM0aFWy{fZ>U_-aOvE_sA#6#v z-!RSUR>+M!*K?wsue(i}-APJzdD`2eKXSD@${|kL$E>Yhdm|kBsA@ZgbIjIfjcrNd z$RXWE=gnModNX58a7Yj`XB4-|h1+t)O4+GZN{%tR6-|bA*bDm6KbY8v*VD-%MHxuq zRcqdUMCegA>LtUr&CPl=$f29oZP!{$^G-m#gM+u`=f_5#8XwCo&iO-PoHPhnG^{ci z^UJ9Kxdz2OH4#m;UU8SqAx4^WhGY07_u@pXy@0M=Z8SG;IX)U?Z5O$^?Uy>mB&Z?} z_#gg-_r!0wh;i|gIEq317~jQd@iI>0uec)K!f!+#-xTM?Y5W40aTEu!Pn5(xu_o5& z$ZlRuRr@pS=4aBqR15j17^N)Ra&)z3Y33A5VF6Tp5%50V!T<3e{2Q<1A9xL?(R9_q z-d%WtzQ73XmL-K{WC@r`nt`<Uq`9wEJ{l8QvM&SPqPDx@Yte<Th;^|n*6=-S;4@+X zkKix(J;nG+$XF5Yh}ZFRJcIq1z_1t**TfZZg=TygcID$4Pd&_h%Mm#X+dYpQ|ABFa zD}XE1^DPDrGa07bPcu&>2M^^A=JE&ghll7sm>=pSDTbE;FB9_uG3BX##r-Vv_zouh yDu{WDGBl%&8`vA6Eir|0P4bpB{6MO=wblXGiSaLX0LT(kw6hKE>`85z6&?aah;tqQ delta 1065 zcmZWnPe>F|7=NR)&mG%+-|Xt{uzzMp@n9X?)P*GRpqPiCP3h1fYiGxG(vAJs&S-eZ zJQYNQHCPE9LhRPXHaY~AAxQ*6Nrx<mB7zVK=~9wVZ+Dz^#W{S;`+nc|d%xfNzNtmq z)S_)Vzz8>jy^OFB$6`%;XWOC9)(#^rzGNbWNa!tNuYy$stFT^h-CG7@^<WDlJ#1xo z79k`Vw(i4rr_YHT-yAE2M*fP!SUFaAii_Xk|M@}~H6c5e<=jL<NsOwpZ2ve~f&>vG z32|6c^W$nhoSP^EK@&)%l4?e;0Ga|Ab#NRuaxqV{RW154I>2yvR7s^|P0eW8A{S@D z#&|SjE8S<zMy2h)r%|D+l=FM3JlZVF$xKq0W!kyV>hyUqYNXhNtX)vmTqR`i$Gw+K ze|2Wj(B2}yyU4xEdRbMy3nPJYk0mR$26>E{X;#w}eN2;wlwD2)z(_RF5jC6}-0|ok z82KnNtR!~PIZe7mHlydWDP0+=ME#CE^6ZxNoBiANytNnws0T`MHaVh|3%uNRKBZ`y zx|4U=F{-2E*76C9OQ<oYd7`i9NVG4U9<~4vrW|zsX(gGV!mM<_MpYxunCW-<N>A)& zG4fE(VMSN0BI9|##~gsW%0$B>N!>zSjHx0#u34$t;-ZoWf(`fro8$weK_IV5H`w70 ziNQ4(gaLRD%j7aVArZJp7RW3-AOkQDz0d~DBt<sKIwjfp3ZaJ2P9qW%gU)J+DQ~e@ zJe5~BSV+ZY7?E~Ka1y~5{Dxof1HQvo_ylX9LL3H-V0?eU)xbkNTg@>NTaB1dF^I(w zG|pvj_Z9mIi{K~i`a>QQH=H4V$vjzy>!cl~;3#y#J9t4(!z02%mRu$0;XY}CyU+qY saFQOfMqbf7o;eM6QVJ1PLKTWj#|p_klS@p2UEGr9Hu$+Wd?`-<2SM5{Hvj+t diff --git a/client.py b/client.py new file mode 100644 index 0000000..54bf361 --- /dev/null +++ b/client.py @@ -0,0 +1,12 @@ +from msl.loadlib import Client64 + + +class Client(Client64): + + def __init__(self): + # pass the server file we just created in module32=, the host am using is localhost, leave port as none for self assigning + super(Client, self).__init__(module32='server', host="127.0.0.1", port=None) + + # define a function that calls the an existing server function and passes the args + def fsl_command(self, com, doc): + return self.request32('fsl_command', com, doc) diff --git a/cshargapp.c b/cshargapp.c deleted file mode 100644 index 251dfd9..0000000 --- a/cshargapp.c +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Threading; -using MagnetPhysik; - -namespace SensorApp -{ - class Program - { - static void Main(string[] args) - { - HallProbe hally = new HallProbe(); - - for (int i = 0; i < 100; i++) - { - Console.WriteLine(hally.Tesla); - Thread.Sleep(500); - } - } - } -} diff --git a/hall_probe.py b/hall_probe.py deleted file mode 100644 index 69b9812..0000000 --- a/hall_probe.py +++ /dev/null @@ -1,14 +0,0 @@ -import subprocess -import time - -# Call the 32-bit application -process = subprocess.Popen(['path/to/SensorApp.exe'], stdout=subprocess.PIPE, text=True) - -# Read and print output -for x in range(100): - output = process.stdout.readline().strip() # strip() removes the newline - print("Field[T]: ", output) - time.sleep(0.5) - -# Make sure the process has finished -process.communicate() diff --git a/main.py b/main.py index b0cc767..7620359 100644 --- a/main.py +++ b/main.py @@ -4,7 +4,6 @@ from pylablib.devices import Thorlabs from pymeasure.experiment import unique_filename from pymeasure.experiment import Results -from pymeasure.display.widgets import TableWidget from pymeasure.display.Qt import QtWidgets import logging @@ -27,20 +26,11 @@ class MainWindow(UIWindown): displays=['acq_time', 'freq'], x_axis='Iteration', y_axis='Voltage', - widget_list=tuple([TableWidget("Experiment Table", - B_Sweep.DATA_COLUMNS, - by_column=True, - ), - ControlTab("Manual control")]), + widget_list=tuple([ControlTab("Manual control")]), directory_input=True ) self.setWindowTitle('Mini MOKE') self.directory = 'data' - try: - for device in Thorlabs.list_kinesis_devices(): - log.info("Thorlab device connected: ",device[1], "with serial number: ", device[0]) - except: - pass def queue(self, procedure=None): direc = self.directory + '/' + datetime.now().strftime('%Y-%m') diff --git a/server.py b/server.py new file mode 100644 index 0000000..7a35913 --- /dev/null +++ b/server.py @@ -0,0 +1,15 @@ +#server.py +from msl.loadlib import Server32 + + +class Server(Server32): + # the init takes mandatory host and port as arguments + def __init__(self, host, port, **kwargs): + # using windll since this application is being run in windows, other options such as cdll exists + # this assumes that the dll file is in the same directory as this file + super(Server, self).__init__('C:/Program Files (x86)/Magnet-Physik/USB Teslameter/MagnetPhysik.Usb.dll', 'net', host, port) + + # define a function that is to be called with the required arguments + def fsl_command(self, com, doc): + #the server32 exposes the loaded dll as lib, which you can then use to call the dll functions and pass the required arguments + return 0 \ No newline at end of file diff --git a/src/classes/controltab.py b/src/classes/controltab.py index f36e2fd..95857af 100644 --- a/src/classes/controltab.py +++ b/src/classes/controltab.py @@ -30,17 +30,17 @@ class ControlTab(TabWidget, QtWidgets.QWidget): layout.addWidget(self.go_button, 0, 3) self.x_label = QtWidgets.QLabel("X Position:") - self.x_value = QtWidgets.QLabel(self.stage.get_x_pos()) + self.x_value = QtWidgets.QLabel(self.stage.get_x_pos_str()) layout.addWidget(self.x_label, 1, 0) layout.addWidget(self.x_value, 1, 1) self.y_label = QtWidgets.QLabel("Y Position:") - self.y_value = QtWidgets.QLabel(self.stage.get_y_pos()) + self.y_value = QtWidgets.QLabel(self.stage.get_y_pos_str()) layout.addWidget(self.y_label, 2, 0) layout.addWidget(self.y_value, 2, 1) self.z_label = QtWidgets.QLabel("Focus Position:") - self.z_value = QtWidgets.QLabel(self.stage.get_z_pos()) + self.z_value = QtWidgets.QLabel(self.stage.get_z_pos_str()) layout.addWidget(self.z_label, 3, 0) layout.addWidget(self.z_value, 3, 1) @@ -175,6 +175,6 @@ class ControlTab(TabWidget, QtWidgets.QWidget): self.update_positions() def update_positions(self): - self.x_value.setText(self.stage.get_x_pos()) - self.y_value.setText(self.stage.get_y_pos()) - self.z_value.setText(self.stage.get_z_pos()) \ No newline at end of file + self.x_value.setText(self.stage.get_x_pos_str()) + self.y_value.setText(self.stage.get_y_pos_str()) + self.z_value.setText(self.stage.get_z_pos_str()) \ No newline at end of file diff --git a/src/classes/hall_sensor.py b/src/classes/hall_sensor.py index dfacb35..e6e4b00 100644 --- a/src/classes/hall_sensor.py +++ b/src/classes/hall_sensor.py @@ -1,20 +1,31 @@ -import time -import sys -import clr -import platform - -# Load the DLL -sys.path.append(r"C:/Program Files (x86)/Magnet-Physik/USB Teslameter/") -clr.AddReference("MagnetPhysik.Usb") - -from MagnetPhysik import HallProbe +import subprocess +from time import sleep class HallSensor(): def __init__(self): - self.hall_probe = HallProbe() + pass def read_mT(self): """ Returns the value measured by the sensor in mT """ - return self.hall_probe.Tesla / 1000. \ No newline at end of file + process = subprocess.Popen(['src/hallsensor/read/bin/Release/net6.0/read.exe'], stdout=subprocess.PIPE, text=True) + line = "" + for i in range(100): + line = process.stdout.readline().strip() + if (line.startswith('Field')): + break + return float(line.split(':')[1]) * 1000. + + def zeroing(self): + """ + Zeroing the probe, should be done at 0 magnetic field + """ + process = subprocess.Popen(['src/hallsensor/zeroing/bin/Release/net6.0/zeroing.exe'], stdout=subprocess.PIPE, text=True) + line = "" + for i in range(100): + line = process.stdout.readline().strip() + if (line.startswith('Done')): + return True + sleep(0.02) + return False \ No newline at end of file diff --git a/src/classes/stage.py b/src/classes/stage.py index 352329a..d14d796 100644 --- a/src/classes/stage.py +++ b/src/classes/stage.py @@ -144,20 +144,38 @@ class Stage(): # GET THE POSITION ################################################################# - def get_x_pos(self): + def get_x_pos_str(self) -> str: if self.open: return f"{(self.motor_x.get_position(scale=False) - self.offset_x) / 46694.:.{3}f}mm" else: return "?" - def get_y_pos(self): + def get_y_pos_str(self) -> str: if self.open: return f"{(self.motor_y.get_position(scale=False) - self.offset_y) / 46694.:.{3}f}mm" else: return "?" - def get_z_pos(self): + def get_z_pos_str(self) -> str: if self.open: return f"{(self.motor_z.get_position(scale=False) - self.offset_z) / 46694.:.{3}f}mm" else: - return "?" \ No newline at end of file + return "?" + + def get_x_pos(self) -> float: + if self.open: + return (self.motor_x.get_position(scale=False) - self.offset_x) / 46694. + else: + return float('nan') + + def get_y_pos(self) -> float: + if self.open: + return (self.motor_y.get_position(scale=False) - self.offset_y) / 46694. + else: + return float('nan') + + def get_z_pos(self) -> float: + if self.open: + return (self.motor_z.get_position(scale=False) - self.offset_z) / 46694. + else: + return float('nan') \ No newline at end of file diff --git a/src/hallsensor/read/Program.cs b/src/hallsensor/read/Program.cs new file mode 100644 index 0000000..5c71008 --- /dev/null +++ b/src/hallsensor/read/Program.cs @@ -0,0 +1,16 @@ +using MagnetPhysik; + +namespace SensorApp +{ + class Program + { + static void Main(string[] args) + { + HallProbe hally = new HallProbe(); + + hally.Range = 8; + + Console.WriteLine("Field:" + (hally.Tesla).ToString()); + } + } +} \ No newline at end of file diff --git a/src/hallsensor/read/read.csproj b/src/hallsensor/read/read.csproj new file mode 100644 index 0000000..b462c61 --- /dev/null +++ b/src/hallsensor/read/read.csproj @@ -0,0 +1,16 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <OutputType>Exe</OutputType> + <TargetFramework>net6.0</TargetFramework> + <ImplicitUsings>enable</ImplicitUsings> + <Nullable>enable</Nullable> + </PropertyGroup> + + <ItemGroup> + <Reference Include="MagnetPhysik.Usb"> + <HintPath>..\..\..\..\..\..\..\Program Files (x86)\Magnet-Physik\USB Teslameter\MagnetPhysik.Usb.dll</HintPath> + </Reference> + </ItemGroup> + +</Project> diff --git a/src/hallsensor/read/read.sln b/src/hallsensor/read/read.sln new file mode 100644 index 0000000..c0481ea --- /dev/null +++ b/src/hallsensor/read/read.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.6.33723.286 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "read", "read.csproj", "{B43E7DBF-F27A-4A85-B7BE-AA15D3623492}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B43E7DBF-F27A-4A85-B7BE-AA15D3623492}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B43E7DBF-F27A-4A85-B7BE-AA15D3623492}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B43E7DBF-F27A-4A85-B7BE-AA15D3623492}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B43E7DBF-F27A-4A85-B7BE-AA15D3623492}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {12BD2CD8-C47E-4E85-9CD3-60A276BB70A7} + EndGlobalSection +EndGlobal diff --git a/src/hallsensor/zeroing/Program.cs b/src/hallsensor/zeroing/Program.cs new file mode 100644 index 0000000..aacd505 --- /dev/null +++ b/src/hallsensor/zeroing/Program.cs @@ -0,0 +1,18 @@ +using MagnetPhysik; + +namespace SensorApp +{ + class Program + { + static void Main(string[] args) + { + HallProbe hally = new HallProbe(); + + hally.Zero = true; + + while (hally.Zero) { } + + Console.WriteLine("Done"); + } + } +} \ No newline at end of file diff --git a/src/hallsensor/zeroing/zeroing.csproj b/src/hallsensor/zeroing/zeroing.csproj new file mode 100644 index 0000000..b462c61 --- /dev/null +++ b/src/hallsensor/zeroing/zeroing.csproj @@ -0,0 +1,16 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <OutputType>Exe</OutputType> + <TargetFramework>net6.0</TargetFramework> + <ImplicitUsings>enable</ImplicitUsings> + <Nullable>enable</Nullable> + </PropertyGroup> + + <ItemGroup> + <Reference Include="MagnetPhysik.Usb"> + <HintPath>..\..\..\..\..\..\..\Program Files (x86)\Magnet-Physik\USB Teslameter\MagnetPhysik.Usb.dll</HintPath> + </Reference> + </ItemGroup> + +</Project> diff --git a/src/hallsensor/zeroing/zeroing.sln b/src/hallsensor/zeroing/zeroing.sln new file mode 100644 index 0000000..165a6ad --- /dev/null +++ b/src/hallsensor/zeroing/zeroing.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.6.33723.286 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "zeroing", "zeroing.csproj", "{85BC8862-612D-4A2B-B01C-82BD931B11E0}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {85BC8862-612D-4A2B-B01C-82BD931B11E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {85BC8862-612D-4A2B-B01C-82BD931B11E0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {85BC8862-612D-4A2B-B01C-82BD931B11E0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {85BC8862-612D-4A2B-B01C-82BD931B11E0}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {903BD3EF-37F9-4E2A-B36E-853EBF911C38} + EndGlobalSection +EndGlobal diff --git a/src/procedures/b_sweep.py b/src/procedures/b_sweep.py index d2958d3..9dee8b9 100644 --- a/src/procedures/b_sweep.py +++ b/src/procedures/b_sweep.py @@ -7,6 +7,7 @@ from pymeasure.experiment import Procedure, IntegerParameter, FloatParameter from ..classes.stage import Stage from ..classes.dac import DAC +from ..classes.hall_sensor import HallSensor log = logging.getLogger(__name__) log.addHandler(logging.NullHandler()) @@ -15,8 +16,8 @@ class B_Sweep(Procedure): name = "B-Sweep" acq_time = FloatParameter('Aquisition time', units='s', default=1) freq = FloatParameter('Aquisition Frequency', units='Hz', default=50) - b_min = FloatParameter('From B (max 6A)', units='A', minimum=0., maximum=6., default=0) - b_max = FloatParameter('To B (max 6A)', units='A', minimum=0., maximum=6., default=5) + b_min = FloatParameter('From B (max 6A)', units='A', minimum=-6., maximum=6., default=0) + b_max = FloatParameter('To B (max 6A)', units='A', minimum=-6., maximum=6., default=5) b_step = FloatParameter('Step', units='A', default=0.1) x = FloatParameter('Position x', units='mm', default=0) y = FloatParameter('Position y', units='mm', default=0) @@ -31,8 +32,9 @@ class B_Sweep(Procedure): voltage = DAC("ai0") field = DAC("ao1") + hall_sensor = HallSensor() - b_values = np.linspace(self.b_min, self.b_max, int((self.b_max-self.b_min)//self.b_step + 1), endpoint=True) + b_values = np.linspace(self.b_min, self.b_max, int(np.abs(self.b_max-self.b_min)//self.b_step + 2), endpoint=True) field.write(self.b_min) @@ -61,7 +63,10 @@ class B_Sweep(Procedure): data = { 'Iteration': i, + 'X Position': stage.get_x_pos(), + 'Y Position': stage.get_y_pos(), 'Magnetic Field [A]': b_values[i], + 'Magnetic Field [mT]': hall_sensor.read_mT(), 'Voltage': np.mean(average_voltage) } diff --git a/src/procedures/x_sweep.py b/src/procedures/x_sweep.py index ed8ba06..9194f1e 100644 --- a/src/procedures/x_sweep.py +++ b/src/procedures/x_sweep.py @@ -7,6 +7,7 @@ from pymeasure.experiment import Procedure, IntegerParameter, FloatParameter from ..classes.stage import Stage from ..classes.dac import DAC +from ..classes.hall_sensor import HallSensor log = logging.getLogger(__name__) log.addHandler(logging.NullHandler()) @@ -31,8 +32,9 @@ class X_Sweep(Procedure): voltage = DAC("ai0") field = DAC("ao1") + hall_sensor = HallSensor() - x_positions = np.linspace(self.x_min, self.x_max, int((self.x_max-self.x_min)//self.x_step+1), endpoint=True) + x_positions = np.linspace(self.x_min, self.x_max, int((self.x_max-self.x_min)//self.x_step+2), endpoint=True) field.write(self.field) @@ -60,6 +62,9 @@ class X_Sweep(Procedure): data = { 'Iteration': i, 'X Position': x_positions[i], + 'Y Position': stage.get_y_pos(), + 'Magnetic Field [A]': field, + 'Magnetic Field [mT]': hall_sensor.read_mT(), 'Voltage': np.mean(average_voltage) } diff --git a/src/procedures/y_sweep.py b/src/procedures/y_sweep.py index 2acdef5..531d2f2 100644 --- a/src/procedures/y_sweep.py +++ b/src/procedures/y_sweep.py @@ -7,6 +7,7 @@ from pymeasure.experiment import Procedure, IntegerParameter, FloatParameter from ..classes.stage import Stage from ..classes.dac import DAC +from ..classes.hall_sensor import HallSensor log = logging.getLogger(__name__) log.addHandler(logging.NullHandler()) @@ -31,8 +32,9 @@ class Y_Sweep(Procedure): voltage = DAC("ai0") field = DAC("ao1") + hall_sensor = HallSensor() - y_positions = np.linspace(self.y_min, self.y_max, int((self.y_max-self.y_min)//self.y_step+1), endpoint=True) + y_positions = np.linspace(self.y_min, self.y_max, int((self.y_max-self.y_min)//self.y_step+2), endpoint=True) field.write(self.field) @@ -59,7 +61,10 @@ class Y_Sweep(Procedure): sleep(1/self.freq) data = { 'Iteration': i, + 'X Position': stage.get_x_pos(), 'Y Position': y_positions[i], + 'Magnetic Field [A]': field, + 'Magnetic Field [mT]': hall_sensor.read_mT(), 'Voltage': np.mean(average_voltage) } -- GitLab