|
@@ -89,19 +89,19 @@ namespace parkMonitor.server.CoreThread
|
|
|
|
|
|
public AbstractCmd()
|
|
|
{
|
|
|
- parking_startRobot_address = AddressesForCore.ins.parking_startRobot_address;
|
|
|
- fetching_startRobot_address = AddressesForCore.ins.fetching_startRobot_address;
|
|
|
- equipmentStatus_address = AddressesForCore.ins.equipmentStatus_address;
|
|
|
- park_completed_address = AddressesForCore.ins.park_completed_address;
|
|
|
- parkingEntX = AddressesForCore.ins.parkingEntX;
|
|
|
- parkingEntY = AddressesForCore.ins.parkingEntY;
|
|
|
- parkingEntZ = AddressesForCore.ins.parkingEntZ;
|
|
|
+ parking_startRobot_address = EntityForCore.ins.parking_startRobot_address;
|
|
|
+ fetching_startRobot_address = EntityForCore.ins.fetching_startRobot_address;
|
|
|
+ equipmentStatus_address = EntityForCore.ins.equipmentStatus_address;
|
|
|
+ park_completed_address = EntityForCore.ins.park_completed_address;
|
|
|
+ parkingEntX = EntityForCore.ins.parkingEntX;
|
|
|
+ parkingEntY = EntityForCore.ins.parkingEntY;
|
|
|
+ parkingEntZ = EntityForCore.ins.parkingEntZ;
|
|
|
//轮距
|
|
|
- frontWheelbase_address = AddressesForCore.ins.frontWheelbase_address;
|
|
|
- rearWheelbase_address = AddressesForCore.ins.rearWheelbase_address;
|
|
|
- wheelbase_status_address = AddressesForCore.ins.wheelbase_status_address;
|
|
|
+ frontWheelbase_address = EntityForCore.ins.frontWheelbase_address;
|
|
|
+ rearWheelbase_address = EntityForCore.ins.rearWheelbase_address;
|
|
|
+ wheelbase_status_address = EntityForCore.ins.wheelbase_status_address;
|
|
|
//取车完成
|
|
|
- fetch_completed_address = AddressesForCore.ins.fetch_completed_address;
|
|
|
+ fetch_completed_address = EntityForCore.ins.fetch_completed_address;
|
|
|
//获取PLC句柄
|
|
|
PLC = EquipmentSimpleFactory.ins.FindEquipment(EquipmentName.PLC);
|
|
|
//获取队列句柄
|
|
@@ -162,7 +162,7 @@ namespace parkMonitor.server.CoreThread
|
|
|
{
|
|
|
Robot.robot1.occupied = true;
|
|
|
//UILogServer.ins.log("获得机械手资源");
|
|
|
- Log.WriteLog(LogType.NOTDATABASE,LogFile.LOG, "获得机械手资源");
|
|
|
+ Log.WriteLog(LogType.NOTDATABASE, LogFile.LOG, "获得机械手资源");
|
|
|
break;
|
|
|
}
|
|
|
mt.EndTiming();
|
|
@@ -177,7 +177,7 @@ namespace parkMonitor.server.CoreThread
|
|
|
{
|
|
|
mt.rolledBack = true;
|
|
|
UILogServer.ins.error("启动机械手资源超时,已启动回滚");
|
|
|
- Log.WriteLog(LogType.NOTDATABASE,LogFile.ERROR, "启动机械手资源超时,已启动回滚");
|
|
|
+ Log.WriteLog(LogType.NOTDATABASE, LogFile.ERROR, "启动机械手资源超时,已启动回滚");
|
|
|
return false;
|
|
|
}
|
|
|
Thread.Sleep(100);
|
|
@@ -354,7 +354,7 @@ namespace parkMonitor.server.CoreThread
|
|
|
}
|
|
|
if (ppp != null)
|
|
|
{
|
|
|
- Log.WriteLog(LogType.NOTDATABASE,LogFile.LOG, "停车流程:" + queueCmd.LicenseNum + "已分配车位");
|
|
|
+ Log.WriteLog(LogType.NOTDATABASE, LogFile.LOG, "停车流程:" + queueCmd.LicenseNum + "已分配车位");
|
|
|
break;
|
|
|
}
|
|
|
Thread.Sleep(200);
|
|
@@ -370,7 +370,7 @@ namespace parkMonitor.server.CoreThread
|
|
|
{
|
|
|
mt.rolledBack = true;
|
|
|
UILogServer.ins.error(queueCmd.LicenseNum + "超时未获得车位,指令退回");
|
|
|
- Log.WriteLog(LogType.NOTDATABASE,LogFile.ERROR, queueCmd.LicenseNum + "超时未获得车位,指令退回");
|
|
|
+ Log.WriteLog(LogType.NOTDATABASE, LogFile.ERROR, queueCmd.LicenseNum + "超时未获得车位,指令退回");
|
|
|
return null;
|
|
|
}
|
|
|
Thread.Sleep(100);
|
|
@@ -436,7 +436,7 @@ namespace parkMonitor.server.CoreThread
|
|
|
if (disconnectionCount == 1)
|
|
|
{
|
|
|
UILogServer.ins.error("激光" + lm.id + "连接异常");
|
|
|
- Log.WriteLog(LogType.NOTDATABASE,LogFile.ERROR, "激光" + lm.id + "连接异常");
|
|
|
+ Log.WriteLog(LogType.NOTDATABASE, LogFile.ERROR, "激光" + lm.id + "连接异常");
|
|
|
}
|
|
|
Thread.Sleep(10000);
|
|
|
}
|
|
@@ -598,7 +598,6 @@ namespace parkMonitor.server.CoreThread
|
|
|
cm.LicenseNum = queueCmd.LicenseNum;
|
|
|
PLC.SetMessage(cm);
|
|
|
Log.WriteLog(LogType.NOTDATABASE, "停车流程:车牌号为" + queueCmd.LicenseNum + "的车辆准备开启激光");
|
|
|
- //UILogServer.ins.info("停车流程:车牌号为" + queueCmd.LicenseNum + "的车辆准备开启激光");
|
|
|
|
|
|
//车位分配数据库操作加锁,直到启动机械手
|
|
|
Parking_Space ppp = new Parking_Space();
|
|
@@ -682,7 +681,7 @@ namespace parkMonitor.server.CoreThread
|
|
|
bool DBStoreStatus = false; //判断数据库事务操作是否正常
|
|
|
int temp;
|
|
|
string updateParkingSpaceSql = "update parkingspace set parkingSpaceState = 1 where parkingSpaceID = '" + ppp.parkingSpaceID + "'";
|
|
|
- string updateFreeSpaceSql = "update garage set garageFreeSpace = '" + (freeSpaceCount - 1) + "' where garageID = '" + garageID + "'";
|
|
|
+ string updateFreeSpaceSql = "update garage set garageFreeSpace = '" + freeSpaceCount+ "' where garageID = '" + garageID + "'";
|
|
|
List<string> strs = new List<string>();
|
|
|
strs.Add(updateParkingSpaceSql);
|
|
|
strs.Add(updateFreeSpaceSql);
|
|
@@ -748,6 +747,12 @@ namespace parkMonitor.server.CoreThread
|
|
|
status = 2;
|
|
|
cm.status = status;
|
|
|
cm.RobotID = robotID;//启动对应机械手
|
|
|
+ ParkingBuffer pb = ParkingBufferManager.ins.MallocPakringBuffer(queueCmd.id);
|
|
|
+ if (pb == null)
|
|
|
+ {
|
|
|
+ Rollback(queueCmd, ppp.parkingSpaceID, true, true, lmToBeReleased);
|
|
|
+ return;
|
|
|
+ }
|
|
|
//激光数据
|
|
|
cm.centerX = Convert.ToString(dataReal.centerX);
|
|
|
cm.centerY = Convert.ToString(dataReal.centerY);
|
|
@@ -757,7 +762,9 @@ namespace parkMonitor.server.CoreThread
|
|
|
cm.height = Convert.ToString(dataReal.height);
|
|
|
//分配的车位数据
|
|
|
cm.parkingSpaceID = Convert.ToString(ppp.parkingSpaceID);
|
|
|
- cm.parkingSpaceX = Convert.ToString(ppp.parkingSpaceX);
|
|
|
+ //!!!之前把停车位X坐标当做缓冲位ID,现修改为被管理的缓冲位ID,之后PLC地址需调整!!!
|
|
|
+ //cm.parkingSpaceX = Convert.ToString(ppp.parkingSpaceX);
|
|
|
+ cm.parkingSpaceX = Convert.ToString(pb.bufferID);
|
|
|
cm.parkingSpaceY = Convert.ToString(ppp.parkingSpaceY);
|
|
|
cm.parkingSpaceZ = Convert.ToString(ppp.parkingSpaceZ);
|
|
|
PLC.SetMessage(cm);
|
|
@@ -788,7 +795,7 @@ namespace parkMonitor.server.CoreThread
|
|
|
|
|
|
//停车流程结束,将相应车牌复位,从号牌队列中出队
|
|
|
NumReset(queueCmd);
|
|
|
- Log.WriteLog(LogType.NOTDATABASE,LogFile.LOG, "停车流程:" + queueCmd.LicenseNum + "停车完成,状态复位");
|
|
|
+ Log.WriteLog(LogType.NOTDATABASE, LogFile.LOG, "停车流程:" + queueCmd.LicenseNum + "停车完成,状态复位");
|
|
|
UILogServer.ins.info("停车流程:" + queueCmd.LicenseNum + "停车完成,状态复位");
|
|
|
//释放机械手与激光
|
|
|
if (lmToBeReleased != null)
|
|
@@ -798,7 +805,7 @@ namespace parkMonitor.server.CoreThread
|
|
|
Robot.robot1.occupied = false;
|
|
|
Robot.robot1.waitCount -= 1;
|
|
|
//自动化测试用
|
|
|
- ManualParkingSimul.ins.Update(Int32.Parse(queueCmd.LicenseNum.Substring(2, 1)));
|
|
|
+ //ManualParkingSimul.ins.Update(Int32.Parse(queueCmd.LicenseNum.Substring(2, 1)));
|
|
|
//根据号牌查找车型
|
|
|
//int vehicleTypeID = oper.getVehicleTypeID(numberPlate);
|
|
|
//判断测量数据是否准确
|
|
@@ -820,7 +827,7 @@ namespace parkMonitor.server.CoreThread
|
|
|
//插入消息队列表
|
|
|
//oper.InsertToMessageQueue(connectionStr, userID, "停车成功", 1);
|
|
|
|
|
|
- //事务,写入停车记录
|
|
|
+ //事务,写入停车记录, 更新车辆信息
|
|
|
int parkingRecordsID = 0;
|
|
|
try
|
|
|
{
|
|
@@ -833,18 +840,6 @@ namespace parkMonitor.server.CoreThread
|
|
|
//数据库操作失败写日志
|
|
|
Log.WriteLog(LogType.DATABASE, insertRecordSql);
|
|
|
}
|
|
|
- }
|
|
|
- }
|
|
|
- catch
|
|
|
- {
|
|
|
- throw;//数据库操作失败异常待处理
|
|
|
- }
|
|
|
- //事务更新车辆信息
|
|
|
- try
|
|
|
- {
|
|
|
- using (MySqlConnection conn = new MySqlConnection(DBConnection.remoteConf))
|
|
|
- {
|
|
|
- Operation.TryOpen(conn);
|
|
|
string updateVehicleSql = "update vehicle set vehiclepParkState = 1,scanEntryTime = '" + queueCmd.TimeRecord + "',parkingRecordsID = '" + parkingRecordsID + "',parkingSpaceID = '" + ppp.parkingSpaceID + "',vehicleTypeConfirm = 1,frontwheelbase = '" + frontWheelbase + "',rearwheelbase = '" + rearWheelbase + "' where numberPlate = '" + queueCmd.LicenseNum + "'";
|
|
|
int temp;
|
|
|
if (!Operation.MyTransaction(conn, updateVehicleSql, out temp))
|
|
@@ -986,21 +981,22 @@ namespace parkMonitor.server.CoreThread
|
|
|
frontwheelbase = vehiclelist.frontwheelbase;
|
|
|
rearwheelbase = vehiclelist.rearwheelbase;
|
|
|
//获取车位表中车辆具体的车位信息
|
|
|
- if (queueCmd.manual)
|
|
|
- {
|
|
|
- connectionStr = DBConnection.localStr;
|
|
|
- ps = oper.GetFetchingSpace(connectionStr, parkingSpaceID);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- connectionStr = DBConnection.remoteStr;
|
|
|
- ps = oper.GetFetchingSpace(connectionStr, parkingSpaceID);
|
|
|
- }
|
|
|
- if (ps == null)
|
|
|
+ //if (queueCmd.manual)
|
|
|
+ //{
|
|
|
+ // connectionStr = DBConnection.localStr;
|
|
|
+ // ps = oper.GetFetchingSpace(connectionStr, parkingSpaceID);
|
|
|
+ //}
|
|
|
+ //else
|
|
|
+ //{
|
|
|
+ // connectionStr = DBConnection.remoteStr;
|
|
|
+ // ps = oper.GetFetchingSpace(connectionStr, parkingSpaceID);
|
|
|
+ //}
|
|
|
+ if(ParkingSpaceManager.ins.parkingSpaceStatusMap.TryGetValue(parkingSpaceID, out ps) || ps == null)
|
|
|
{
|
|
|
Rollback(queueCmd, parkingSpaceID, false, false, null);
|
|
|
return;
|
|
|
}
|
|
|
+
|
|
|
cm = new ControlMessage();
|
|
|
//启动机械手
|
|
|
int robotID = 0;
|
|
@@ -1047,17 +1043,17 @@ namespace parkMonitor.server.CoreThread
|
|
|
//释放机械手
|
|
|
Robot.robot1.occupied = false;
|
|
|
Robot.robot1.waitCount -= 1;
|
|
|
- //释放车位
|
|
|
- if (ParkingSpaceManager.ins == null || !ParkingSpaceManager.ins.releaseParkingSpace(ps.parkingSpaceID))
|
|
|
+ //释放缓冲位与车位,缓冲位ID暂用车位X代替
|
|
|
+ if (ParkingSpaceManager.ins == null || !ParkingSpaceManager.ins.ReleaseParkingSpace(ps.parkingSpaceID) || ParkingBufferManager.ins == null || !ParkingBufferManager.ins.ReleaseParkingBuffer(ps.parkingSpaceX))
|
|
|
{
|
|
|
- Log.WriteLog(LogType.NOTDATABASE, LogFile.ERROR, "车位异常,请检查"); UILogServer.ins.error("车位异常,请检查");
|
|
|
+ Log.WriteLog(LogType.NOTDATABASE, LogFile.ERROR, "车位或缓冲位异常,请检查"); UILogServer.ins.error("车位或缓冲位异常,请检查");
|
|
|
}
|
|
|
|
|
|
- Log.WriteLog(LogType.NOTDATABASE,"取车流程:号牌:" + queueCmd.LicenseNum + "取车完成");
|
|
|
+ Log.WriteLog(LogType.NOTDATABASE, "取车流程:号牌:" + queueCmd.LicenseNum + "取车完成");
|
|
|
UILogServer.ins.info("取车流程:号牌:" + queueCmd.LicenseNum + "取车完成");
|
|
|
|
|
|
//自动化测试用
|
|
|
- ManualParkingSimul.ins.Update(Int32.Parse(queueCmd.LicenseNum.Substring(2, 1)));
|
|
|
+ //ManualParkingSimul.ins.Update(Int32.Parse(queueCmd.LicenseNum.Substring(2, 1)));
|
|
|
|
|
|
//数据库更新
|
|
|
lock (Parking_Space.RecordLock)
|
|
@@ -1090,10 +1086,6 @@ namespace parkMonitor.server.CoreThread
|
|
|
string updateFreeSpaceSql = "update garage set garageFreeSpace = '" + freeSpaceCount + "' where garageID = '" + garageID + "'";
|
|
|
string updateVehicleStateSql = "update vehicle set vehiclepParkState = 0 where numberPlate = '" + queueCmd.LicenseNum + "'";
|
|
|
string updateParkingRecordsSql = "update parkingrecords set parkingRecordsState = 6,realGetTime = '" + queueCmd.TimeRecord + "'where parkingRecordsID = '" + queueCmd.parkingRecordsID + "'";
|
|
|
- //strs.Add("update parkingspace set parkingSpaceState = 0 where parkingSpaceID = '" + ps.parkingSpaceID + "'");
|
|
|
- //strs.Add("update garage set garageFreeSpace = '" + freeSpaceCount + "' where garageID = '" + garageID + "'");
|
|
|
- //strs.Add("update vehicle set vehiclepParkState = 0 where numberPlate = '" + queueCmd.LicenseNum + "'");
|
|
|
- //strs.Add("update parkingrecords set parkingRecordsState = 6,realGetTime = '" + queueCmd.TimeRecord + "'where parkingRecordsID = '" + queueCmd.parkingRecordsID + "'");
|
|
|
strs.Add(updateParkingSpaceStateSql);
|
|
|
strs.Add(updateFreeSpaceSql);
|
|
|
strs.Add(updateVehicleStateSql);
|
|
@@ -1103,9 +1095,9 @@ namespace parkMonitor.server.CoreThread
|
|
|
Log.WriteLog(LogType.NOTDATABASE, "数据库操作出错,记录sql语句等待流程回滚");
|
|
|
//写日志记录sql,以待之后处理
|
|
|
Log.WriteLog(LogType.DATABASE, updateParkingSpaceStateSql);
|
|
|
- Log.WriteLog(LogType.DATABASE,updateFreeSpaceSql);
|
|
|
- Log.WriteLog(LogType.DATABASE,updateVehicleStateSql);
|
|
|
- Log.WriteLog(LogType.DATABASE,updateParkingRecordsSql);
|
|
|
+ Log.WriteLog(LogType.DATABASE, updateFreeSpaceSql);
|
|
|
+ Log.WriteLog(LogType.DATABASE, updateVehicleStateSql);
|
|
|
+ Log.WriteLog(LogType.DATABASE, updateParkingRecordsSql);
|
|
|
}
|
|
|
}
|
|
|
}
|