因為當時的鐵路技術並不成熟,所以對於火車穿越的地點和時間都有嚴格的規定。按照計劃,這輛公交車和貨車本應在軍糧城站下車。公交車如期在5: 30到達軍糧城站,貨車卻沒有出現。原來,原來貨車司機壹時興起,在要離開時,拿著獵槍打鳥,不小心傷了手,被送往醫院救治。替補司機馬上出發,但還是造成了延誤。偏偏路上的電報因為種種原因沒有發到軍糧城站。等了三個小時後,公共汽車司機失去了耐心。他心煩意亂,喝了很多酒,然後擅自開火車去塘沽。這時,晚點的卡車也出現在鐵路上。貨車司機發現異常及時停車,客車司機卻因為喝酒失去了判斷力。雖然公交車上的鍋爐工發現了對面的貨車,並提醒司機停車,但公交車司機依然避讓,最終釀成悲劇。
雖然火車的速度不高,但是由於公交車司機沒有及時剎車,跳車逃生,火車的所有車廂都出軌了。翻車後車門被堵住,乘客試圖跳窗逃生。但由於撞擊,鍋爐爆炸,乘客打翻了煤油燈。車廂裏的座位大多是木頭做的,火勢蔓延很快,擋住了乘客的去路。幸運的乘客能夠跳出汽車並幸存下來,但數十人被埋在熊熊大火中。這種各種操作不當造成的“人禍”也給人們敲響了警鐘。
火車相撞事件立即被西方媒體報道,但清朝人民很少聽說此事。清政府為什麽要刻意隱瞞?原來李鴻章主張修建鐵路,引進火車。事故消息壹出,他的說法必然遭到反駁,所以他壓制了相關報道。