Issue with tweening model

I’m trying to tween a train model to move. All the parts of the model including the primary part are anchored and all the parts are welded to the primary part. I am moving the train using CFrame. The problem is that only the primary part moves as the rest of the model stays still. What could be causing this? To prove all the parts are welded and anchored I have that little for-loop at the bottom which prints successfully for all parts of the model.

local TweenService = game:GetService("TweenService")
local train = game.Workspace["Subway Multiple Unit"]
local primary = train.PrimaryPart

local Info = TweenInfo.new(
	15,							
	Enum.EasingStyle.Linear,		
	Enum.EasingDirection.Out,	
	0,							
	false,						
	0							
)

local position1 = {
	CFrame = CFrame.new(9.45, 7.75, 1156.25)
}

local position2 = {
	CFrame = CFrame.new(9.45, 7.75, -1014.75) * CFrame.Angles(math.rad(0),math.rad(180),math.rad(0))
}

local move2 = TweenService:Create(primary, Info, position2)

wait(5)
move2:Play()
print("Moved")

for i,v in pairs(train:GetDescendants()) do
	if v:IsA("BasePart") and (v ~= primary) then
		if v.WeldConstraint.Part0 == v and v.WeldConstraint.Part1 == primary and v.Anchored == true then
			print("Model is welded")
		end
	end
end

Each individual part? I’ve never seen it done that way before. People tween the primary part that the model is welded to. And you didn’t change the script at all.

Welds only work with parts positioned by body movers (like alignPosition and alignOrientation)
If you don’t want to use body movers, you can also move the entire model with Model:PivotTo()

Someone else had a similar problem recently, this might help!