Replies: 8 comments 7 replies
-
If you want to actually control the sections of an implement or change target rates, and the implement is not something you've designed yourself (such as using a Horsch implement like you mentioned), then yes, you'd have to implement a Task Controller Server, and as such the "Task Controller" function would be best.
This is a really quite complicated topic, so our tutorials don't really cover it yet. You'll have to have a very good understanding of how DDOPs work as well. It's definitely on my to-do list to write some directions for it though... If you're implementing a task controller, then you don't actually need any filters or anything. Instead, you'd have to write a class that inherits from
This is why making a task controller would be the best way, so that all messages required are defined in the standard (and the stack can abstract the message format away). OEMs are not likely to share proprietary interfaces for these kinds of things.
Yeah, there's a few ways. The nicest way I can think of would be: after address claiming is complete (so, when your internal control function is valid), you could call If you do implement a task controller server, you'll also need to disable the TC in whatever display you are using, and/or set its TC number to be > 1 |
Beta Was this translation helpful? Give feedback.
-
Thanks @ad3154 for you quick response! Let me check if I understood you right. As I understand I could use I believe my
Yeah... that was another question I forgot to asked previously: what about concurrency in ISOBUS? What if there will be few TC in the bus? Would do they race or fight between each other to control connected machinery? Why setting serial number for another TC > 1 would help here? |
Beta Was this translation helpful? Give feedback.
-
Yeah, correct
Yes, that's right. The tricky part is that you can only set a DDI that the client included in its DDOP, and since it can have multiple instances of each DDI, the last parameter in
Yes
Yeah, as I mentioned above here, I suggest to use the
Ah it's not the serial number. The way that TCs coexist on the ISOBUS is via their "TC Number", which is the function instance of the TC. Clients will usually prefer to connect to TCs with the lowest TC Number/ function instance. There's no worry about fighting - a client will choose either one, or the other. Some clients also choose to prefer TCs with their own manufacturer number, so if changing the TC number of the other TC on the bus doesn't work, you may need to disable it. Most terminals should provide some way to do both of these things. |
Beta Was this translation helpful? Give feedback.
-
OK, thanks - now I have great starting point for my work! Please forgive my poor understanding of ISOBUS in general but I have one more question: for testing my own TC implementation with some machinery do I actually need a real tractor network (with all other components, ECUs being in the network) or I just can connect those only two nodes (my TC and seeder) to CAN? In other words: do there have to be connected any "ISOBUS manager" or "master" sitting in tractor (for managing addresses and stuff)? You said:
How it is done in practice? I mean: do "hot-plugging" my TC do existing (running) network fires some actions immediately or my TC should be connected at the first place and just then CAN bus should be started (and all other nodes powered up)? Also: is there in the internet published any deeper open source knowledge about ISOBUS or the only source are paid ISO standard sheets? Thanks for your big help! If I do anything useful for sure come back to contribute to that project (maybe I could write some tutorial for something similar to what I am doing). |
Beta Was this translation helpful? Give feedback.
-
Some TC clients also require a VT to be online to talk to a TC, but not all of them. So it might work with just the two nodes as long as the CAN bus is "good". Some nodes have internal termination in them, so be careful, as unplugging some nodes may break the whole network if you're unlucky. If that happens, you may need to keep those devices with termination plugged in, or replace them with a terminator. So, if having just the two of them on a bus doesn't work, it could be one of those things. There's no "ISOBUS manager" or anything like that. On an ISOBUS each devices independently and deterministically constructs their own copies of the address table.
You can hot-plug whatever you want generally. Connections between TCs and clients tolerate things coming online or going offline. Though, if the client is already talking to the other TC, it probably won't automatically go choose the other without disconnecting it and reconnecting it, or a key-cycle or something, assuming you changed the TC number of the other TC etc. One thing to keep in mind is that there is some delay between when a client disappears and when the TC thinks it's gone for good, so rapid unplugging and re-plugging of devices can be a bit chaotic. Good to wait a few seconds after unplugging something before plugging it or another device back in.
Well, unfortunately the ISO docs state that, except within the context of their implementation (like in our CAN Stack here), that no part of the standard may be reproduced or utilized in any way or posted on the internet without their permission. So, there's lots of stuff in our stack that comes from those docs, but presenting any of it in a way that isn't "how to use our CAN stack" isn't allowed - so I have to point you at the official paid docs if you want all the deepest details. If you really want to know all the TC stuff, you may be able to get away with only buying 11783-10, so maybe that's not too bad. Our hope with the stack has been to abstract most of the actual standard document away, so that most people don't need to worry about it.
You bet! |
Beta Was this translation helpful? Give feedback.
-
Hello @ad3154, I have implemented my simple Comparing with DDOP from client example code I can tell that not all DDI are included in received geometry structure. For example whole bin/tank section is missing or a part with DDI for setting Hence without looking at client code I would not be able to guess what are proper DDI to set work state (or read actual state). My questions: Is that behavior intended? What should I do (how to parse DDOP using helper class) to receive all necessary DDIs to control implement in sufficient way? Is there any designed strategy for that or I should write such parser from scratch? Parsed implement geometry:
|
Beta Was this translation helpful? Give feedback.
-
Hi @ad3154 I have connected original Gaspardo corn seeder ISOBUS control unit to my Task Controller implementation. It looks like communication has been established right away without any issues! But... I was trying to download DDOP (to see what kind of DDIs this seeder implements) and it failed printing error: Question: do you maybe have any clue what does it mean to me and how to make it work? When I connect the same control unit to tractor everything is working as expected. So is that probable that this Gaspardo unit is not fully following ISOBUS standard (which is implemented in AgIsoStack-plus-plus)? Maybe full log will tell you more:
I also include the log from next try as a print-screen from VSCode terminal (to keep logs coloring): |
Beta Was this translation helpful? Give feedback.
-
@ad3154 OK - I have properly parsed received DDOP and put some extra logs (for each found
The ISOBUS unit I am testing is from 6-sections Gaspardo corn seeder, where each section is controlled by single electrovalve (simple ON/OFF switch) - not by stepper motor. The unit is sitting on my desk (not connected to any real equipment...) My goal is to be able to turn ON/OFF given seeder section from my TC. I have triggered send_time_interval_measurement_command(...)` for the most interesting parameters:
This is what I periodically receive:
This is understandable because this ISOBUS control unit is not connected to anything. From this description I understand that So I called: I have tried above but no significant change could be noticed - still I received:
Then I have read here that maybe TC should request for
But it does not change anything - still I get:
Looks like this client does not accept my
So what I am expecting maybe there are some special conditions which have to be fulfilled to allow section control by my TC. And finally the questions: do you maybe know what can be a reason why I cannot control seeder sections via Thank you very much for all help you gave me already, without your support I would not be able to get so far! |
Beta Was this translation helpful? Give feedback.
-
Hello,
First of all - great project! This is exactly what I have been looking for since some time!
Now to the point: I am working on the simple project of GNSS+RTK device used for agriculture. So far it was just visualizing on UI current vehicle position and cultivation state. I would like to integrate it with real hardware. For example when my app senses seeder section is above already cultivated area it turns this section off.
I know a little bit about ISOBUS, I have read all your tutorials and Read The Docs pages but still have some doubts:
Thank you in advance for your help!
Beta Was this translation helpful? Give feedback.
All reactions