Re: SYNC messages in CANopen verses Sync Flags in MilCAN
Bertil Bäck <[email protected]> Sun, 18 Mar 2018 17:50:47 +0200
| Newsgroups | gmane.comp.hardware.bus.can |
|---|---|
| Message-ID | <CALbNhfwbky6iJ0W+P_dtKDMCTe_iiwHRN8_QGaHMRF2KAqXksg@mail.gmail.com> |
Hi, I just read your mail briefly don't know if I get everything :) I think there was a update to CiA 301 that introduces a counter value to sync frames. There is also a feature for TPDOs to send them with corresponding counter value. https://www.can-cia.org/can-knowledge/canopen/special-function-protocols/ "By default, the SYNC message does not carry any data (DLC = 0). Devices that support CiA 301 Version 4.1 or higher may optionally offer a SYNC message, which provides a 1 byte SYNC counter value. Therefore synchronous behavior of several devices can be coordinated more comfortably." It's only one byte, but it's something. Br, Bertil On 16 March 2018 at 18:27, John Dammeyer <[email protected]> wrote: > Hi Everyone, > > > > Bear with me for a moment. > > > > MilCAN has, as a fundamental feature, a sync frame that contains a Sync > Flag value that increments with each Sync Frame message wrapping around at > 1023 to 0. How often the sync messages are sent is somewhat application > dependent. Most messages in MilCAN are synchronous which means they are > tied to a specific Sync Flag value. And messages can be sent after more > than one Sync Flag Value. Like every 16 flags for example. > > > > So imagine you have a Sync Flag message every 10mS. After 1024 we start > again. So 10.24 seconds will have gone by when we wrap around. If we > want a message every 160mS or so we'd send out on every 10th Sync Flag. And > if you have 10 nodes out there, and each one was doing that with a 10 > message offset we'd see a sync flag and a data message every 10 mS. The > nice thing about that is the bus is evenly loaded with never more than two > messages back to back. > > > > Now MilCAN also has asynchronous messages. They can happen any time > after a Sync Flag. By waiting for the Sync Flag message and because they > have higher priority than synchronous messages they are guaranteed to not > shift the timing of the sync flag and they also are there before the > synchronous messages. Careful message planning never puts more than X > messages between Sync Frames so that the Sync Frames aren't offset in time. > > > > Unfortunately CANopen doesn't really have something like that. It does > have a SYNC message. On receipt of a SYNC messages all nodes interested > in that will grabinternal hardware inpu signal levels. This way they > are looking at data across the network at exactly the same time. They > also transfer any data they have received into hardware outputs so all > motors or relays will all turn on (if requested) at that same instant that > they receive the SYNC message. > > > > There isn't any data with a SYNC message in CANopen. I'm wondering if > modules that conform to CANopen (have been verified) will care if there's a > 16 bit value in the first two bytes of a SYNC message. (0x80) > > > > My idea is that I would implement something like the MilCAN approach with > an incrementing Sync Flag value in the CANopen SYNC message. This would > each custom module to have a table of Sync Flag values and Messages for > periodic broadcasting. > > > > Where normally five modules might have 4 TPDO messages that need to be > sent once every second for a total of 20 messages that could end up as a > burst of 20. The modules could also be receiving RPDOs from the master > or other nodes that produce another 20 RPDO messages. It's entirely > possible that there could be, over time, a gradual migration of timing to > bursts of 40 PDO messages back to back. That could overwhelm some nodes > that are required to receive all messages and not be able to use hardware > filtering. > > > > With careful planning I can set up all the messages so we never have more > than 2 or 3 back to back. With the right clock values the SYNC message > could be sent once approximately every 10 mS (0.009765625). In my > system a hardware message update time of 0.5 or 1.0 seconds has been more > than adequate but that's sometimes all 4 PDOs every 0.5 seconds and if > multiple nodes do it I've seen bursts of 20 messages. > > > > The alternative is to assign the TPDOs relative to the SYNC frame Sync > Flag value. If each one occurs every 0.009765625 then we could assign an > offset of 0 .. 7 and mask the sync flag value with 0x007. If the masked > sync value matches send TPDOn where n is the mask of the Sync Flag value > shifted right 3 bits masked masked with 0x003 + 1 > > > > For example: each node will receive the sync flag value 0x135. Masked > with 0x007 we get 5. ((0x135 >> 3) & 0x003) = 2. So if this node is > marked for offset 5 it will then generate TPDO3 (n+1) on receipt over > every SYNC that that matches. > > > > There's still lots of time between SYNC messages for asynchronous > messages. And the bus load is no longer in bursts. Some nodes may only > need to supply a value like Temperature and RH once every 10 seconds. They > could be programmed to look for Sync Flag value decimal 777 (0x309)for > example. > > > > I don't see anything in the CANopen specification that would prevent this > other than the 2 data bytes in the SYNC message. And clearly any COTS > module that doesn't support this will still asynchronously transmit it's > PDOs. But if the majority of nodes are running a custom CANopen protocol > then it does avoid long bursts of messages. > > > > Thoughts? Ideas? Comments? > > > > Thanks > > John Dammeyer > > > > > > > > "ELS! Nothing else works as well for your Lathe" > > Automation Artisans Inc. > > http://www.autoartisans.com/ELS/ > > Ph. 1 250 544 4950 <(250)%20544-4950> > > > > > -- Bertil Bäck R&D Manager, Hardware +358505886895 https://tke.fi/contact-us/ TK Engineering solves your CAN, CANopen, J1939 and NMEA2000 needs by providing the hardware, software and know-how you need to design, manufacture and troubleshoot your industrial- marine- and heavy machine CAN networks. Call +358 6 357 6300 or email [email protected] to learn how we can help you solve your CAN related tasks.