This device communicates with external hardware using serial (RS-232) connection It does not collect tracking or image data, only allows sending and receiving data using OpenIGTLink commands (see PlusServer commands).
A (customizable) newline string is appended after each sent command and the device listens for reponse that is terminated by the same newline string.
Supported hardware devices
- Any device communicating through serial (RS-232) interface.
Supported platforms
Installation
- Connect the device to the serial port. Make sure communication speed matches the setting in the configuration file.
- If a USB to serial converter is used then the port number can be obtained (and modified, if needed) in the Device Manager.
Device configuration settings
-
Type =
"GenericSerial"
-
AcquisitionRate Defines how frequently Plus should read data sent by the serial device
Default = "10"
-
SerialPort Used COM port number for serial communication (ComPort: 1 => Port name: "COM1").
-
BaudRate Baud rate for serial communication.
Default = "9600"
-
MaximumReplyDelaySec Maximum time to wait for the device to start replying.
Default = "0.100"
-
MaximumReplyDurationSec Maximum time to wait for the device to finish replying.
Default = "0.300"
-
LineEnding Line ending character(s). Used when sending and receiving text to the device. Each character encoded as 2-digit hexadecimal, separated by spaces. For example: CR line ending is "0d", CR/LF line ending is "0d 0a"
Default = "0d"
-
DataSources No
DataSource
should be defined
Example configuration file PlusDeviceSet_Server_GenericSerial.xml
<PlusConfiguration version="2.1">
<DataCollection StartupDelaySec="1.0">
<DeviceSet
Name="PlusServer: Generic serial device"
Description="Send text and receive response through OpenIGTLink"
/>
<Device
Id="SerialDevice"
Type="GenericSerialDevice"
SerialPort="5"
BaudRate="9600"
LineEnding="0d"
>
<DataSources>
<DataSource Id="SerialData" Type="FieldData"/>
</DataSources>
<OutputChannels>
<OutputChannel Id="FieldChannel">
<DataSource Id="SerialData"/>
</OutputChannel>
</OutputChannels>
</Device>
</DataCollection>
<PlusOpenIGTLinkServer
MaxNumberOfIgtlMessagesToSend="1"
MaxTimeSpentWithProcessingMs="50"
ListeningPort="18944"
LogWarningOnNoDataAvailable="false"
OutputChannelId="FieldChannel" >
<DefaultClientInfo>
<MessageTypes>
<Message Type="STRING" />
</MessageTypes>
<StringNames>
<String Name="SerialData" />
</StringNames>
</DefaultClientInfo>
</PlusOpenIGTLinkServer>
</PlusConfiguration>
Example script for sending command from 3D Slicer
connectorNode = slicer.vtkMRMLIGTLConnectorNode() connectorNode.SetTypeClient('127.0.0.1', 18944) slicer.mrmlScene.AddNode(connectorNode) connectorNode.Start()
arduinoCmd = slicer.vtkSlicerOpenIGTLinkCommand() arduinoCmd.SetCommandName('SendText') arduinoCmd.SetCommandAttribute('DeviceId','SerialDevice') arduinoCmd.SetCommandTimeoutSec(1.0)
arduinoCmd.SetCommandAttribute('Text', "123456") slicer.modules.openigtlinkremote.logic().SendCommand(arduinoCmd, connectorNode.GetID())
def onArduinoCmdCompleted(observer, eventid): print("Command completed with status: " + arduinoCmd.StatusToString(arduinoCmd.GetStatus())) print("Response message: " + arduinoCmd.GetResponseMessage()) print("Full response: " + arduinoCmd.GetResponseText())
arduinoCmd.AddObserver(arduinoCmd.CommandCompletedEvent, onArduinoCmdCompleted)