Showing results for 
Search instead for 
Do you mean 
Reply

Move a Train with @.move

Hello I have a issue with my simulation. I need to move a train with SimTalk from one Lane to another. I read in the Help that it is not possible to move a Train with the argument @.move, but why? Actually, as Help says, it just work with the exit control of a lane, but that is not a option for me.

 

In the attached file you will realize it is simple, just a sensor on a track that calls a method with the function @.move (destination). The second transporter is hitched to the first one. If I unhitch the second one, the method works great but due to that transporter is not a tractor, it will not move.

 

Any suggestion?

2 REPLIES

Betreff: Move a Train with @.move

It's not possible to move a whole train, which consists of multiple individual objects, with one move-action. What you would probably have to do is:

  • loop through the train,
  • unhitch all trailers,
  • insert all transporters/trailers individually to the new lane at specific positions,
  • stop the transporter there, so that the trailers can be re-hitch unto it,
  • and let the transporter continue as soon as the last trailer was re-hitched to the train.

Quite cumbersome, and of course you also have to ensure that there is enough free space on the target lane for all your transporters/tractors before moving them!

____________________________________________________________
Alex Dilg, Consultant at SimPlan AG (www.SimPlan.de)
This post was good and/or helpful to you? Please provide some Kudos, thank you!
This answered your question? Please mark it as "Accepted Solution", thank you!

Betreff: Move a Train with @.move

Couldn't resist Smiley Wink Check out the attached example, not sure whether you can open it, though... In case you can't, here's the source code of my sensor-method:

(SensorID : integer; Front : boolean)
is
	rStartPos		: real;
	oDestTrack		: object;
	rTrainLength	: real;
	olTrain			: list[object];
	oTrailer		: object;
	oCheckMU		: object;
	
do
	-- target position on other lane
	rStartPos	:= 15;
	oDestTrack	:= Track_Drain;
	
	-- move individual vehicles, if not part of a train
	if not @.isTractor then 
		debug; 
		if not @.insert(oDestTrack, rStartPos) then debug; end; 
		return;
	end;
	
	-- train is at least as long as the tractor
	rTrainLength	:= @.MULength;
	
	-- get whole train
	olTrain.create;
	oTrailer		:= @.getRearWagon;
	while (oTrailer /= void) loop
		-- add to train list
		olTrain.append(oTrailer);
		
		-- add to train length
		rTrainLength	:= rTrainLength + oTrailer.MULength;
		
		-- get next trailer, if any
		oTrailer		:= oTrailer.getRearWagon;
	end;
	
	-- check that there is enough space for an insert
	.ModelObjects.DummyVehicle.MULength	:= rTrainLength + 0.001 * olTrain.Dim;
	oCheckMU := .ModelObjects.DummyVehicle.create(oDestTrack, rStartPos);
	if (oCheckMU = void) then
		-- not enough free space!
		debug;
		return;
	else
		-- enough space, delete the check-vehicle
		oCheckMU.delete;
	end;
	
	-- unhitch all trailers and insert them into other track, start at end
	for local i := olTrain.Dim downto 1 loop
		-- get trailer
		oTrailer	:= olTrain.read(i);
		
		-- unhitch from train
		oTrailer.unhitchFront;
		
		-- update (remaining) train-length
		rTrainLength	:= rTrainLength - oTrailer.MULength;
		
		-- move to destination track (leave a small gap, so that the collision-control will be called)
		if not oTrailer.insert(oDestTrack, rStartPos - rTrainLength - 0.001) then
			debug;
		end;
		
		-- restore trailer-velocity (seems to be set to zero after the insert...!?)
		oTrailer.speed	:= oTrailer.class.speed;
	next;
	
	-- move the tractor and let it wait until its train is completely re-hitched
	@.a_iTargetNumTrailers	:= olTrain.Dim;
	@.a_iNumTrailers		:= 0;
	if not @.insert(oDestTrack, rStartPos) then debug; end; 
	@.stopped				:= true;

end;

The tractor is stopped after being moved to the new track. In the collision-control of the trailers/wagons, I check whether the original train has been re-hitched completely, and then un-stop the tractor. That's "all".

Regards,
Alex

____________________________________________________________
Alex Dilg, Consultant at SimPlan AG (www.SimPlan.de)
This post was good and/or helpful to you? Please provide some Kudos, thank you!
This answered your question? Please mark it as "Accepted Solution", thank you!