Today, the term Ethernet is often used to refer to all carrier sense multiple access collision detect (CSMA/CD) LANs that generally conform to Ethernet specifications, including IEEE 802.3. Together, Ethernet and IEEE 802.3 currently maintain the greatest market share of any local-area network (LAN) protocol. Shortly thereafter, Digital Equipment Corporation, Intel Corporation, and Xerox Corporation jointly developed and released an Ethernet specification (Version 2.0) that is substantially compatible with IEEE 802.3. Ethernet was the technological basis for the IEEE 802.3 specification, which was initially released in 1980. For example, if retrieving current-draw and sensor position, use getSelectedSensorPosition() instead of the routines in getSensorCollection(), since selected sensor position and current-draw are in the same status group.Ĭonsider using the hardware-accelerated features of our motor controllers (Talon SRX, Victor SPX).Ethernet was developed by Xerox Corporation's Palo Alto Research Center (PARC) in the 1970s.
Review the number and type of “get” calls being done per loop. LabVIEW teams can leverage the built-in profiler to profile their robot applications.Ĭonsider updating to 5.14.1 if roboRIO limitations are impacting robot performance. WPILIB and LabVIEW provide routines to measure time.
FRC DRIVER STATION ETHERNET SOFTWARE
In general we recommend that teams attempting to use software loops for time critical tasks to:ĭirectly measure your “dT” (time between loop calls) and compensate for the measured deviations.
FRC DRIVER STATION ETHERNET UPDATE
If this cannot be done, then do not feel obligated to apply this update as this is entirely optional. This is merely an optional update for teams looking for any means of squeezing more performance out of their roboRIO + CAN bus peripherals.Īs with any software component update, teams should re-validate all base functionality of their robot. We would not feel comfortable making those types of changes during the competition season. To be clear, there are no API changes in this release. However, given the number of teams reaching the limits of the roboRIO performance, we’ve released a new version with more aggressive thresholds (5.14.1). This was appropriate given that the performance results were improved and this was a new feature for this season. The kickoff release had conservative thresholds. Phoenix 2018 - 2019 (New Optional Release v5.14.1.2) ¶įor these optimizations to work reliably, we have thresholds to determine when to start checking the bus again for fresh data. These are generally not necessary in a typical robot application. Success is not determined since there is no wait-for-response checking. These should be done in the robot loop, if at all (generally not necessary). ~0.3 ms for any config* if zero timeoutMs is passed. ~X ms for any timed out config* routines if X timeoutMs is passed. ~4 ms for any successful config* routines if non zero timeoutMs is passed. ~0 ms per call for any set* or enable* routines where the inputs have not changed since previous call ~0.3 ms per call for any set* or enable* routines where the input has changed since previous call. Knowing that the average call time of the FRC/NI layer is 0.3 ms, we can predict the call time for the following scenarios:
In our library, there are typically three kinds of calls: getters, setters, and config routines.
Watchdog not fed within 0.020000s (see warning below). These intermittent call-delays can occasionally trip the WPILIB Driver Station warnings: We’ve found these worst-case events to occur intermittently and vary depending on: The worst-case call time can also be much longer, several milliseconds in fact, depending on the task management of the operating system. Ten “get” calls on ten unique devices will yield 100 calls per loop, which would be 30ms (although Phoenix has optimizations to reduce this explained below). Many of you may think that does not sound like much, but consider the number of get calls you execute on your peripheral devices per loop.
These calls average approximately 0.3 milliseconds. However the LabVIEW VIs appear to not be buffered and may experience this call delay. Most (but not all) of these are buffered in WPI C++/Java so they actually get called once every ~20 ms, regardless of how often you call getters.