diff --git a/sources/RoboforkApp.AWS/App.config b/sources/RoboforkApp.AWS/App.config index a70df3f..5bcf9b7 100644 --- a/sources/RoboforkApp.AWS/App.config +++ b/sources/RoboforkApp.AWS/App.config @@ -3,6 +3,8 @@ + + diff --git a/sources/RoboforkApp.AWS/DynamoDb/DynamoService.cs b/sources/RoboforkApp.AWS/DynamoDb/DynamoService.cs index 92a2bc8..237092a 100644 --- a/sources/RoboforkApp.AWS/DynamoDb/DynamoService.cs +++ b/sources/RoboforkApp.AWS/DynamoDb/DynamoService.cs @@ -2,17 +2,21 @@ using Amazon.DynamoDBv2; using Amazon.DynamoDBv2.DataModel; using RoboforkApp.AWS.Contracts; +using Amazon; namespace RoboforkApp.AWS.DynamoDb { public class DynamoService : ITableDataService { + const string AWS_ACCESS_KEY = "AKIAI3CHRBBEA5I4WOMA"; + const string AWS_SECRET_KEY = "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"; + public readonly DynamoDBContext DbContext; public AmazonDynamoDBClient DynamoClient; public DynamoService() { - DynamoClient = new AmazonDynamoDBClient(); + DynamoClient = new AmazonDynamoDBClient(AWS_ACCESS_KEY, AWS_SECRET_KEY, RegionEndpoint.APNortheast1); DbContext = new DynamoDBContext(DynamoClient, new DynamoDBContextConfig { diff --git a/sources/RoboforkApp.sln b/sources/RoboforkApp.sln index 2f40ac3..89daa9d 100644 --- a/sources/RoboforkApp.sln +++ b/sources/RoboforkApp.sln @@ -5,6 +5,8 @@ VisualStudioVersion = 12.0.21005.1 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RoboforkApp", "RoboforkApp\RoboforkApp.csproj", "{4946722F-CFFF-4FC6-B1C1-A6107316A58C}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RoboforkApp.AWS", "RoboforkApp.AWS\RoboforkApp.AWS.csproj", "{A4DB3A6A-7959-4517-844B-4D00AE09436C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -15,6 +17,10 @@ Global {4946722F-CFFF-4FC6-B1C1-A6107316A58C}.Debug|Any CPU.Build.0 = Debug|Any CPU {4946722F-CFFF-4FC6-B1C1-A6107316A58C}.Release|Any CPU.ActiveCfg = Release|Any CPU {4946722F-CFFF-4FC6-B1C1-A6107316A58C}.Release|Any CPU.Build.0 = Release|Any CPU + {A4DB3A6A-7959-4517-844B-4D00AE09436C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A4DB3A6A-7959-4517-844B-4D00AE09436C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A4DB3A6A-7959-4517-844B-4D00AE09436C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A4DB3A6A-7959-4517-844B-4D00AE09436C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/sources/RoboforkApp.v12.suo b/sources/RoboforkApp.v12.suo index 38015a6060c2193ae2b7024eb95630a695c5e966..fa38290eb54b5c3fd95b053a7ab553bbe3040d05 100644 GIT binary patch delta 9333 zcmeHNd0f=h+CR^aVVF^tVHFi{SY#1UKvYbVfpHfR1=mPLf$~O*in}qRSyGX~oa9(p zDG`>pyy|ov(yoGLrMCsmw|ce3Y_s)hnc))L@0nq6)ar9v-h1Ca?$6J6p5J-S@;l4- zJkN6unw!1M&0bZ5L;Ewv+=14%wl)an2CM*X1!DO8V*_@SmXbv&@lFcu7AiI$r3z%2 z*YV}ba%G^x&npvnb-x59lkvrFW3>#ew0WWgKT;aWlN9&chae#p@<{-GlqFmqZ|G#w z7jg;^4)_DXz*OKiK=!Q^G8RY&<^tV;9zZ6b2f6}dd4bAkT8X#GfE<+u$ODW(05AX; z49FJCA?E{0z&M~AFcI(of`Ge#5MUbM2c!VK067{j;7>pXAbT&{y9w_j7&9>)UgWSR zv}bA|Zv^6jp+F9h3uFTZAQeakihxDHEx<@%Ca@Hk4MYOdf#JX`;AS8VkRM+Hc{`8~ z{Ma_Ft<4871;7G87MKS)5J&_T17m>kfXtK69K3e|`T%#g>+gV+Yc&J13or@bm#Ne{ zNu<61J9%LLD1MxLkh3QrxwcXcgZwET$UG+x9(wnSgmP^j zNO!DwJYRIch<5JMw4+XdJWpVNCMN-v)(4@IxcNpQhJuEq%yg56m_Exn*jF)!~;=$)V zRdO&q_I!xSPqsDkygoo`oCt%`USj3>1p7X0PA)lqJuI*jDZ_f;#vvRv* ztyFhh=E}3t*66C^T1#2PucM7d^;;-oxmVBihwD`6Hy3fOYk_PMM#)XN|Xpqq#HOhh^<(7KknwuBLWVUEKmpyX_Li&foI^Pb(l zsCm!D)#tXq^!7i{&yKlftcHexxcP_aW=zG4*c=C;|2y{caHO*%;Gj`P9|c}Ou7&&Q3+Wfb*gKF#aR^%= zbK((iLmCjh^+dfEL}`bR9t~qZ7`yN-Y>}LB#_lg>?0d-Idk`Z_XL|@_PlFek42NR~ zMP%Q^Sa0YrAAnr~8=rX%UP*@ze1OOr`tVbXy$k(_uO!DoGR?1#EWz#)z1)*pRMvYU7u&PleG*3TFT1W2h~t@u}(jIWy{y* zyyJsZpMH#)cOe~^f%Iam_+yX-Sg8Gw!`-mjkjqtwppf^GJ3@NM5)XuMklt9xnS=52 z5|%((h$lN^Wswf`LSe`$K8)Q2c^V9m7NrjkU3riva7@aFtmUibnQC{dY43IO^b32k zr!ZR-gXzjflZ%&s)h6tXb5Rk_ICJbXF$`O_5Ys&mX@q9&GjeMFM_u%W1Gjy;_~W3{ zSqFBb|JTjP7g7gEuO&}Q4@2fb#=9|*zK@#3sW2sqM^)yV*25kLA@>A!<7CL2K;?Ci znb?twAY1g<43Os|8T%S?EOy`oNEzA7=+goxeHijn?7SV2+P>IrkX`#T7Ke3s4-Rb> ziqC*klNMv`Ae6xr9)WX%G%@`U#`Zul+`!oDC@?j{v86{E8QTbbH+VQ1Ggppa>|3Op zM=>@B>F2Tlq;1)b(0LjH^wH4AVw`fvzB&nO3i;qv#?&bH9geCmBmK$E2p!R}i3Qlz zZYFH=LdG^hvGrCk3G%KI9OzK+#(7{1wHx30i38s)WUL%Jo; zRj@hG|K(0h4)htI=4QwxFf}(pKWrU3kMu5!qunX%ahfH?+Ik>LZH<@`P0}48<{hV{ zTFgTo;IuDUo6!DFC>&1(=$h7ol?7ehFt%v4zEwl)DCm619{~yE<6&fTI z^&z`~do;ynXrM-_eO<*rNz&~o4Im!X^seRTiy9ev$m5aotL`!}mR~r!g53F{H?z6% z&3;syL07FTbaTih}Q4K`w8CPGfYmK_Iq91;u2Zj)OV@*E@lR+j0f zJeaj@S2$ecJ12>LPp8KHp`Bt6%NUFstc^Rjo5@s&IVr*Zy|VWmZun}8=SUS}K5uE? z>y-~~uDGQ<>T_dPQ~$KT@3?>wU$@skhVE|Q6>y{h(h4?ghFp&+O@Qvait)CmU)0(! zr@)ww^|hYc>PZ2FA_f6+)vg3WNZ(nyx$MlHz|LTk>NS{lih1;p_vgoJyK z->uTiEIWBmREkq=)L(2Lr}W}8Up;A>jI05;RLFsBf|SOnAIz^bM#mxLRnIig^*zW{ zp!Iz8=3#U)5Hiw7UKAh?5_^#?hczyS^znuHhTI5=y~$Gj9Je{IL!L(3ISSNQ*jC;Y zk#0F>l!q;A*||z`?clVTVnH~Cc(nUc?i<-P$(6!CZriuj1k|*2{ZW)WgwOFRfYMy<<;Tb z_h2a1$c-)3Jk%B(Mi~0r(rR7uW|h0!_ev z-~jLS|I0766-UN;TZvnELJbJ#vSQz_XC{DC1 z--VPL`hDO7;52#}DF@gk^bC@+-dV_Rf$xBGfIVD8vG`ptfEFfVZ)1UVxFI+M8Cgth zBJ9u0bBO%_89dkF^Y)bzdkV(lsd8dNePLv(h|Tgx%!fM?Nt9RWiMe~?QqxK-1nHW; z5?cpjlix_}6v{n%jM!)Jjc+67`x=LVjLXEjq1@q&R$|A&yl*@db}$TqQH;X8A{mQ7 zJRqIzp|J`(21a~=h-nZSTt7>(J6kz2`G6^_3`)F+ucwK23lr%YtuI8-Hyjpi0q*Zp zU>S|Dh6QYvZJ${=K+#38iLRv`ZuE^yN8(Z+8TYjM(IeUMBTiLFtK(igZ^3Qne@z71 zFX>+h&f%mA;Lr=$SoBetpCzvtzx6Uk z?gZCoBv?HPaO!!&564D13oJo~ynbH@IU0~AL#F?0GB6QWn~d;ZG8yMlJe^m+7jxwX zS(-{`1S_LyZqy~a%lP>%zRWkCN11zQ*&39QR@qt3T4t^!Zf?Mls3A)A&{a7N$U&f7 zUHX;va-)hUlT%ANf^7u!V~6MALNLu^${Vl&Xl-rFKyGe{<)>SMc_U=(gWW!tpI5}7FG>way$(SbPM zWab)2z}Otgp~)WYR|h=fQrBeXHG;!8Skp;7^`tfQzTuU_mU>MmLp((#WoKN2cDtpvcgr!gLx*LJ z8j+bbYP>kxhmz+wE^qXh6x_oxJ;GIK=JlAOY&4vQ#!4~Dg&1Wb^zuwlWKTOjGzqB% z$aS3l6X6{4QLhN4Q*o}6Hw9Pj_`+?}Q#7VhgQ#jIo#FK5_JQ~&#N~kJr{q)mg`$8>`mz=Q42XnfvZFLoqxk9I;exw+?CP! z*#FMv*fx?=HIr$lz29B0>UT$Fcz*uj<-pFaW6GFLuL(JH8-||cCK~^T>g!{vlkM9X zluaUMHt94&hvgcF8FO=N#eL~v4Xv}0n(p+X=R|ccS}RIhDaE$NAAjB#Yhsj@HGz~V zbc&)D->MXYnCVY?+tMKN)YMPH%tr($Q8k^FZbCIgDHG+LC`wd$D=ORc9#pI0IhQ=e zb`w@9B!xU_x1;^WbV?B3*`#roabdk^($PX;&?o`6?J1N)ym@AtEp0GOP@}@;A<84- zF+WA`elN;y5Hyh%?J}Zid)LI7(YRNwusuG8;x(8mbbpD+Or(*vksGLiL}myLrhCL+ z49d&4b$PUa#L0Li!WOZBZuJop0+lR&rcEPG-cHftn*<6I%T?%VzCsqM^Ay>I6d2aO@%?7 zomPn)X{|GzAgZ)Vf>>QeeZ=O~lqXiNrXIq)n!+haR&)ztcDZW}xv50TAxgVKdK*Z; zk=*98C89}9fwsA`lr36{73JM1x?3tf9Xk~JsQ@QxXmC0LxR+hfLNNZ~cKp{I`pN*xdv1CUG2eV`vuhpTNQ!tXO#Og}8SxuT%_VYy2CTNo?Cooy6!y3a(kEglSam z6~!w{l{638P$pW1_sf6-MqKVVYMOUMxvg{PapN7WL%I&UdJ9f?756Ez&I)nDyh1T>-}od)&1PSazw`k`=cxW;XFdL-%~GsSe-aLAhZO!FM5{ZIVC4FuB8M39HQJR+g6VfiCLI3~& delta 6755 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 diff --git a/sources/RoboforkApp/Controls/DesignerCanvas.cs b/sources/RoboforkApp/Controls/DesignerCanvas.cs index 4941bc3..a6f55ce 100644 --- a/sources/RoboforkApp/Controls/DesignerCanvas.cs +++ b/sources/RoboforkApp/Controls/DesignerCanvas.cs @@ -1,4 +1,6 @@ using RoboforkApp.DataModel; +using RoboforkApp.Entities; +using RoboforkApp.Services; using System; using System.Collections.Generic; using System.Linq; @@ -3152,5 +3154,64 @@ namespace RoboforkApp } #endregion + #region Get data from AWS + // Get info fork + public void GetInfoFork() + { + var service = new Fork2PCTableService(); + /*Read*/ + IEnumerable fork2PCs = service.GetAllFork2PCs().Where(x => x.ForkID == 1); + if (fork2PCs.Count() == 0) + return; + var fork2PC = fork2PCs.ElementAt(0); + + //Clear Route Info Table + ((RoboforkMenu)System.Windows.Application.Current.MainWindow).grdRouteInfo.Children.Clear(); + + int _RowIdx = 0; + AddLabeltoGrid(_RowIdx, 0, "ID"); + AddLabeltoGrid(_RowIdx, 1, fork2PC.ForkID.ToString()); + _RowIdx++; + AddLabeltoGrid(_RowIdx, 0, "LAT"); + AddLabeltoGrid(_RowIdx, 1, fork2PC.ForkPos_x.ToString()); + _RowIdx++; + AddLabeltoGrid(_RowIdx, 0, "LOC"); + AddLabeltoGrid(_RowIdx, 1, fork2PC.ForkPos_y.ToString()); + _RowIdx++; + AddLabeltoGrid(_RowIdx, 0, "SPD"); + AddLabeltoGrid(_RowIdx, 1, fork2PC.spd_veh.ToString() + "Km/h"); + _RowIdx++; + AddLabeltoGrid(_RowIdx, 0, "GPS"); + AddLabeltoGrid(_RowIdx, 1, fork2PC.GPS_data); + } + + /// + /// Get infor node + /// + public void GetInfoNode() + { + var service = new Robofork15DemoService(); + /*Read*/ + IEnumerable fork2PCs = service.GetAllRobofork15Demos().Where(x => x.ForkNo == 1).OrderBy(x => x.NodeID); + + //Clear Route Info Table + ((RoboforkMenu)System.Windows.Application.Current.MainWindow).grdRouteInfo.Children.Clear(); + + int _RowIdx = 0; + foreach (var fork2PC in fork2PCs) + { + //Column 1 : node index + AddLabeltoGrid(_RowIdx, 0, fork2PC.NodeID.ToString()); + + //Column 2 : Pos_X, Pos_Y, Speed + AddLabeltoGrid(_RowIdx, 1, "LAT: " + fork2PC.NodePos_x.ToString()); + _RowIdx++; + AddLabeltoGrid(_RowIdx, 1, "LOC: " + fork2PC.NodePos_y.ToString()); + _RowIdx++; + AddLabeltoGrid(_RowIdx, 1, "SPD: " + fork2PC.NodeVehSpd.ToString() + "Km/h" ); + _RowIdx++; + } + } + #endregion } } diff --git a/sources/RoboforkApp/Entities/Robofork15Demo.cs b/sources/RoboforkApp/Entities/Robofork15Demo.cs index 605dd35..bbc3303 100644 --- a/sources/RoboforkApp/Entities/Robofork15Demo.cs +++ b/sources/RoboforkApp/Entities/Robofork15Demo.cs @@ -7,11 +7,11 @@ namespace RoboforkApp.Entities public class Robofork15Demo { // フォークリフト毎の ID(No.)今回は"1"固定 - [DynamoDBHashKey] - public int ForkID { get; set; } + public int ForkNo { get; set; } // ラストノードフラグ 最後のノードでは”1” public byte LastNodeFlag { get; set; } // スタート位置からのノードの ID + [DynamoDBHashKey] public int NodeID { get; set; } // ノードの目標リフト高さ ※10 進数 LSB 0.001 m public double NodeLftHeight { get; set; } diff --git a/sources/RoboforkApp/RoboforkApp.csproj b/sources/RoboforkApp/RoboforkApp.csproj index 9bfe01f..6c9c41c 100644 --- a/sources/RoboforkApp/RoboforkApp.csproj +++ b/sources/RoboforkApp/RoboforkApp.csproj @@ -63,6 +63,10 @@ RoboforkApp.App + + False + C:\Program Files (x86)\AWS SDK for .NET\past-releases\Version-2\Net45\AWSSDK.dll + 3.5 @@ -114,6 +118,10 @@ + + + + simulationRobo.xaml @@ -342,6 +350,12 @@ + + + {a4db3a6a-7959-4517-844b-4d00ae09436c} + RoboforkApp.AWS + +