I kind of like the linear in/out approach where it's just a long string of nodes. It could be done in a very simple and cheap way. The way I'm thinking it could work is something like this:
PC interface card - node A - node B - node C - etc... (technically as many nodes as I want) Have not decided how a terminator would work yet, I'm thinking it can loop back and plug right into the PC interface card. When the card gets a signal from there it knows it's at the end.
The PC interface card would be very similar to a node, except it would have a USB uart and the PC talks to it via serial that way, and it talks to the first node. The nodes would then have their turn to talk to it's associated sensor that plugs in to the node board, then move on to next node. The PC interface card starts by generating a clock signal to the first node, indicating to the first node that it's time to talk. It would talk over the bus wire which would be common throughout the whole string. Once it's done talking it would turn off the clock, and start generating it's own clock towards the second node then that node would talk and so on... When it gets to the end it then just repeats the process.
The actual sensor devices would then plug into a node, and have their own communication that independent of the main node loop. The node would keep a list of values in memory and it would simply update them with the sensor as needed. The nice thing about this is sensors that are slow to read/write would not hold up the whole bus, as the node would always be ready to send or receive values. For example if I have something like a linear actuator it takes some time for it to mechanically move and then read to confirm it's at the right spot. This would happen independent of the bus.
From the PC's point of view the commands would be something like this:
">" indicates PC talking,
"<" indicates PC interface board talking to PC
> get name, or some other form of start command
< send name of sensor (this can be just a number such as the order in the string, or there could be ways to program that in)
> get values
< show list of values
> write values (probably one command per variable)
< Get an ok or other form of acknoledgement
(repeat any other commands as needed)
> Next node - This would simply move on to the next node in line and then the above commands can be repeated
The values would probably just be written into a common location like a text file on a ram drive or something.
A separate piece of software acting as an agent would then read/write to this and talk with the server. There could be several instances of these agents spread over a large network all talking to the same network and having multiple strings of sensors.
The actual server software would then handle all the logic of what to do with these values. It's then up to the admin to program them to do what they want.
At least that's the jist of what I have in mind anyway... the specifics I will of course figure out as I actually start.
But yeah I'm actually liking this idea of a linear approach. Probably still do 4 wire, ground, power, clock, communication. (half duplex over same wire) Physically there are different approaches too, as I can have multiple nodes on same PCB and have it stay in the cabinet and the sensors then connect and go out to where they need to. Or I can have the nodes separate and just string throughout the building. If I use 4 wires it also allows to use cat6 and I can have it return back on the other 4 wires as needed to go back to cabinet. Could also use a hybrid approach where I have node boards with multiple nodes in each room/area that requires sensors. So you have cat6 going to multiple general areas of the building, then you can plug the sensors into it's respective board that would be in it's own small cabinet. You can of course just daisy chain as many of these boards as you want. They could come in different variants like single, or 4 or 8 etc... port.
For power I'm thinking I could go with a high enough voltage like 24v or 48v. Having a higher voltage available would ensure having enough power for sensors that require a certain amount of power to operate (ex: some types of sensors like hydrogen sensors etc actually have a small heating element) The node board would do all the required power conversion stuff as well as isolation. Here I would be tempted to do something like have +5v but also keep +48v, the sensor would get both. That way sensors that may need a more specific voltage can have their own conversion stage and run off the 48v part.
I'm thinking the nodes themselves would not be electrically isolated, but the sensors would be individually isolated from the node, thus, the entire bus. The PC interface board could also provide any input protection in case anything happens to the bus like high voltage accidentally applied to it. Or static electricity etc.
At least that's one approach I am thinking.