<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.distrap.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Srk</id>
		<title>DistRap wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.distrap.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Srk"/>
		<link rel="alternate" type="text/html" href="https://wiki.distrap.org/Special:Contributions/Srk"/>
		<updated>2026-05-14T14:55:21Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.29.0-rc.0</generator>

	<entry>
		<id>https://wiki.distrap.org/index.php?title=File:MiniRig.jpg&amp;diff=52</id>
		<title>File:MiniRig.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.distrap.org/index.php?title=File:MiniRig.jpg&amp;diff=52"/>
				<updated>2019-10-17T16:39:47Z</updated>
		
		<summary type="html">&lt;p&gt;Srk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Srk</name></author>	</entry>

	<entry>
		<id>https://wiki.distrap.org/index.php?title=File:Can4disco.jpeg&amp;diff=51</id>
		<title>File:Can4disco.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.distrap.org/index.php?title=File:Can4disco.jpeg&amp;diff=51"/>
				<updated>2018-01-24T20:11:00Z</updated>
		
		<summary type="html">&lt;p&gt;Srk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Srk</name></author>	</entry>

	<entry>
		<id>https://wiki.distrap.org/index.php?title=File:Stackdrv.jpeg&amp;diff=50</id>
		<title>File:Stackdrv.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.distrap.org/index.php?title=File:Stackdrv.jpeg&amp;diff=50"/>
				<updated>2018-01-24T20:10:05Z</updated>
		
		<summary type="html">&lt;p&gt;Srk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Srk</name></author>	</entry>

	<entry>
		<id>https://wiki.distrap.org/index.php?title=File:Stampstack.jpeg&amp;diff=49</id>
		<title>File:Stampstack.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.distrap.org/index.php?title=File:Stampstack.jpeg&amp;diff=49"/>
				<updated>2018-01-24T20:06:42Z</updated>
		
		<summary type="html">&lt;p&gt;Srk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Srk</name></author>	</entry>

	<entry>
		<id>https://wiki.distrap.org/index.php?title=File:Encbreakout.jpeg&amp;diff=48</id>
		<title>File:Encbreakout.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.distrap.org/index.php?title=File:Encbreakout.jpeg&amp;diff=48"/>
				<updated>2018-01-24T20:02:33Z</updated>
		
		<summary type="html">&lt;p&gt;Srk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Srk</name></author>	</entry>

	<entry>
		<id>https://wiki.distrap.org/index.php?title=File:Stmstamp.jpeg&amp;diff=47</id>
		<title>File:Stmstamp.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.distrap.org/index.php?title=File:Stmstamp.jpeg&amp;diff=47"/>
				<updated>2018-01-24T20:01:04Z</updated>
		
		<summary type="html">&lt;p&gt;Srk: V1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;V1&lt;/div&gt;</summary>
		<author><name>Srk</name></author>	</entry>

	<entry>
		<id>https://wiki.distrap.org/index.php?title=File:Devboard.jpeg&amp;diff=46</id>
		<title>File:Devboard.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.distrap.org/index.php?title=File:Devboard.jpeg&amp;diff=46"/>
				<updated>2018-01-24T19:58:25Z</updated>
		
		<summary type="html">&lt;p&gt;Srk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Srk</name></author>	</entry>

	<entry>
		<id>https://wiki.distrap.org/index.php?title=File:Drvbase.jpeg&amp;diff=45</id>
		<title>File:Drvbase.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.distrap.org/index.php?title=File:Drvbase.jpeg&amp;diff=45"/>
				<updated>2018-01-24T19:56:51Z</updated>
		
		<summary type="html">&lt;p&gt;Srk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Srk</name></author>	</entry>

	<entry>
		<id>https://wiki.distrap.org/index.php?title=Main_Page&amp;diff=17</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.distrap.org/index.php?title=Main_Page&amp;diff=17"/>
				<updated>2017-09-30T00:20:43Z</updated>
		
		<summary type="html">&lt;p&gt;Srk: rename FAQ&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the DistRap wiki. This wiki collects documentation and&lt;br /&gt;
resources related to distributed control developments.&lt;br /&gt;
&lt;br /&gt;
== About ==&lt;br /&gt;
&lt;br /&gt;
Goal of this project is to develop distributed control system for various robotics&lt;br /&gt;
and industrial automation scenarios. We are currently targeting CAN and [[CANOpen]] fieldbus&lt;br /&gt;
for interconnecting nodes. Node functions range from simple digital I/O, various sensors and motion&lt;br /&gt;
controllers implementing specific CANOpen profiles. This allows building complex machinery with isolated&lt;br /&gt;
parts performing specific functions.&lt;br /&gt;
&lt;br /&gt;
This project also explores the possibilities of high assurance embedded software development&lt;br /&gt;
by using [http://ivorylang.org/ Ivory Language] - an eDSL for safe systems programming. You can think of Ivory as a safer C, embedded in Haskell.&lt;br /&gt;
&lt;br /&gt;
=== Community ===&lt;br /&gt;
&lt;br /&gt;
* #distrap channel on irc.freenode.net&lt;br /&gt;
* https://github.com/distrap/&lt;br /&gt;
* public mailing list https://lists.distrap.org/mailman/listinfo/pub&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
&lt;br /&gt;
* [[Hardware]]&lt;br /&gt;
* [[Software]]&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
* [[GettingStarted]]&lt;br /&gt;
* [[CANOpen]]&lt;br /&gt;
* [[FrequentlyAskedQuestions]]&lt;/div&gt;</summary>
		<author><name>Srk</name></author>	</entry>

	<entry>
		<id>https://wiki.distrap.org/index.php?title=FrequentlyAskedQuestions&amp;diff=16</id>
		<title>FrequentlyAskedQuestions</title>
		<link rel="alternate" type="text/html" href="https://wiki.distrap.org/index.php?title=FrequentlyAskedQuestions&amp;diff=16"/>
				<updated>2017-09-30T00:20:43Z</updated>
		
		<summary type="html">&lt;p&gt;Srk: rename FAQ&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Why CAN? ==&lt;br /&gt;
&lt;br /&gt;
CAN bus uses differential signaling to provide noise resistant communication between nodes.&lt;br /&gt;
This is a critical requirement for our applications as they may use high power motor drivers&lt;br /&gt;
and motors producing lots of EMI. The other reason is the availability of the CAN peripheral&lt;br /&gt;
on STM32 ARM MCUs which means only adding CAN transceiver like SN65HV is necessary.&lt;br /&gt;
&lt;br /&gt;
== Why CANOpen? ==&lt;br /&gt;
&lt;br /&gt;
Rather than reinventing our custom protocol we're using [[CANOpen]] protocol which is designed&lt;br /&gt;
for industrial applications. This also allows us to stay compatible with wide range of already&lt;br /&gt;
existing manufacturers.&lt;br /&gt;
&lt;br /&gt;
== Why Ivory Tower? ==&lt;br /&gt;
&lt;br /&gt;
Due to Ivory being embedded in Haskell it reduces a lot of headache associated&lt;br /&gt;
with maintaining larger codebase as it allows to share code between various firmwares&lt;br /&gt;
and catch most errors during compilation time. Additional safety provided by Ivory&lt;br /&gt;
also helps in mission critical deployments such as robotics applications.&lt;br /&gt;
&lt;br /&gt;
Tower allows us to compose code on even higher level and allows us to write&lt;br /&gt;
concurrently safe programs by providing communication channels which are used&lt;br /&gt;
to exchange data between various components called &amp;quot;towers&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
On the backend side of things Ivory/Tower supports GCC ARM toolchain with either&lt;br /&gt;
FreeRTOS or EChronos realtime operating system. POSIX backend allows us to&lt;br /&gt;
run similar code on POSIX and MCU which is quite handy for testing or development&lt;br /&gt;
without actually using MCU itself (especially handy for protocols related development).&lt;br /&gt;
Additional backends for verification tools are also provided allowing &lt;br /&gt;
for verification of critical parts of the code.&lt;br /&gt;
&lt;br /&gt;
== Why STM32? ==&lt;br /&gt;
&lt;br /&gt;
* natively supported by ivory-tower-stm32&lt;br /&gt;
* supported by EChronos&lt;br /&gt;
* CAN peripheral&lt;br /&gt;
&lt;br /&gt;
Also core clock speeds, high amounts of flash (1Mb quite common on F4 MCUs),&lt;br /&gt;
advanced timers for 3 phase PWM generation, hardware encoder interfaces, multiple ADCs&lt;br /&gt;
for simultaneous sampling or sampling of large number of channels in sequence,&lt;br /&gt;
checksummed parts of SRAM, battery backed parts of SRAM. Good toolchain support and&lt;br /&gt;
debugging options as well - possibility to use GCC ARM toolchain and&lt;br /&gt;
GDB directly with Black Magic probe enabled programmer.&lt;/div&gt;</summary>
		<author><name>Srk</name></author>	</entry>

	<entry>
		<id>https://wiki.distrap.org/index.php?title=FAQ&amp;diff=15</id>
		<title>FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.distrap.org/index.php?title=FAQ&amp;diff=15"/>
				<updated>2017-09-30T00:20:42Z</updated>
		
		<summary type="html">&lt;p&gt;Srk: rename FAQ&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Deleted]]&lt;/div&gt;</summary>
		<author><name>Srk</name></author>	</entry>

	<entry>
		<id>https://wiki.distrap.org/index.php?title=GettingStarted&amp;diff=14</id>
		<title>GettingStarted</title>
		<link rel="alternate" type="text/html" href="https://wiki.distrap.org/index.php?title=GettingStarted&amp;diff=14"/>
				<updated>2017-09-30T00:18:44Z</updated>
		
		<summary type="html">&lt;p&gt;Srk: minor: missing to&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Required equip ==&lt;br /&gt;
* Linux computer&lt;br /&gt;
* F4 Discovery board&lt;br /&gt;
* [[CAN4DISCO]] board&lt;br /&gt;
* STLink programmer(s)&lt;br /&gt;
* Slave nodes&lt;br /&gt;
&lt;br /&gt;
== Software stack ==&lt;br /&gt;
&lt;br /&gt;
You can build the complete stack according to instruction on [https://github.com/distrap/distrap-build distrap-build] repository.&lt;br /&gt;
&lt;br /&gt;
=== UDev rules ===&lt;br /&gt;
&lt;br /&gt;
For persistent device names you should create udev rules files in ''/etc/udev/rules.d/''. For example&lt;br /&gt;
to create rules for your F4 Discovery board flashed with Black Magic probe firmware you can use the following&lt;br /&gt;
template:&lt;br /&gt;
{{cmd|code=&lt;br /&gt;
# F4 Discovery&lt;br /&gt;
SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{manufacturer}==&amp;quot;Black Sphere Technologies&amp;quot;, ATTRS{serial}!=&amp;quot;E3C09CF4&amp;quot;, GOTO=&amp;quot;f4_bmp_end&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, SUBSYSTEM==&amp;quot;tty&amp;quot;, ATTRS{interface}==&amp;quot;Black Magic GDB Server&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;dialout&amp;quot;, SYMLINK+=&amp;quot;f4gdb&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, SUBSYSTEM==&amp;quot;tty&amp;quot;, ATTRS{interface}==&amp;quot;Black Magic UART Port&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;dialout&amp;quot;, SYMLINK+=&amp;quot;f4uart&amp;quot;&lt;br /&gt;
LABEL=&amp;quot;f4_bmp_end&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Make sure to set correct ''serial'' number, this can be found by running ''dmesg'' after the board is plugged in.&lt;br /&gt;
Create similar file as ''/etc/udev/rules.d/48-distrap.rules'' and run&lt;br /&gt;
{{cmd|code=&lt;br /&gt;
udevadm control -R&lt;br /&gt;
}}&lt;br /&gt;
to reload UDev daemon. Next time you plug in your device two nodes should be created&lt;br /&gt;
* /dev/f4gdb - for attaching GDB&lt;br /&gt;
* /dev/f4uart - UART2 pass-through&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== Flashing ===&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
==== Black Magic Probe ====&lt;br /&gt;
&lt;br /&gt;
== CAN ==&lt;br /&gt;
&lt;br /&gt;
Either you Linux computer or single board computer like Raspberry Pi or BeagleBone Black&lt;br /&gt;
can be used as CAN master. For development purposes powerful computer is better&lt;br /&gt;
due to shorter compilation time, for production BeagleBone Black or ODROID XU4 is a good choice.&lt;br /&gt;
&lt;br /&gt;
=== Bringing up SLCAN bridge ===&lt;br /&gt;
&lt;br /&gt;
Assuming you are using [[CAN4DISCO]] as UART2CAN bridge you can bring up CAN network&lt;br /&gt;
with following commands:&lt;br /&gt;
{{cmd|code=&lt;br /&gt;
modprobe can&lt;br /&gt;
modprobe can-raw&lt;br /&gt;
modprobe slcan&lt;br /&gt;
slcand -F -s8 -S115200 /dev/f4uart can0 # CAN speed 8 -&amp;gt; 1Mbit&lt;br /&gt;
ip link set can0 up&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Script to initialize SLCAN can be found in [https://github.com/distrap/dumpster/blob/master/canscripts/setup distrap/dumpster].&lt;br /&gt;
&lt;br /&gt;
=== Brining up native interface ===&lt;br /&gt;
&lt;br /&gt;
=== Using virtual CAN interface ===&lt;br /&gt;
&lt;br /&gt;
Virtual CAN interface can be started with following commands:&lt;br /&gt;
{{cmd|code=&lt;br /&gt;
modprobe can&lt;br /&gt;
modprobe can-raw&lt;br /&gt;
modprobe vcan&lt;br /&gt;
&lt;br /&gt;
ip link add type vcan&lt;br /&gt;
ip link add dev vcan0 type vcan&lt;br /&gt;
ip link set vcan0 up&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Script to initialize vcan0 can be found in [https://github.com/distrap/dumpster/blob/master/canscripts/setup_vcan distrap/dumpster].&lt;br /&gt;
&lt;br /&gt;
=== Monitoring CAN traffic ===&lt;br /&gt;
&lt;br /&gt;
candump utility can be used to dump traffic on the CAN interface:&lt;br /&gt;
{{cmd|code=&lt;br /&gt;
candump can0&lt;br /&gt;
# or&lt;br /&gt;
# candump vcan0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Sending CAN messages manually ===&lt;br /&gt;
&lt;br /&gt;
Use cansend utility, for example to send LSS identify uncofigured devices command:&lt;br /&gt;
{{cmd|code=&lt;br /&gt;
cansend can0 7E5#4C&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
If you have such unconfigured node connected you should see its reply in candump:&lt;br /&gt;
{{cmd|code=&lt;br /&gt;
# candump can0&lt;br /&gt;
can0  7E5   [1]  4C&lt;br /&gt;
can0  7E4   [8]  50 00 00 00 00 00 00 00&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Running CANOpen node on POSIX ===&lt;br /&gt;
&lt;br /&gt;
Build canopen-posix-test&lt;br /&gt;
{{cmd|code=&lt;br /&gt;
cd distrap-build/canopen/&lt;br /&gt;
make canopen-posix-test&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
As root create virtual terminal pair (linking /dev/ttyS0 with /dev/ttyS1) and start SLCAN on one side and&lt;br /&gt;
POSIX node on the other side (POSIX node utilizes SLCAN on its side as well&lt;br /&gt;
to convert SLCAN traffic to CAN traffic internally). To do so start the&lt;br /&gt;
following commands as root:&lt;br /&gt;
{{cmd|code=&lt;br /&gt;
socat -d -d pty,link=/dev/ttyS0,raw,echo=0 pty,link=/dev/ttyS1,raw,echo=0&lt;br /&gt;
# start slcand on one side&lt;br /&gt;
slcand -F -s8 -S115200 /dev/ttyS0 can0&lt;br /&gt;
&lt;br /&gt;
ip link set can0 up&lt;br /&gt;
&lt;br /&gt;
# start canopen-posix-test on the other side&lt;br /&gt;
# for that go to the canopen folder you've used in previous step to build&lt;br /&gt;
# a binary as this needs to be started by root (or use su -c &amp;quot;..&amp;quot; as a normal user)&lt;br /&gt;
./build/canopen-posix-test/tower_init &amp;lt;&amp;gt; /dev/ttyS1 &amp;gt; /dev/ttyS1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Now the node is running and should respond to messages. It first needs to be configured&lt;br /&gt;
(node ID is set during LSS phase) and then it can be used for testing fully featured&lt;br /&gt;
CANOpen communication. Try talking to it as described in section [[#Sending CAN messages manually]].&lt;/div&gt;</summary>
		<author><name>Srk</name></author>	</entry>

	<entry>
		<id>https://wiki.distrap.org/index.php?title=GettingStarted&amp;diff=12</id>
		<title>GettingStarted</title>
		<link rel="alternate" type="text/html" href="https://wiki.distrap.org/index.php?title=GettingStarted&amp;diff=12"/>
				<updated>2017-09-30T00:15:24Z</updated>
		
		<summary type="html">&lt;p&gt;Srk: init GettingStarted&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Required equip ==&lt;br /&gt;
* Linux computer&lt;br /&gt;
* F4 Discovery board&lt;br /&gt;
* [[CAN4DISCO]] board&lt;br /&gt;
* STLink programmer(s)&lt;br /&gt;
* Slave nodes&lt;br /&gt;
&lt;br /&gt;
== Software stack ==&lt;br /&gt;
&lt;br /&gt;
You can build the complete stack according to instruction on [https://github.com/distrap/distrap-build distrap-build] repository.&lt;br /&gt;
&lt;br /&gt;
=== UDev rules ===&lt;br /&gt;
&lt;br /&gt;
For persistent device names you should create udev rules files in ''/etc/udev/rules.d/''. For example&lt;br /&gt;
to create rules for your F4 Discovery board flashed with Black Magic probe firmware you can use the following&lt;br /&gt;
template:&lt;br /&gt;
{{cmd|code=&lt;br /&gt;
# F4 Discovery&lt;br /&gt;
SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{manufacturer}==&amp;quot;Black Sphere Technologies&amp;quot;, ATTRS{serial}!=&amp;quot;E3C09CF4&amp;quot;, GOTO=&amp;quot;f4_bmp_end&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, SUBSYSTEM==&amp;quot;tty&amp;quot;, ATTRS{interface}==&amp;quot;Black Magic GDB Server&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;dialout&amp;quot;, SYMLINK+=&amp;quot;f4gdb&amp;quot;&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;, SUBSYSTEM==&amp;quot;tty&amp;quot;, ATTRS{interface}==&amp;quot;Black Magic UART Port&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;dialout&amp;quot;, SYMLINK+=&amp;quot;f4uart&amp;quot;&lt;br /&gt;
LABEL=&amp;quot;f4_bmp_end&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Make sure to set correct ''serial'' number, this can be found by running ''dmesg'' after the board is plugged in.&lt;br /&gt;
Create similar file as ''/etc/udev/rules.d/48-distrap.rules'' and run&lt;br /&gt;
{{cmd|code=&lt;br /&gt;
udevadm control -R&lt;br /&gt;
}}&lt;br /&gt;
to reload UDev daemon. Next time you plug in your device two nodes should be created&lt;br /&gt;
* /dev/f4gdb - for attaching GDB&lt;br /&gt;
* /dev/f4uart - UART2 pass-through&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== Flashing ===&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
==== Black Magic Probe ====&lt;br /&gt;
&lt;br /&gt;
== CAN ==&lt;br /&gt;
&lt;br /&gt;
Either you Linux computer or single board computer like Raspberry Pi or BeagleBone Black&lt;br /&gt;
can be used as CAN master. For development purposes powerful computer is better&lt;br /&gt;
due to shorter compilation time, for production BeagleBone Black or ODROID XU4 is a good choice.&lt;br /&gt;
&lt;br /&gt;
=== Bringing up SLCAN bridge ===&lt;br /&gt;
&lt;br /&gt;
Assuming you are using [[CAN4DISCO]] as UART2CAN bridge you can bring up CAN network&lt;br /&gt;
with following commands:&lt;br /&gt;
{{cmd|code=&lt;br /&gt;
modprobe can&lt;br /&gt;
modprobe can-raw&lt;br /&gt;
modprobe slcan&lt;br /&gt;
slcand -F -s8 -S115200 /dev/f4uart can0 # CAN speed 8 -&amp;gt; 1Mbit&lt;br /&gt;
ip link set can0 up&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Script to initialize SLCAN can be found in [https://github.com/distrap/dumpster/blob/master/canscripts/setup distrap/dumpster].&lt;br /&gt;
&lt;br /&gt;
=== Brining up native interface ===&lt;br /&gt;
&lt;br /&gt;
=== Using virtual CAN interface ===&lt;br /&gt;
&lt;br /&gt;
Virtual CAN interface can be started with following commands:&lt;br /&gt;
{{cmd|code=&lt;br /&gt;
modprobe can&lt;br /&gt;
modprobe can-raw&lt;br /&gt;
modprobe vcan&lt;br /&gt;
&lt;br /&gt;
ip link add type vcan&lt;br /&gt;
ip link add dev vcan0 type vcan&lt;br /&gt;
ip link set vcan0 up&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Script to initialize vcan0 can be found in [https://github.com/distrap/dumpster/blob/master/canscripts/setup_vcan distrap/dumpster].&lt;br /&gt;
&lt;br /&gt;
=== Monitoring CAN traffic ===&lt;br /&gt;
&lt;br /&gt;
candump utility can be used to dump traffic on the CAN interface:&lt;br /&gt;
{{cmd|code=&lt;br /&gt;
candump can0&lt;br /&gt;
# or&lt;br /&gt;
# candump vcan0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Sending CAN messages manually ===&lt;br /&gt;
&lt;br /&gt;
Use cansend utility, for example to send LSS identify uncofigured devices command:&lt;br /&gt;
{{cmd|code=&lt;br /&gt;
cansend can0 7E5#4C&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
If you have such unconfigured node connected you should see its reply in candump:&lt;br /&gt;
{{cmd|code=&lt;br /&gt;
# candump can0&lt;br /&gt;
can0  7E5   [1]  4C&lt;br /&gt;
can0  7E4   [8]  50 00 00 00 00 00 00 00&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Running CANOpen node on POSIX ===&lt;br /&gt;
&lt;br /&gt;
Build canopen-posix-test&lt;br /&gt;
{{cmd|code=&lt;br /&gt;
cd distrap-build/canopen/&lt;br /&gt;
make canopen-posix-test&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
As root create virtual terminal pair (linking /dev/ttyS0 with /dev/ttyS1) and start SLCAN on one side and&lt;br /&gt;
POSIX node on the other side (POSIX node utilizes SLCAN on its side as well&lt;br /&gt;
to convert SLCAN traffic to CAN traffic internally). To do so start the&lt;br /&gt;
following commands as root:&lt;br /&gt;
{{cmd|code=&lt;br /&gt;
socat -d -d pty,link=/dev/ttyS0,raw,echo=0 pty,link=/dev/ttyS1,raw,echo=0&lt;br /&gt;
# start slcand on one side&lt;br /&gt;
slcand -F -s8 -S115200 /dev/ttyS0 can0&lt;br /&gt;
&lt;br /&gt;
ip link set can0 up&lt;br /&gt;
&lt;br /&gt;
# start canopen-posix-test on the other side&lt;br /&gt;
# for that go the canopen folder you've used in previous step to build&lt;br /&gt;
# a binary as this needs to be started by root (or use su -c &amp;quot;..&amp;quot; as a normal user)&lt;br /&gt;
./build/canopen-posix-test/tower_init &amp;lt;&amp;gt; /dev/ttyS1 &amp;gt; /dev/ttyS1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Now the node is running and should respond to messages. It first needs to be configured&lt;br /&gt;
(node ID is set during LSS phase) and then it can be used for testing fully featured&lt;br /&gt;
CANOpen communication. Try talking to it as described in section [[#Sending CAN messages manually]].&lt;/div&gt;</summary>
		<author><name>Srk</name></author>	</entry>

	<entry>
		<id>https://wiki.distrap.org/index.php?title=Main_Page&amp;diff=13</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.distrap.org/index.php?title=Main_Page&amp;diff=13"/>
				<updated>2017-09-30T00:15:24Z</updated>
		
		<summary type="html">&lt;p&gt;Srk: init GettingStarted&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the DistRap wiki. This wiki collects documentation and&lt;br /&gt;
resources related to distributed control developments.&lt;br /&gt;
&lt;br /&gt;
== About ==&lt;br /&gt;
&lt;br /&gt;
Goal of this project is to develop distributed control system for various robotics&lt;br /&gt;
and industrial automation scenarios. We are currently targeting CAN and [[CANOpen]] fieldbus&lt;br /&gt;
for interconnecting nodes. Node functions range from simple digital I/O, various sensors and motion&lt;br /&gt;
controllers implementing specific CANOpen profiles. This allows building complex machinery with isolated&lt;br /&gt;
parts performing specific functions.&lt;br /&gt;
&lt;br /&gt;
This project also explores the possibilities of high assurance embedded software development&lt;br /&gt;
by using [http://ivorylang.org/ Ivory Language] - an eDSL for safe systems programming. You can think of Ivory as a safer C, embedded in Haskell.&lt;br /&gt;
&lt;br /&gt;
=== Community ===&lt;br /&gt;
&lt;br /&gt;
* #distrap channel on irc.freenode.net&lt;br /&gt;
* https://github.com/distrap/&lt;br /&gt;
* public mailing list https://lists.distrap.org/mailman/listinfo/pub&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
&lt;br /&gt;
* [[Hardware]]&lt;br /&gt;
* [[Software]]&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
* [[GettingStarted]]&lt;br /&gt;
* [[CANOpen]]&lt;br /&gt;
* [[FAQ]]&lt;/div&gt;</summary>
		<author><name>Srk</name></author>	</entry>

	<entry>
		<id>https://wiki.distrap.org/index.php?title=Template:Cmd&amp;diff=11</id>
		<title>Template:Cmd</title>
		<link rel="alternate" type="text/html" href="https://wiki.distrap.org/index.php?title=Template:Cmd&amp;diff=11"/>
				<updated>2017-09-29T23:52:53Z</updated>
		
		<summary type="html">&lt;p&gt;Srk: init&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Helper template for rendering command line commands.&lt;br /&gt;
&lt;br /&gt;
Usage: &amp;lt;nowiki&amp;gt;{{cmd|git clone test.repo}}&amp;lt;/nowiki&amp;gt; (defaults to bash). Different lang: &amp;lt;nowiki&amp;gt;{{cmd|lang=cpp|code=x ^= 1337&amp;lt;/nowiki&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
If using special characters and not getting any result &amp;lt;nowiki&amp;gt;code=&amp;lt;/nowiki&amp;gt; is required: &amp;lt;nowiki&amp;gt;{{cmd|code=a=2*b&amp;amp;c}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi#Supported_languages supported lang(s)]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;b48mw-cmd&amp;quot;&amp;gt;&lt;br /&gt;
{{#tag:syntaxhighlight|{{{code|{{{1}}}}}}|lang=&amp;quot;{{{lang|{{{2|bash}}}}}}&amp;quot;}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Srk</name></author>	</entry>

	<entry>
		<id>https://wiki.distrap.org/index.php?title=FAQ&amp;diff=10</id>
		<title>FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.distrap.org/index.php?title=FAQ&amp;diff=10"/>
				<updated>2017-09-29T22:14:20Z</updated>
		
		<summary type="html">&lt;p&gt;Srk: init FAQ&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Why CAN? ==&lt;br /&gt;
&lt;br /&gt;
CAN bus uses differential signaling to provide noise resistant communication between nodes.&lt;br /&gt;
This is a critical requirement for our applications as they may use high power motor drivers&lt;br /&gt;
and motors producing lots of EMI. The other reason is the availability of the CAN peripheral&lt;br /&gt;
on STM32 ARM MCUs which means only adding CAN transceiver like SN65HV is necessary.&lt;br /&gt;
&lt;br /&gt;
== Why CANOpen? ==&lt;br /&gt;
&lt;br /&gt;
Rather than reinventing our custom protocol we're using [[CANOpen]] protocol which is designed&lt;br /&gt;
for industrial applications. This also allows us to stay compatible with wide range of already&lt;br /&gt;
existing manufacturers.&lt;br /&gt;
&lt;br /&gt;
== Why Ivory Tower? ==&lt;br /&gt;
&lt;br /&gt;
Due to Ivory being embedded in Haskell it reduces a lot of headache associated&lt;br /&gt;
with maintaining larger codebase as it allows to share code between various firmwares&lt;br /&gt;
and catch most errors during compilation time. Additional safety provided by Ivory&lt;br /&gt;
also helps in mission critical deployments such as robotics applications.&lt;br /&gt;
&lt;br /&gt;
Tower allows us to compose code on even higher level and allows us to write&lt;br /&gt;
concurrently safe programs by providing communication channels which are used&lt;br /&gt;
to exchange data between various components called &amp;quot;towers&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
On the backend side of things Ivory/Tower supports GCC ARM toolchain with either&lt;br /&gt;
FreeRTOS or EChronos realtime operating system. POSIX backend allows us to&lt;br /&gt;
run similar code on POSIX and MCU which is quite handy for testing or development&lt;br /&gt;
without actually using MCU itself (especially handy for protocols related development).&lt;br /&gt;
Additional backends for verification tools are also provided allowing &lt;br /&gt;
for verification of critical parts of the code.&lt;br /&gt;
&lt;br /&gt;
== Why STM32? ==&lt;br /&gt;
&lt;br /&gt;
* natively supported by ivory-tower-stm32&lt;br /&gt;
* supported by EChronos&lt;br /&gt;
* CAN peripheral&lt;br /&gt;
&lt;br /&gt;
Also core clock speeds, high amounts of flash (1Mb quite common on F4 MCUs),&lt;br /&gt;
advanced timers for 3 phase PWM generation, hardware encoder interfaces, multiple ADCs&lt;br /&gt;
for simultaneous sampling or sampling of large number of channels in sequence,&lt;br /&gt;
checksummed parts of SRAM, battery backed parts of SRAM. Good toolchain support and&lt;br /&gt;
debugging options as well - possibility to use GCC ARM toolchain and&lt;br /&gt;
GDB directly with Black Magic probe enabled programmer.&lt;/div&gt;</summary>
		<author><name>Srk</name></author>	</entry>

	<entry>
		<id>https://wiki.distrap.org/index.php?title=Software&amp;diff=9</id>
		<title>Software</title>
		<link rel="alternate" type="text/html" href="https://wiki.distrap.org/index.php?title=Software&amp;diff=9"/>
				<updated>2017-09-29T22:14:20Z</updated>
		
		<summary type="html">&lt;p&gt;Srk: init Software&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Firmware ==&lt;br /&gt;
&lt;br /&gt;
* can4disco - firmware for [[CAN4DISCO]] (UART2CAN and various utilities)&lt;br /&gt;
* lambdadrive - BLDC driver firmware&lt;br /&gt;
&lt;br /&gt;
== Client side ==&lt;br /&gt;
&lt;br /&gt;
=== liveplot ===&lt;br /&gt;
&lt;br /&gt;
* https://github.com/distrap/liveplot&lt;br /&gt;
&lt;br /&gt;
Live plotting with OpenGL. This Haskell library allows feeding live data via Pipes to OpenGL plots.&lt;br /&gt;
&lt;br /&gt;
== CANOpen ==&lt;br /&gt;
&lt;br /&gt;
=== cidl ===&lt;br /&gt;
&lt;br /&gt;
* https://github.com/distrap/cidl&lt;br /&gt;
&lt;br /&gt;
Cidl (for CANOpen Interface Description Language) is a simple IDL for&lt;br /&gt;
describing CANOpen dictionaries. It generates native Haskell code and&lt;br /&gt;
Ivory/Tower code to be used  with in conjunction with ivory-tower-canopen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ivory-tower-canopen ===&lt;br /&gt;
&lt;br /&gt;
* https://github.com/distrap/ivory-tower-canopen&lt;br /&gt;
&lt;br /&gt;
CANOpen protocol implementation in Ivory/Tower.&lt;br /&gt;
&lt;br /&gt;
Implements [[CANOpen#LSS]], [[CANOpen#NMT service]], [[CANOpen#SDO service]],&lt;br /&gt;
[[CANOpen#PDO]] services.&lt;br /&gt;
&lt;br /&gt;
== Ivory/Tower ==&lt;br /&gt;
&lt;br /&gt;
=== ivory-tower-base ===&lt;br /&gt;
&lt;br /&gt;
* https://github.com/distrap/ivory-tower-base&lt;br /&gt;
&lt;br /&gt;
Various utilities for Ivory/Tower. Includes debugging towers, UART, CAN and GPIO&lt;br /&gt;
related definitions and shortcuts. Also contains utility functions like puts, putc, putHex.&lt;/div&gt;</summary>
		<author><name>Srk</name></author>	</entry>

	<entry>
		<id>https://wiki.distrap.org/index.php?title=Hardware&amp;diff=8</id>
		<title>Hardware</title>
		<link rel="alternate" type="text/html" href="https://wiki.distrap.org/index.php?title=Hardware&amp;diff=8"/>
				<updated>2017-09-29T21:34:04Z</updated>
		
		<summary type="html">&lt;p&gt;Srk: add can4disco&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Index ==&lt;br /&gt;
&lt;br /&gt;
* [[CAN4DISCO]]&lt;br /&gt;
* [[DISTRAP Connector Specification]]&lt;/div&gt;</summary>
		<author><name>Srk</name></author>	</entry>

	<entry>
		<id>https://wiki.distrap.org/index.php?title=CAN4DISCO&amp;diff=7</id>
		<title>CAN4DISCO</title>
		<link rel="alternate" type="text/html" href="https://wiki.distrap.org/index.php?title=CAN4DISCO&amp;diff=7"/>
				<updated>2017-09-29T21:34:04Z</updated>
		
		<summary type="html">&lt;p&gt;Srk: add can4disco&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CAN4DISCO ==&lt;br /&gt;
&lt;br /&gt;
UART2CAN bridge (with kernel support via SLCAN protocol) and CAN development board/firmware.&lt;br /&gt;
&lt;br /&gt;
This is a base board for F4 Discovery development board exposing both CAN interfaces&lt;br /&gt;
with SN65HVD230DR CAN transcievers. Bunch of other ports are also exposed for testing&lt;br /&gt;
peripherals - advanced timer, UART, I2C, ADC, DAC.&lt;br /&gt;
&lt;br /&gt;
Board is designed to be PCB milling friendly and has low part count - two SN65HVD230DR transcievers,&lt;br /&gt;
two CAN termination resistors (120R) and a bunch of pin headers.&lt;br /&gt;
&lt;br /&gt;
As this board provides two CAN interfaces it can also be used for CAN driver development or testing&lt;br /&gt;
by simply interconnecting these two basically creating a loopback device.&lt;br /&gt;
&lt;br /&gt;
* Design files https://github.com/distrap/can4disco-hw&lt;br /&gt;
* Firmware https://github.com/distrap/can4disco&lt;/div&gt;</summary>
		<author><name>Srk</name></author>	</entry>

	<entry>
		<id>https://wiki.distrap.org/index.php?title=Main_Page&amp;diff=4</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.distrap.org/index.php?title=Main_Page&amp;diff=4"/>
				<updated>2017-08-26T22:52:16Z</updated>
		
		<summary type="html">&lt;p&gt;Srk: init&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the DistRap wiki. This wiki collects documentation and&lt;br /&gt;
resources related to distributed control developments.&lt;br /&gt;
&lt;br /&gt;
== About ==&lt;br /&gt;
&lt;br /&gt;
Goal of this project is to develop distributed control system for various robotics&lt;br /&gt;
and industrial automation scenarios. We are currently targeting CAN and [[CANOpen]] fieldbus&lt;br /&gt;
for interconnecting nodes. Node functions range from simple digital I/O, various sensors and motion&lt;br /&gt;
controllers implementing specific CANOpen profiles. This allows building complex machinery with isolated&lt;br /&gt;
parts performing specific functions.&lt;br /&gt;
&lt;br /&gt;
This project also explores the possibilities of high assurance embedded software development&lt;br /&gt;
by using [http://ivorylang.org/ Ivory Language] - an eDSL for safe systems programming. You can think of Ivory as a safer C, embedded in Haskell.&lt;br /&gt;
&lt;br /&gt;
=== Community ===&lt;br /&gt;
&lt;br /&gt;
* #distrap channel on irc.freenode.net&lt;br /&gt;
* https://github.com/distrap/&lt;br /&gt;
* public mailing list https://lists.distrap.org/mailman/listinfo/pub&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
&lt;br /&gt;
* [[Hardware]]&lt;br /&gt;
* [[Software]]&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
* [[CANOpen]]&lt;br /&gt;
* [[FAQ]]&lt;/div&gt;</summary>
		<author><name>Srk</name></author>	</entry>

	<entry>
		<id>https://wiki.distrap.org/index.php?title=CANOpen&amp;diff=3</id>
		<title>CANOpen</title>
		<link rel="alternate" type="text/html" href="https://wiki.distrap.org/index.php?title=CANOpen&amp;diff=3"/>
				<updated>2017-08-26T22:52:13Z</updated>
		
		<summary type="html">&lt;p&gt;Srk: init&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CANOpen =&lt;br /&gt;
&lt;br /&gt;
CANopen is a communication protocol and device profile specification for embedded systems used in automation.&lt;br /&gt;
&lt;br /&gt;
* https://en.wikipedia.org/wiki/CANopen&lt;br /&gt;
* specifications  https://www.can-cia.org/&lt;br /&gt;
* mirror http://overpof.free.fr/schneider/CAN%20&amp;amp;%20CANopen/CANopen/%A9CiA%20CANCANopen%20CD%20V5.1/index.htm&lt;br /&gt;
&lt;br /&gt;
== Object dictionary ==&lt;br /&gt;
&lt;br /&gt;
Object dictionary encapsulates all of the CAN exposed variables and allows reading or writing to&lt;br /&gt;
sections specified by index and subindex. All variables have types and complex types are allowed - records and arrays.&lt;br /&gt;
&lt;br /&gt;
Two major parts of the object dictionary are defined - communication profile area in range ''0x1000-0x1FFF''&lt;br /&gt;
and application profile area (Standardised Device Profile Area) in range ''0x6000-0x9FFF''. Communication&lt;br /&gt;
profile parameters are used internally by CANOpen stack (e.g. heartbeat period, pdo parameters) while application profile area defines application&lt;br /&gt;
parameters (e.g. target velocity, control word).&lt;br /&gt;
&lt;br /&gt;
* Specification is part of CiA 301&lt;br /&gt;
&lt;br /&gt;
=== Layout ===&lt;br /&gt;
&lt;br /&gt;
Object dictionary sections:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000      not used&lt;br /&gt;
0001-001F Static Data Types&lt;br /&gt;
0020-003F Complex Data Types&lt;br /&gt;
0040-005F Manufacturer Specific Complex Data Types&lt;br /&gt;
0060-007F Device Profile Specific Static Data Types&lt;br /&gt;
0080-009F Device Profile Specific Complex Data Types&lt;br /&gt;
00A0-0FFF Reserved for further use&lt;br /&gt;
1000-1FFF Communication Profile Area&lt;br /&gt;
2000-5FFF Manufacturer Specific Profile Area&lt;br /&gt;
6000-9FFF Standardised Device Profile Area&lt;br /&gt;
A000-BFFF Standardised Interface Profile Area&lt;br /&gt;
C000-FFFF Reserved for further use&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NMT service ==&lt;br /&gt;
&lt;br /&gt;
Network management services allows controlling node state transitions. Also provides heartbeat functionality.&lt;br /&gt;
On boot, CANOpen node automatically enters pre-operational NMT state, where node configuration usually takes place.&lt;br /&gt;
After configuration, node can be switched to operational state where PDO services are available. NMT also defines&lt;br /&gt;
initialising state, stopped state and two states for resetting object dictionary values - reset application&lt;br /&gt;
and reset communication for resetting respective parts of object dictionary.&lt;br /&gt;
&lt;br /&gt;
* Specification is part of CiA 301&lt;br /&gt;
&lt;br /&gt;
== SDO service ==&lt;br /&gt;
&lt;br /&gt;
Allows reading or writing to variables in object dictionary. Device can implement multiple SDO services&lt;br /&gt;
but generally only one service (default SDO) is provided that allows object dictionary variable access.&lt;br /&gt;
&lt;br /&gt;
SDO Upload -&amp;gt; Read register from device:&lt;br /&gt;
&lt;br /&gt;
 # rs-canopen-sdo-upload vcan0 05 6000 01&lt;br /&gt;
&lt;br /&gt;
 vcan0  605   [8]  40 00 60 01 00 00 00 00&lt;br /&gt;
&lt;br /&gt;
SDO Download -&amp;gt; Write register to device:&lt;br /&gt;
&lt;br /&gt;
 # rs-canopen-sdo-download vcan0 05 6000 01 13&lt;br /&gt;
&lt;br /&gt;
 vcan0  605   [8]  2F 00 60 01 13 00 00 00&lt;br /&gt;
&lt;br /&gt;
* Specification is part of CiA 301.&lt;br /&gt;
* COB-ID for default SDO tx (transmitted from node) - '''0x580 + node ID'''&lt;br /&gt;
* COB-ID for default SDO rx (received by node) - '''0x600 + node ID'''&lt;br /&gt;
&lt;br /&gt;
== PDO ==&lt;br /&gt;
&lt;br /&gt;
PDO or Process Data Objects allow communication without protocol overhead. PDO allows mapping of single or multiple variables&lt;br /&gt;
into one CAN message with specific ID. This allows usage of all 8 bytes of CAN message data and allows writing or reading&lt;br /&gt;
multiple variables at once.&lt;br /&gt;
&lt;br /&gt;
There are two kinds of PDOs: transmit and receive PDOs (TPDO and RPDO). Transmit PDOs are used to read data from node&lt;br /&gt;
and receive PDOs are used for writes.&lt;br /&gt;
&lt;br /&gt;
For example RPDO for servo controller can contain mapping to two variables - ''control word'' and ''target velocity''. Both of these&lt;br /&gt;
are 32 bit values&lt;br /&gt;
&lt;br /&gt;
* ''control word'' unsigned int32 at address ''0x6040''&lt;br /&gt;
* ''target velocity'' signed int32 at address ''0x60FF''&lt;br /&gt;
&lt;br /&gt;
This fills up full 8 bytes of CAN data.&lt;br /&gt;
&lt;br /&gt;
In similar manner, TPDO can be used for monitoring the drive, example mapping can look like this:&lt;br /&gt;
&lt;br /&gt;
* ''status word'' unsigned int32 at address ''0x6041''&lt;br /&gt;
* ''velocity actual'' signed int32 at address ''0x606C''&lt;br /&gt;
&lt;br /&gt;
Specification is part of CiA 301.&lt;br /&gt;
&lt;br /&gt;
== SYNC ==&lt;br /&gt;
&lt;br /&gt;
Node synchronization is accomplished with the help of SYNC message. This can be used to either sample&lt;br /&gt;
current sensor values at SYNC time or apply buffered SDO data to all variables at once.&lt;br /&gt;
&lt;br /&gt;
* Specification is part of CiA 301&lt;br /&gt;
* COB-ID used by SYNC message is '''0x80'''&lt;br /&gt;
&lt;br /&gt;
== LSS ==&lt;br /&gt;
&lt;br /&gt;
Layer Setting Services and Protocol allows configuration of node ID and CAN baudrate.&lt;br /&gt;
This protocol runs prior other CANOpen services as they require node ID to be configured.&lt;br /&gt;
&lt;br /&gt;
Typically used when adding new nodes to the system. Non-configured node boots into LSS mode indicated&lt;br /&gt;
by both LEDs blinking rapidly. Node ID and baudrate can be configured and configuration stored in&lt;br /&gt;
non-volatile memory for next boots. If node ID is valid device skips LSS mode and goes straight into&lt;br /&gt;
pre-operational state.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* LSS is defined in CiA 305&lt;br /&gt;
* COB-ID used by NMT is '''0x0'''&lt;/div&gt;</summary>
		<author><name>Srk</name></author>	</entry>

	<entry>
		<id>https://wiki.distrap.org/index.php?title=Main_Page&amp;diff=2</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.distrap.org/index.php?title=Main_Page&amp;diff=2"/>
				<updated>2017-06-02T22:22:19Z</updated>
		
		<summary type="html">&lt;p&gt;Srk: init&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello world!&lt;/div&gt;</summary>
		<author><name>Srk</name></author>	</entry>

	</feed>