¿Cómo usar más de veinte puertos en un PortSet?
En Robotics Studio las operaciones que soporta un servicio se definen como puertos de un PortSet de CCR (Microsoft.Ccr.Core.PortSet). Y esto se define como un conjunto de puertos de tipo genérico: PortSet<T0, ..., T19>.
El problema aparece cuando quieres usar más de 20 puestos en el mismo conjunto de puertos, porque no hay una definición para por ejemplo: PortSet<T0,...,T24>.
Las buena noticia (según la respuesta de George Chrysanthakopoulos en el foro de MSRS) es que hay un nuevo tipo de variable PortSet disponible en la versión 1.5 de MSRS. Usando este nuevo tipo puedes tener tantas operaciones como quieras.
Nota: En .NET Compact Framework la limitación es de 8 argumentos genéricos por clase. Sin embargo, este mismo enfoque se puede aplicar para soslayar este problema.
Sigue los siguientes pasos para tener tantas operaciones como quieras:
1.- En ves de usar el PortSet genérico, usa la clase PortSet no-genérico y pasa los tipos de las operaciones como una lista en el constructor del PortSet:
Ejemplo:
En vez de usar esto:
class DriveControlEvents : PortSet<OnLoad,OnClosed,...>
Usar lo siguiente:
public class DriveControlEvents : PortSet { public DriveControlEvents()
: base( typeof(OnLoad), typeof(OnClosed), typeof(OnChangeJoystick), typeof(OnConnect), typeof(OnConnectMotor), typeof(OnConnectSonar), typeof(OnConnectSickLRF), typeof(OnConnectArticulatedArm), typeof(OnConnectWebCam), typeof(OnStartService), typeof(OnMove), typeof(OnRotate), typeof(OnTranslate), typeof(OnEStop), typeof(OnApplyJointParameters), typeof(OnDisconnectSonar), typeof(OnDisconnectSickLRF), typeof(OnDisconnectWebCam), typeof(OnLogSetting), typeof(OnQueryFrame), typeof(OnConnectSetting), typeof(OnOptionSettings)) {} }
2.- Si tu servicio se envía mensajes a sí mismo, sustituye el mensaje post por la llamada PostUnknownType.
Ejemplo:
private void btnConnectSonar_Click(object sender, EventArgs e) { string SONAR = ServiceByContract(pxsonar.Contract.Identifier); if (sonar != null) { _eventsPort.PostUnknownType(new OnConnectSonar(this, sonar)); } }
3.- En el patrón Arbiter principal (por ejemplo, el Interleave donde especificas los manejadores para cada operación), sustituye Arbiter.Receive por ArbiterReceiveFromPortSet y Arbiter.ReceiveWithIterator por Arbiter.ReceiveWithIteratorFromPortSet para aquellas operaciones definidas en el PortSet no genérico.
Related Items:
- Páginas de Microsoft Robotics Studio
- Raúl Arrabales Moreno
- Cómo encontrar artículos sobre consciencia y robótica
- Consciencia e IA. AAAI Symposium. 2007
- International Workshop on Artificial Consciousness 2005
- Models of Consciousness Workshop 2003
- Toward a Science of Consciousness 2008
- 13 Conf. Finlandesa de Inteligencia Artificial (STeP 2008)
- Nokia Workshop on Machine Consciousness 2008
- Holland (2003) Machine Consciousness
Add as favourites (73) | Cite este artículo en su sitio | Views: 1589 | E-Mail
Solo los usuarios registrados pueden agregar sus comentarios. Por favor, vaya a login, o regístrese. Powered by AkoComment Tweaked Special Edition v.1.4.4 |