SSU Development Thread (3.0 to 4.0)

I have mixed feelings there. On one hand, I really think moving to Orbiter2016 will be a huge improvement for SSU. On the other hand, we break compatibility with the old version and leave no fallback.

The big question for me is: Will we release when Orbiter 2016 is already stable? If we would even wait for Orbiter 2016 to stabilize, no deal with switching development already to the beta, but this could mean we also get problems in quality assurance by possible bugs in Orbiter.

3.0 is already good, so no big loss. It is just a matter of the timing.

I think due to the betas it will be stable. And even if it isn't and a patch is released, we can always do the same if we need.
To deal with backwards compatibility, as we have to go to 2016 anyway, we could do the necessary changes for it and then (try to) work out changes to make it work in 2010 again. If it works -> great, if it doesn't then 3.0 becomes the last 2010 SSU. Trying to have it work on both versions from the beginning will probably only slow things down.
 
New code for the Ku antenna is up. The manual slew is +/- working.... it's not complete and I can't really do much debugging on that without a AZ/EL display. The deploy and stow part should be working at 100%. The radar part will follow in a near future, but some ground work has already been done.
I just gave it run through using STS-107 and everything checks out nicely.
 
I think due to the betas it will be stable. And even if it isn't and a patch is released, we can always do the same if we need.
To deal with backwards compatibility, as we have to go to 2016 anyway, we could do the necessary changes for it and then (try to) work out changes to make it work in 2010 again. If it works -> great, if it doesn't then 3.0 becomes the last 2010 SSU. Trying to have it work on both versions from the beginning will probably only slow things down.

We are also too few to do the work twice. I would rather do one version of SSU and that version as good as possible.
 
We are also too few to do the work twice. I would rather do one version of SSU and that version as good as possible.
Is there any systems work being done right now that would hinder a official move over to 2016? Of not, then I'm very much in favor of doing the move sooner rather than later. I think this would save us quite some pain before we dig us too much in and we have to change a lot just to get things working with a new Orbiter version.
 
We are also too few to do the work twice. I would rather do one version of SSU and that version as good as possible.

I'm not saying we should have 2 versions. First let's do the 2016 changes as that will be our target, and after that is done we'll know what was changed and if SSU can be made 2010 compatible. If so, then we'll work through that 2016 change list and make it compatible.
 
Is there any systems work being done right now that would hinder a official move over to 2016? Of not, then I'm very much in favor of doing the move sooner rather than later. I think this would save us quite some pain before we dig us too much in and we have to change a lot just to get things working with a new Orbiter version.

Not really. I would just need to port my SSU-folder to 2016.

---------- Post added at 11:18 PM ---------- Previous post was at 03:59 PM ----------

I have a small tree conflict here with the commGCIL files, I suspect my own local changes interfere there right. Anything special needed for the Ku-Band antenna, or was that just an additional check-in?

Have been working there getting the blueprints into SSU, so it would be possible to get GCIL commands here and allow some remote control.
 
I have a small tree conflict here with the commGCIL files, I suspect my own local changes interfere there right. Anything special needed for the Ku-Band antenna, or was that just an additional check-in?

Have been working there getting the blueprints into SSU, so it would be possible to get GCIL commands here and allow some remote control.

I moved the files into a new "comm" folder and that tends to cause the tree conflicts. I had the same experience with the Centaur source files.
The GCIL class currently does pretty much nothing. It gets the switch signals from panel A1 and sends them to the EA-1. It is supposed to be a sort of MUX between panel A1 and the ground commands, for input to EA-1. If you are doing the ground part then I think those commands would "appear" there. I don't think I'll need to touch the GCIL to eventually do the radar stuff.

In other news, I think I found an error in the radiator deploy logic I made some time ago when I moved the PLB stuff into a new class. Looking at the schematics posted by DaveS, it seems to be possible to deploy just one radiator without resorting to the "official way" of pulling certain CBs. While both radiators are always driven together, their latches can be driven individually. So it seems they didn't want to drive the radiators against the latches, but I find no mention of that anywhere.
Unless someone objects, I'll follow the schematic thus allowing this "rule" to be broken. In the future we can always add radiator damage to SSU. :lol:
 
I moved the files into a new "comm" folder and that tends to cause the tree conflicts. I had the same experience with the Centaur source files.
The GCIL class currently does pretty much nothing. It gets the switch signals from panel A1 and sends them to the EA-1. It is supposed to be a sort of MUX between panel A1 and the ground commands, for input to EA-1. If you are doing the ground part then I think those commands would "appear" there. I don't think I'll need to touch the GCIL to eventually do the radar stuff.

There are also patterns of a ground command type relay switch, which is used in multiple places in the communication system.

What made the GCIL interesting for an early implementation is the fact, that it is REALLY simple in its structure. You have a number of cards in it, and every card has a simple decoder based on PROMs. Depending on the bits in the PROM, you can enable or disable one or more ground commands.

Thus: If we know which bit code a GCIL command has, and which functions it manipulates, we could simply get the needed bits for the PROM calculated. In the ideal case, I would just hack around in the SSU workbench and create a GUI form that manages the commands and creates the PROM data.

A similar tool would also be nice for programming (OI) MDMs, but I still learn C# too slowly for realizing what I have in mind. Maybe until the tenth birthday of SSU. ;)

In other news, I think I found an error in the radiator deploy logic I made some time ago when I moved the PLB stuff into a new class. Looking at the schematics posted by DaveS, it seems to be possible to deploy just one radiator without resorting to the "official way" of pulling certain CBs. While both radiators are always driven together, their latches can be driven individually. So it seems they didn't want to drive the radiators against the latches, but I find no mention of that anywhere.
Unless someone objects, I'll follow the schematic thus allowing this "rule" to be broken. In the future we can always add radiator damage to SSU. :lol:

If you already find a way to describe failures, feel free to implement them. I would just need some kind of syntax in the end so we can schedule historic failures (By a special komponent in SSU that parses such entries in the scenario file and manages the scheduled failures). I would prefer some kind of "tear and wear" kind of failure system, so running the same orbiter in multiple missions with less maintenance than recommended would in the end result in higher failure changes. :lol:
 
If you already find a way to describe failures, feel free to implement them. I would just need some kind of syntax in the end so we can schedule historic failures (By a special komponent in SSU that parses such entries in the scenario file and manages the scheduled failures). I would prefer some kind of "tear and wear" kind of failure system, so running the same orbiter in multiple missions with less maintenance than recommended would in the end result in higher failure changes. :lol:

Failures will have to wait, but I want them too.

Yesterday, or this night, when I was working on Panel A6 I noticed (again) that to get the position of a switch one has to use the DiscreteBundle, even on the panel that created it, which seems a bit inefficient.... Looking at the BasicVCComponent class, it has a GetState() member that seems to be doing nothing ATM except returning 0.0. Was that member supposed to return the switch position (on switch classes), and if so can I make it do that, or it's for something else? We could save some bundles this way, which I'm sure are slower that a function call to get a number.
 
Failures will have to wait, but I want them too.

Yesterday, or this night, when I was working on Panel A6 I noticed (again) that to get the position of a switch one has to use the DiscreteBundle, even on the panel that created it, which seems a bit inefficient.... Looking at the BasicVCComponent class, it has a GetState() member that seems to be doing nothing ATM except returning 0.0. Was that member supposed to return the switch position (on switch classes), and if so can I make it do that, or it's for something else? We could save some bundles this way, which I'm sure are slower that a function call to get a number.

I suspect I left it in because the VC framework isn't quite done yet. I wanted initially to also have a separation between logical model of the cockpit and the visual model of it with the animations. But merging both into one was then better for the schedule than more abstraction.

Also, it is possible that I need something similar eventually for handling AI crew, which is another feature I want to implement personally. The AI crew would then have a "user model" of the VC available, which allows triggering events and then let the underlying system propagate the changes by the discretes.

What the bundles lack right now is a capability of describing quickly changing events. Like pulses to a RCS thruster. Maybe a problem.

I would not save bundles - especially because the bundles could also be used easily for debugging. I have a simple idea here to make a plain "SSU TEST" MFD, which allows selecting a discrete in a bundle and plot its state.

The bundles are maybe annoying first, but they allow replacing components on run-time without tight dependencies, which is a functionality we need. Also they are not much slower in general - at least not slower than their hardware equivalent in the space shuttle.

The safest way to keep things working here, is to keep components loosely coupled. They must not know that other components exist. They only need bundles that react that way. Yes, it is a lot of work more. Yes, it means that we very often miss dedicated user models there.

But the more I thought about the results, the more sense the bundles made. What I just lack right now are ideas for ways to reduce the effort for connecting components. Some kind of injection framework would be helpful, but then, I have no idea how it could look like.
 
Last edited:
I'm not saying to dump the bundle system (I think it's brilliant), but for a panel to get the state of a switch it needs a bundle, and that feels a bit like if one is in Europe and is forced to go east to get to the US, instead of going west... especially if the switch info is only needed by that panel. Anyway, I'll leave things as they are.

I'm just finishing the fix to the radiator logic, and then I'll take a look at the PLBDs to see if I didn't mess up the logic there as well. After that, is the IUS and Centaur "cooked enough" for me to bring them to the trunk, or should we leave them to cook a bit more?
 
I'm not saying to dump the bundle system (I think it's brilliant), but for a panel to get the state of a switch it needs a bundle, and that feels a bit like if one is in Europe and is forced to go east to get to the US, instead of going west... especially if the switch info is only needed by that panel. Anyway, I'll leave things as they are.

Yes, but then, remember that we also have panels that have to be replaced. Yes, it does not always work out perfect right now. I just never found a better solution yet. The Shuttle bus implementation is also something that is equally annoying me. It feels wrong all the time. But I fail to make it feel less wrong. Even experiments in other projects are not giving me enlightenment right now.

I'm just finishing the fix to the radiator logic, and then I'll take a look at the PLBDs to see if I didn't mess up the logic there as well. After that, is the IUS and Centaur "cooked enough" for me to bring them to the trunk, or should we leave them to cook a bit more?

I see only little effort there to integrate it and clean the code up over time. But we should do that IMHO soon and leave the branch for later improvements in that department. Also we can then try integrating the tugs into the SSU workbench.

---------- Post added at 04:41 PM ---------- Previous post was at 04:37 PM ----------

Talking about stupid ideas... something just hit me and please tell me if I am sounding like a lunatic:

Could we use the DiscreteBundle stuff for creating some sort of scriptable unit test system for components? Like, putting a suitable script interpreter (Lua, or something homegrown) into SSU and describe test scripts to be executed on components OUTSIDE the big SSU context?
 
Yes, but then, remember that we also have panels that have to be replaced. Yes, it does not always work out perfect right now. I just never found a better solution yet. The Shuttle bus implementation is also something that is equally annoying me. It feels wrong all the time. But I fail to make it feel less wrong. Even experiments in other projects are not giving me enlightenment right now.
Yeah, sometimes I also get that "maybe this would be easier to build in real life" feeling. :lol:

I see only little effort there to integrate it and clean the code up over time. But we should do that IMHO soon and leave the branch for later improvements in that department. Also we can then try integrating the tugs into the SSU workbench.
What further integration should be done? The only major things that are missing are the IUS umbillical and correct CISS piping animation (I can't do this one :(), but other than that I think they're good enough to go out the door. That said, yes there's still work to be done in the panel logic, nozzle gimballing during burns, DPS interface, Centaur dumps, etc.

Talking about stupid ideas... something just hit me and please tell me if I am sounding like a lunatic:

Could we use the DiscreteBundle stuff for creating some sort of scriptable unit test system for components? Like, putting a suitable script interpreter (Lua, or something homegrown) into SSU and describe test scripts to be executed on components OUTSIDE the big SSU context?
Not following... you want to bypass the signal source, and/or to log signals, or what?
 
Not following... you want to bypass the signal source, and/or to log signals, or what?

Well, do you know the xUnit framework? I mean something in that direction, but instead of testing generic source code units, we make something that allows black box tests on individual Subsystem components in SSU. We just talk on the bundle level, maybe allow defining mock units for defining test scenarios.
 
Well, do you know the xUnit framework? I mean something in that direction, but instead of testing generic source code units, we make something that allows black box tests on individual Subsystem components in SSU. We just talk on the bundle level, maybe allow defining mock units for defining test scenarios.

Sound like a lot of work... we already have some of that. :lol:
I just finished correcting the PLBD stuff, so I'll now go update the branches of the upper stages with the latest trunk changes to then ease the final merge process.
 
Sound like a lot of work... we already have some of that. :lol:
I just finished correcting the PLBD stuff, so I'll now go update the branches of the upper stages with the latest trunk changes to then ease the final merge process.

Sorry, Java EE development makes you weird. :lol:
 
Just to give a heads-up, I'm about to merge the Centaur to the trunk. Later today the IUS will follow. I had some problems updating the branches with the current trunk, but I think the merges to trunk will go much better. Even so, it might be a good idea not to update your working copy until both branches are merged.
 
Just to give a heads-up, I'm about to merge the Centaur to the trunk. Later today the IUS will follow. I had some problems updating the branches with the current trunk, but I think the merges to trunk will go much better. Even so, it might be a good idea not to update your working copy until both branches are merged.

That is the usual procedure - first trunk to branch, then branch to trunk as final. updating a branch to the trunk should happen more often, but that is hard to expect in this project.
 
That is the usual procedure - first trunk to branch, then branch to trunk as final. updating a branch to the trunk should happen more often, but that is hard to expect in this project.

Ya, that makes things a lot easier, as changes are isolated.
I just completed updating the IUS branch with the trunk(+Centaur), and am now on the IUS-to-trunk merge... which I hope will go much faster than the 4h Centaur-to-trunk merge last night :facepalm:

---------- Post added at 03:19 PM ---------- Previous post was at 02:49 PM ----------

... and it's done! :hailprobe:
The IUS branch also brought the new talkbacks, now visible to all on panels L10 and R13L.
During the afternoon I'll correct any missing stuff in the scenarios of the upper stages (so don't worry if you find a problem as I'm on it) and I'll also update the manual.

---------- Post added at 04:50 PM ---------- Previous post was at 03:19 PM ----------

DaveS, could you craft a quick and dirty S/C adapter between the IUS and the DemoSat? The one for the Centaur is a bit smaller in diameter for use in the IUS.
Also, there's a Centaur-carina adapter mesh, but since we can't use the original carina without editing (it's sideways), and I see little point in have a SSU version of carina as we already have DemoSat, so we could delete that, right?
 
DaveS, could you craft a quick and dirty S/C adapter between the IUS and the DemoSat? The one for the Centaur is a bit smaller in diameter for use in the IUS
Done. Updated the two STS-26R scenarios with it.
 
Back
Top