소스 검색

Merge branch 'GSP' of http://36.129.163.148:10080/gaoshipeng/OTS2_0 into GSP

gsp 3 년 전
부모
커밋
f8ab1dc09e

+ 1 - 1
Bin/x64/Debug/Config/SysData/OTSStage.stg

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<XMLData Modify="true" PathName=".\Config\SysData\OTSStage.stg" WorkingStageId="1">
+<XMLData Modify="true" PathName=".\Config\SysData\OTSStage.stg" WorkingStageId="3">
   <Collection RegName="Stagelist">
     <Member strName="圆形九圆孔50mm">
       <Member RegName="boundary" PolygonPoint="" rectDomian="0,0,50000,0" shape="0" />

+ 2 - 2
OTSCPP/OTSControl/OTSControl.vcxproj

@@ -115,7 +115,7 @@
     <IntDir>$(SolutionDir)\Obj\$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
     <OutDir>$(SolutionDir)\Bin\$(Platform)\$(Configuration)\</OutDir>
     <IncludePath>$(SolutionDir)\OTSCPP\OTSControl;$(SolutionDir)OTSCPP\OTSData;$(SolutionDir)OTSCPP\Tools;$(SolutionDir)OTSCPP\OTSLog;$(IncludePath)</IncludePath>
-    <ReferencePath>$(SolutionDir)OTSCPP\OpenDll\OxfordApiDll;$(ReferencePath)</ReferencePath>
+    <ReferencePath>$(SolutionDir)OTSCPP\OpenDll\OxfordApi50Dll;$(ReferencePath)</ReferencePath>
     <LibraryPath>$(SolutionDir)\Bin\$(Platform)\$(Configuration)\;$(LibraryPath)</LibraryPath>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_oxford50|x64'">
@@ -404,7 +404,7 @@
   </ItemGroup>
   <ItemGroup>
     <Reference Include="OINA.Extender">
-      <HintPath>..\..\..\..\OTS2_0\OTS\OTS\OTSCPP\OpenDll\OxfordApi50Dll\OINA.Extender.dll</HintPath>
+      <HintPath>..\OpenDll\OxfordApi50Dll\OINA.Extender.dll</HintPath>
     </Reference>
     <Reference Include="System" />
     <Reference Include="System.Data" />

+ 4 - 3
OTSCPP/OTSControl/OTSSemBase.cpp

@@ -64,7 +64,7 @@ namespace OTSController {
 		{
 			LogErrorTrace(__FILE__, __LINE__, "COTSSemBase::MoveSEMToPoint: failed to call SetPositionXY method.");
 		}
-		Sleep(2000);
+		//Sleep(2000);
 		while (nAttempTime > 0 && !bInPlace)
 		{
 			
@@ -108,14 +108,15 @@ namespace OTSController {
 					bInPlace = TRUE;
 				}
 			}
+			
 
-			if (!bInPlace)
+			/*if (!bInPlace)
 			{
 
 
 
 				Sleep(1000);
-			}
+			}*/
 
 			// tried once
 			--nAttempTime;

+ 1 - 1
OTSCPP/OTSControl/Oxford/OTSSEMOxford.cpp

@@ -140,7 +140,7 @@ namespace OTSController {
 			// OK, return TRUE
 			return TRUE;
 		}
-
+		LogTrace(__FILE__, __LINE__, _T("setpostionxy %f,  %f"), a_dPositionX, a_dPositionY);
 		return TRUE;
 	}
 

+ 115 - 18
OTSCPP/OTSControl/Oxford/OxfordWrapper/OxfordControllerWrapper.cpp

@@ -28,8 +28,8 @@ const long g_nMicrocopeConnectTimeOutMilliSeconds = 2000;
 const long g_nSinglePointCollectDelay = 3000;
 const long g_nSingleFeatureCollectDelay = 5000;
 const long g_nXrayControllerConnectTimeOutMilliSeconds = 10000;
-const long g_nImageTimeOutMilliSeconds = 30000;
-const long g_nStageTimeOutMilliSeconds = 30000;
+const long g_nImageTimeOutMilliSeconds = 20000;
+const long g_nStageTimeOutMilliSeconds = 15000;
 
 
 
@@ -317,6 +317,46 @@ void OxfordControllerWrapper::ControllerThreadFunction()
 			}
 
 			break;
+		case OxfordControllerCommand::SET_POSITIONXY:
+		{
+			if (SetPositionXYToController(_oxfordControllerData.m_dPositionX, _oxfordControllerData.m_dPositionY))
+			{
+				_oxfordControllerData.m_nState = OxfordControllerState::SUCCEEDED;
+			}
+			else
+			{
+				_oxfordControllerData.m_nState = OxfordControllerState::FAILED;
+			}
+			
+			
+
+			long nCollectedTime = 0;
+			while (!m_bIsStageUpdated)
+			{
+				Application::DoEvents();
+				
+				Thread::Sleep(g_nOxfordControllerEventSleepTimerInt);
+
+
+				
+				nCollectedTime += g_nOxfordControllerEventSleepTimerInt;
+				if (nCollectedTime > g_nStageTimeOutMilliSeconds)
+				{
+
+
+					_oxfordControllerData.m_nState = OxfordControllerState::FAILED;
+
+				
+
+					break;
+				}
+			}
+			Thread::Sleep(2000);
+
+			m_endControllerEvent->Set();
+		}
+
+		break;
 		case OxfordControllerCommand::STOP_ACQUISITION:
 		{
 			auto edsController = CreateEdsSpectrumController();
@@ -469,26 +509,37 @@ bool OxfordControllerWrapper::SetPositionXY(const double a_dPosX, const double a
 	_oxfordControllerData.m_dPositionX = a_dPosX;
 	_oxfordControllerData.m_dPositionY = a_dPosY;
 	m_bIsStageUpdated = false;
-
-	if (SetPositionXYToController(_oxfordControllerData.m_dPositionX, _oxfordControllerData.m_dPositionY))
-	{
-		_oxfordControllerData.m_nState = OxfordControllerState::SUCCEEDED;
-	}
-	else
-	{
-		_oxfordControllerData.m_nState = OxfordControllerState::FAILED;
-	}
-	double waitTime=0;
-	while (!m_bIsStageUpdated)//m_bIsStageUpdated will be set by the callback event.
+	m_startControllerEvent->Set();
+	long nCollectedTime = 0;
+	while (true)
 	{
-		Sleep(100);
-		waitTime += 0.1;
-		if (waitTime > 10)//prevent the m_bIsStageUpdated won't be set ,we will wait only 10s.
+		
+			if (m_endControllerEvent->WaitOne(0, true))
+			{
+				m_endControllerEvent->Reset();
+				break;
+			}
+		
+
+
+		Application::DoEvents();
+		/*Thread::Sleep(g_nOxfordControllerEventSleepTimerInt);
+
+
+		long nCollectedTimeLimit = g_nStageTimeOutMilliSeconds;
+		nCollectedTime += g_nOxfordControllerEventSleepTimerInt;
+		if (nCollectedTime > nCollectedTimeLimit)
 		{
+
+
+			_oxfordControllerData.m_nState = OxfordControllerState::FAILED;
+
+
+			m_endControllerEvent->Reset();
+
 			break;
-		}
+		}*/
 	}
-	
 
 	if (_oxfordControllerData.m_nState == OxfordControllerState::SUCCEEDED)
 	{
@@ -500,6 +551,45 @@ bool OxfordControllerWrapper::SetPositionXY(const double a_dPosX, const double a
 		return false;
 	}
 
+
+	//---------------------------------------------------new method
+
+	//_oxfordControllerData.m_nCommand = OxfordControllerCommand::SET_POSITIONXY;
+
+	//_oxfordControllerData.m_dPositionX = a_dPosX;
+	//_oxfordControllerData.m_dPositionY = a_dPosY;
+	//m_bIsStageUpdated = false;
+
+	//if (SetPositionXYToController(_oxfordControllerData.m_dPositionX, _oxfordControllerData.m_dPositionY))
+	//{
+	//	_oxfordControllerData.m_nState = OxfordControllerState::SUCCEEDED;
+	//}
+	//else
+	//{
+	//	_oxfordControllerData.m_nState = OxfordControllerState::FAILED;
+	//}
+	//double waitTime=0;
+	//while (!m_bIsStageUpdated)//m_bIsStageUpdated will be set by the callback event.
+	//{
+	//	Sleep(100);
+	//	waitTime += 0.1;
+	//	if (waitTime > 10)//prevent the m_bIsStageUpdated won't be set ,we will wait only 10s.
+	//	{
+	//		break;
+	//	}
+	//}
+	//
+
+	//if (_oxfordControllerData.m_nState == OxfordControllerState::SUCCEEDED)
+	//{
+	//	return true;
+	//}
+	//else
+	//{
+
+	//	return false;
+	//}
+
 	
 }
 
@@ -1606,6 +1696,13 @@ bool OxfordControllerWrapper::ReadImageData(IElectronImage^ a_electronImage, BYT
 		return false;
 	}
 
+	if (a_pImageBits == NULL)
+	{
+
+
+		return false;
+	}
+
 	_oxfordControllerData.m_nImageWidth = a_electronImage->Width;
 	_oxfordControllerData.m_nImageHeight = a_electronImage->Height;
 	_oxfordControllerData.m_dPixelSize = a_electronImage->PixelSize;

+ 8 - 2
OTSCPP/OTSControl/Oxford/OxfordWrapper/OxfordControllerWrapper.h

@@ -182,6 +182,10 @@ public:
 	bool CollectImage(int a);
 
 	bool QuantifySpectrum(unsigned char* cResult);
+	bool IsStageUpdate()
+	{
+		return m_bIsStageUpdated;
+	}
 protected:
 
 	bool GetPositionXYFromController(double& a_dPosX, double& a_dPosY);
@@ -214,13 +218,15 @@ protected:
 
 	IStageConditions^ GetStageConditions();
 
-	void OnMicroscopeColumnUpdated(Object^ /*sender*/, OINA::Extender::MicroscopeControl::ColumnEventArgs^ /*e*/)
+	void OnMicroscopeColumnUpdated(Object^ sender, OINA::Extender::MicroscopeControl::ColumnEventArgs^ e)
 	{
 		m_bIsColumnUpdated = true;
 	}
-	void OnMicroscopeStageUpdated(Object^ /*sender*/, OINA::Extender::MicroscopeControl::StageEventArgs^ /*e*/)
+	void OnMicroscopeStageUpdated(Object^ sender, OINA::Extender::MicroscopeControl::StageEventArgs^ e)
 	{
+		
 		m_bIsStageUpdated = true;
+		LogTrace(__FILE__, __LINE__, _T("StageUpdated!"));
 	}
 	bool m_bIsStageUpdated;
 	bool m_bIsColumnUpdated;

+ 14 - 9
OTSCPP/OTSImagePro/OTSImageProcess.cpp

@@ -1365,18 +1365,23 @@ namespace OTSIMGPROC
 					}
 					COTSParticleList roiParts;
 					
-					GetOneParticleFromROI(rectMax.x, rectMax.y, rectMax.width, rectMax.height, imageROI.data, roiParts);
-					if (roiParts.size()>0)
+					if (GetOneParticleFromROI(rectMax.x, rectMax.y, rectMax.width, rectMax.height, imageROI.data, roiParts))
 					{
-						COTSParticlePtr roiPart = roiParts[0];//we will find only one part in the roi.
-						roiPart->SetXRayPos(CPoint(center_x, center_y));
-						CRect r = CRect(x, y, x + w, y + h);
-						roiPart->SetParticleRect(r);
-						roiPart->SetActualArea(actualArea);
-						roiPart->SetPixelArea(area);
-						listParticleOut.push_back(roiPart);
+						if (roiParts.size() > 0)
+						{
+							COTSParticlePtr roiPart = roiParts[0];//we will find only one part in the roi.
+							roiPart->SetXRayPos(CPoint(center_x, center_y));
+							CRect r = CRect(x, y, x + w, y + h);
+							roiPart->SetParticleRect(r);
+							roiPart->SetActualArea(actualArea);
+							roiPart->SetPixelArea(area);
+							listParticleOut.push_back(roiPart);
+						}
+
+
 					}
 					
+					
 				  }
 
 			}

+ 3 - 2
OTSCPP/OTSLog/OTSLog.vcxproj

@@ -126,7 +126,7 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <LinkIncremental>true</LinkIncremental>
     <OutDir>$(SolutionDir)\Bin\$(Platform)\$(Configuration)\</OutDir>
-    <IncludePath>$(SolutionDir)Tools;$(SolutionDir)OTSData;$(IncludePath)</IncludePath>
+    <IncludePath>$(SolutionDir)Tools;$(IncludePath)</IncludePath>
     <IntDir>$(SolutionDir)\Obj\$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_oxford50|x64'">
@@ -213,7 +213,8 @@
       <SubSystem>Windows</SubSystem>
       <ModuleDefinitionFile>.\OTSLog.def</ModuleDefinitionFile>
       <AdditionalLibraryDirectories>$(SolutionDir)\Bin\$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
-      <AdditionalDependencies>OTSData.lib</AdditionalDependencies>
+      <AdditionalDependencies>
+      </AdditionalDependencies>
     </Link>
     <Midl>
       <MkTypLibCompatible>false</MkTypLibCompatible>

+ 50 - 0
OpenDll/OxfordApi50Dll/OINA.Extender.Service.exe.config

@@ -0,0 +1,50 @@
+<?xml version="1.0"?>
+<configuration>
+  <system.serviceModel>
+    <diagnostics>
+      <messageLogging logMalformedMessages="false" logMessagesAtServiceLevel="false" logMessagesAtTransportLevel="false"/>
+    </diagnostics>
+    <bindings>
+      <netTcpBinding>
+        <binding name="unsecuredTcpBinding" hostNameComparisonMode="StrongWildcard" portSharingEnabled="false" maxReceivedMessageSize="1048576" maxBufferSize="1048576" maxBufferPoolSize="1048576" receiveTimeout="infinite">
+          <security mode="None">
+            <transport clientCredentialType="None" protectionLevel="None"/>
+            <message clientCredentialType="None"/>
+          </security>
+        </binding>
+      </netTcpBinding>
+    </bindings>
+    <behaviors>
+      <serviceBehaviors>
+        <behavior name="metadataSupport">
+          <serviceThrottling maxConcurrentCalls="1000" maxConcurrentSessions="1000" maxConcurrentInstances="1000"/>
+          <serviceMetadata/>
+        </behavior>
+      </serviceBehaviors>
+    </behaviors>
+    <services>
+      <service behaviorConfiguration="metadataSupport" name="OINA.Extender.Server.ExtenderControlServer">
+        <endpoint address="net.tcp://localhost:8733/Remote/Server" binding="netTcpBinding" bindingConfiguration="unsecuredTcpBinding" name="RemoteControlServer" contract="OINA.Extender.Server.Interfaces.IExtenderControl"/>
+        <endpoint address="net.tcp://localhost:8733/Remote/Server/mex" binding="mexTcpBinding" name="RemoteControlServerMex" contract="IMetadataExchange"/>
+      </service>
+    </services>
+  </system.serviceModel>
+  <startup>
+    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2"/>
+  </startup>
+  <appSettings>
+    <add key="ClientSettingsProvider.ServiceUri" value=""/>
+  </appSettings>
+  <system.web>
+    <membership defaultProvider="ClientAuthenticationMembershipProvider">
+      <providers>
+        <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri=""/>
+      </providers>
+    </membership>
+    <roleManager defaultProvider="ClientRoleProvider" enabled="true">
+      <providers>
+        <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400"/>
+      </providers>
+    </roleManager>
+  </system.web>
+</configuration>