Commit 73972f25 张东亮

料架尾号为00出现不放料

1 个父辈 a46982e8
...@@ -10,7 +10,7 @@ using System.Text; ...@@ -10,7 +10,7 @@ using System.Text;
namespace OnlineStore.DeviceLibrary namespace OnlineStore.DeviceLibrary
{ {
/// <summary> /// <summary>
/// 双层流水线当前运动信息类(出入库状态,步骤记录) /// 当前运动信息类(状态,步骤记录)
/// </summary> /// </summary>
public class LineMoveInfo public class LineMoveInfo
{ {
......
...@@ -18,9 +18,17 @@ namespace OnlineStore.DeviceLibrary ...@@ -18,9 +18,17 @@ namespace OnlineStore.DeviceLibrary
/// 工位S2是否可以放行左侧的料架 /// 工位S2是否可以放行左侧的料架
/// </summary> /// </summary>
internal bool S2CanGetShelf = true; internal bool S2CanGetShelf = true;
/// <summary>
/// 上料工位当前料架信息
/// </summary>
internal string S1_CurrShelfId = ""; internal string S1_CurrShelfId = "";
/// <summary>
/// 上料工位左侧料架信息
/// </summary>
internal string S1_LeftShelfId = ""; internal string S1_LeftShelfId = "";
/// <summary>
/// 上料工位右侧料架信息
/// </summary>
internal string S1_RightShelfId = ""; internal string S1_RightShelfId = "";
private string S1SName private string S1SName
...@@ -35,10 +43,18 @@ namespace OnlineStore.DeviceLibrary ...@@ -35,10 +43,18 @@ namespace OnlineStore.DeviceLibrary
{ {
get { return "【R_" + S1_RightShelfId + "_" + GetXNrfid(S1_RightShelfId) + "】"; } get { return "【R_" + S1_RightShelfId + "_" + GetXNrfid(S1_RightShelfId) + "】"; }
} }
/// <summary>
/// 所有任务信息
/// </summary>
public AllTaskInfo AllTaskInfo = new AllTaskInfo(); public AllTaskInfo AllTaskInfo = new AllTaskInfo();
/// <summary>
/// 上料工位任务信息
/// </summary>
internal ShelfTaskInfo S1_ShelfTask = new ShelfTaskInfo(); internal ShelfTaskInfo S1_ShelfTask = new ShelfTaskInfo();
//S1工位如果启动时有料架,左侧位置默认为00D,
/// <summary>
/// 上料工位检查,S1工位如果启动时有料架,左侧位置默认为00D,
/// </summary>
internal void S1_ShelfCheck() internal void S1_ShelfCheck()
{ {
//未准备料架,判断工位是否有料架 //未准备料架,判断工位是否有料架
...@@ -76,6 +92,11 @@ namespace OnlineStore.DeviceLibrary ...@@ -76,6 +92,11 @@ namespace OnlineStore.DeviceLibrary
} }
} }
private Stopwatch pkgHasShelfWatch = new Stopwatch(); private Stopwatch pkgHasShelfWatch = new Stopwatch();
/// <summary>
/// 检查上料工位任务
/// </summary>
/// <param name="log"></param>
/// <returns></returns>
private bool CheckS1Task(string log = "") private bool CheckS1Task(string log = "")
{ {
//判断是否还有任务 //判断是否还有任务
...@@ -96,51 +117,18 @@ namespace OnlineStore.DeviceLibrary ...@@ -96,51 +117,18 @@ namespace OnlineStore.DeviceLibrary
S1Log(log + " 剩余任务:" + AllTaskInfo.ToStr() + ",需要一个新C料架"); S1Log(log + " 剩余任务:" + AllTaskInfo.ToStr() + ",需要一个新C料架");
return true; return true;
} }
//else if (AllTaskInfo.packageTask > 0)
//{
// //需要等待S2工位无料架,才能送料架过去
// if (NoWrokShelf())
// {
// //等待3秒都无料架
// if (LineManager.checkWatch(pkgHasShelfWatch, 10000))
// {
// needNewShelf = Static_String.BigShelf_RFID_Prefix;
// SOneMoveInfo.NewMove(LineMoveType.S1Shelf, MoveStep.S1_NewShelf);
// S1Log(log + " 剩余任务:" + AllTaskInfo.ToStr() + ",需要一个新C料架_包装料");
// return true;
// }
// }
// else
// {
// pkgHasShelfWatch.Stop();
// }
//}
else else
{ {
pkgHasShelfWatch.Stop(); pkgHasShelfWatch.Stop();
} }
return false; return false;
} }
//private bool NoWrokShelf() /// <summary>
//{ /// 上料工位阻挡移动
// if ( /// </summary>
// String.IsNullOrEmpty(S1_CurrShelfId) && /// <param name="moveInfo"></param>
// String.IsNullOrEmpty(S1_LeftShelfId) && /// <param name="iovalue"></param>
// String.IsNullOrEmpty(S1_RightShelfId) && /// <param name="stop2Move"></param>
// IOValue(IO_Type.M_LeftStopCheck).Equals(IO_VALUE.LOW) &&
// IOValue(IO_Type.M_RightStopCheck).Equals(IO_VALUE.LOW) &&
// IOValue(IO_Type.S1_StopCheck1).Equals(IO_VALUE.LOW) &&
// IOValue(IO_Type.S1_StopCheck2).Equals(IO_VALUE.LOW) &&
// IOValue(IO_Type.S1_StopCheck4).Equals(IO_VALUE.LOW) &&
// CylinderIsOk(IO_Type.S1_TopCylinderUp1, IO_Type.S1_TopCylinderDown1) &&
// CylinderIsOk(IO_Type.S1_TopCylinderUp2, IO_Type.S1_TopCylinderDown2) &&
// IOValue(IO_Type.S1_StopCheck5).Equals(IO_VALUE.LOW)
// )
// {
// return true;
// }
// return false;
//}
public void S1_StopMove(LineMoveInfo moveInfo, IO_VALUE iovalue, bool stop2Move = false) public void S1_StopMove(LineMoveInfo moveInfo, IO_VALUE iovalue, bool stop2Move = false)
{ {
if (moveInfo != null) if (moveInfo != null)
...@@ -193,7 +181,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -193,7 +181,7 @@ namespace OnlineStore.DeviceLibrary
} }
IsUseRightHigh = false; IsUseRightHigh = false;
if (!rfid.Equals("")) if (!rfid.Equals("") && !rfid.Equals("000"))
{ {
if ((needNewShelf.EndsWith(Static_String.SmallShelf_RFID_Prefix) || needNewShelf.StartsWith(Static_String.SmallShelf_RFID_Prefix)) && rfid.StartsWith(Static_String.SmallShelf_RFID_Prefix)) if ((needNewShelf.EndsWith(Static_String.SmallShelf_RFID_Prefix) || needNewShelf.StartsWith(Static_String.SmallShelf_RFID_Prefix)) && rfid.StartsWith(Static_String.SmallShelf_RFID_Prefix))
{ {
...@@ -717,7 +705,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -717,7 +705,7 @@ namespace OnlineStore.DeviceLibrary
} }
private string needNewShelf = ""; private string needNewShelf = "";
private string ReadyLock = ""; private object ReadyLock = new object();
private void S1_24_Ready() private void S1_24_Ready()
{ {
if (Monitor.TryEnter(ReadyLock, 1)) if (Monitor.TryEnter(ReadyLock, 1))
...@@ -816,14 +804,14 @@ namespace OnlineStore.DeviceLibrary ...@@ -816,14 +804,14 @@ namespace OnlineStore.DeviceLibrary
} }
catch (Exception ex) catch (Exception ex)
{ {
LogUtil.error("S1_22_Ready 出错:" + ex.ToString()); LogUtil.error("S1_24_Ready 出错:" + ex.ToString());
} }
finally { Monitor.Exit(ReadyLock); } finally { Monitor.Exit(ReadyLock); }
} }
else else
{ {
LogUtil.error("S1_22_Ready 未得到锁 ", 15); LogUtil.error("S1_24_Ready 未得到锁 ", 15);
} }
} }
......
...@@ -55,7 +55,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -55,7 +55,7 @@ namespace OnlineStore.DeviceLibrary
CurrTray = new TrayInfo(); CurrTray = new TrayInfo();
} }
public bool CanChange(string currShelf) public bool CanChange(string currShelf)
{ {
if (CurrTray != null) if (CurrTray != null)
{ {
...@@ -63,14 +63,17 @@ namespace OnlineStore.DeviceLibrary ...@@ -63,14 +63,17 @@ namespace OnlineStore.DeviceLibrary
if (span.TotalSeconds > 5) if (span.TotalSeconds > 5)
{ {
return true; return true;
}else if (!CurrTray.realRFID.Equals(currShelf)) }
else if (!CurrTray.realRFID.Equals(currShelf))
{ {
return true; return true;
}else if(span.TotalSeconds>2&& IOManager.IOValue(DI_TrayCheck).Equals(IO_VALUE.LOW)) }
else if (span.TotalSeconds > 2 && IOManager.IOValue(DI_TrayCheck).Equals(IO_VALUE.LOW))
{ {
return true; return true;
} }
}else if (IOManager.IOValue(DI_TrayCheck).Equals(IO_VALUE.LOW)) }
else if (IOManager.IOValue(DI_TrayCheck).Equals(IO_VALUE.LOW))
{ {
return true; return true;
} }
...@@ -97,9 +100,9 @@ namespace OnlineStore.DeviceLibrary ...@@ -97,9 +100,9 @@ namespace OnlineStore.DeviceLibrary
NeedShelf = ""; NeedShelf = "";
MoveInfo.EndMove(); MoveInfo.EndMove();
} }
// private Stopwatch DiStop = new Stopwatch(); // private Stopwatch DiStop = new Stopwatch();
private Stopwatch abbWatch = new Stopwatch(); private Stopwatch abbWatch = new Stopwatch();
private string lockTimer = ""; private object lockTimer = new object();
internal void TimerProcess() internal void TimerProcess()
{ {
if (Monitor.TryEnter(lockTimer, 1)) if (Monitor.TryEnter(lockTimer, 1))
...@@ -130,8 +133,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -130,8 +133,7 @@ namespace OnlineStore.DeviceLibrary
// DiStop.Stop(); // DiStop.Stop();
return; return;
} }
// else if (LineManager.checkWatch(DiStop, 500, false))
// {
else if (LineManager.Line.S1IsReady()) else if (LineManager.Line.S1IsReady())
{ {
string outMsg = ""; string outMsg = "";
...@@ -165,7 +167,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -165,7 +167,7 @@ namespace OnlineStore.DeviceLibrary
//获取成功,开始放料 //获取成功,开始放料
MoveInfo.NewMove(LineMoveType.PutTray, MoveStep.T01_GetTray); MoveInfo.NewMove(LineMoveType.PutTray, MoveStep.T01_GetTray);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(100)); MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(100));
LogUtil.info(Name + MoveInfo.SLog + "开始料【" + CurrPoint + "】" + CurrTray.ToStr() + ""); LogUtil.info(Name + MoveInfo.SLog + "开始料【" + CurrPoint + "】" + CurrTray.ToStr() + "");
ABBControl.SendCmd(RobotIp, ABBControl.Cmd_moveget, CurrTray.getP, "L", ABBControl.DefaultSpeed); ABBControl.SendCmd(RobotIp, ABBControl.Cmd_moveget, CurrTray.getP, "L", ABBControl.DefaultSpeed);
} }
...@@ -244,7 +246,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -244,7 +246,7 @@ namespace OnlineStore.DeviceLibrary
MoveInfo.NextMoveStep(MoveStep.T04_WaitEnd); MoveInfo.NextMoveStep(MoveStep.T04_WaitEnd);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(10000)); MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(10000));
LineManager.Line.S1_ShelfTask = HttpServer.ShelfFinish(CurrTray.realRFID, CurrTray.barcode, CurrTray.shelfP.ToString(), robotNum.ToString()); LineManager.Line.S1_ShelfTask = HttpServer.ShelfFinish(CurrTray.realRFID, CurrTray.barcode, CurrTray.shelfP.ToString(), robotNum.ToString());
EndMove(); EndMove();
} }
else if (MoveInfo.IsTimeOut(180)) else if (MoveInfo.IsTimeOut(180))
{ {
...@@ -266,7 +268,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -266,7 +268,7 @@ namespace OnlineStore.DeviceLibrary
{ {
EndMove(); EndMove();
} }
} }
private void EndMove() private void EndMove()
{ {
LogUtil.info(Name + MoveInfo.SLog + "【" + CurrPoint + "】结束放料 " + DateTime.Now.ToLongTimeString() + ""); LogUtil.info(Name + MoveInfo.SLog + "【" + CurrPoint + "】结束放料 " + DateTime.Now.ToLongTimeString() + "");
...@@ -296,8 +298,8 @@ namespace OnlineStore.DeviceLibrary ...@@ -296,8 +298,8 @@ namespace OnlineStore.DeviceLibrary
{ {
NeedRfid = CurrTray.rfid; NeedRfid = CurrTray.rfid;
//料架号=00,不放料 //料架号=000,不放料
if (currRfid.EndsWith("00")) if (!currRfid.StartsWith("D")&& !currRfid.StartsWith("C"))
{ {
return false; return false;
} }
...@@ -320,7 +322,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -320,7 +322,7 @@ namespace OnlineStore.DeviceLibrary
} }
} }
//当前是第一盘料,使用虚拟料架号 //当前是第一盘料,使用虚拟料架号
string needType = CurrTray.rfid.Substring(CurrTray.rfid.Length - 1, 1); string needType = CurrTray.rfid.Substring(CurrTray.rfid.Length - 1, 1);
string currType = currRfid.Substring(0, 1); string currType = currRfid.Substring(0, 1);
...@@ -357,7 +359,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -357,7 +359,7 @@ namespace OnlineStore.DeviceLibrary
if (String.IsNullOrEmpty(CurrTray.getP).Equals(false)) if (String.IsNullOrEmpty(CurrTray.getP).Equals(false))
{ {
info += ", " + CurrTray.ToStr() + " "; info += ", " + CurrTray.ToStr() + " ";
} }
return info; return info;
} }
} }
......
...@@ -30,6 +30,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -30,6 +30,7 @@ namespace OnlineStore.DeviceLibrary
{ {
NONE, NONE,
READ_RFID, READ_RFID,
WAIT_AGV,
/// <summary> /// <summary>
/// 等待到达提升机 /// 等待到达提升机
/// </summary> /// </summary>
...@@ -38,7 +39,6 @@ namespace OnlineStore.DeviceLibrary ...@@ -38,7 +39,6 @@ namespace OnlineStore.DeviceLibrary
/// 料架流出 /// 料架流出
/// </summary> /// </summary>
SHELT_OUT, SHELT_OUT,
WAIT_AGV,
} }
public StepInfo<BenQ_IN_STEP> benQInStepLeft = new StepInfo<BenQ_IN_STEP>(BenQ_IN_STEP.NONE); public StepInfo<BenQ_IN_STEP> benQInStepLeft = new StepInfo<BenQ_IN_STEP>(BenQ_IN_STEP.NONE);
......
...@@ -84,14 +84,22 @@ namespace OnlineStore.DeviceLibrary ...@@ -84,14 +84,22 @@ namespace OnlineStore.DeviceLibrary
benQInFromOutStep.AddIoWait(IO_Type.R_RightStopCheck, IO_VALUE.HIGH); benQInFromOutStep.AddIoWait(IO_Type.R_RightStopCheck, IO_VALUE.HIGH);
IOMove(IO_Type.R_OutLineBackRun, IO_VALUE.HIGH); IOMove(IO_Type.R_OutLineBackRun, IO_VALUE.HIGH);
} }
//else if(hasShelfRight && !noShelfLeft && chainNoRun)//提升机上有料架,送入处理 else if (hasShelfRight && !noShelfLeft && benQOutStep.GetCurStep() <= BenQ_OUT_STEP.WAIT_AGV && chainNoRun)//准备送满料,但提升机上有架子
//{ {
// CheckAndMove(IO_Type.R_LeftStopCylinder, IO_VALUE.LOW); CheckAndMove(IO_Type.R_LeftStopCylinder, IO_VALUE.LOW);
// benQInFromOutStep.ToNextStep(BenQ_IN_FROM_OUT_STEP.SHELF_TO_UPDOWN); benQInFromOutStep.ToNextStep(BenQ_IN_FROM_OUT_STEP.SHELF_TO_UPDOWN);
// benQInFromOutStep.Msg = "检测到右侧提升机有料架,提升机上升"; benQInFromOutStep.Msg = "检测到右侧提升机有料架[准备送满料],提升机上升";
// benQInFromOutStep.AddIoWait(IO_Type.R_LeftStopCheck, IO_VALUE.HIGH); benQInFromOutStep.AddIoWait(IO_Type.R_LeftStopCheck, IO_VALUE.HIGH);
// benQInFromOutStep.AddIoWait(IO_Type.R_RightStopCheck, IO_VALUE.HIGH); benQInFromOutStep.AddIoWait(IO_Type.R_RightStopCheck, IO_VALUE.HIGH);
//} }
else if (hasShelfRight && !noShelfLeft && chainNoRun)
{
CheckAndMove(IO_Type.R_LeftStopCylinder, IO_VALUE.LOW);
benQInFromOutStep.ToNextStep(BenQ_IN_FROM_OUT_STEP.SHELF_TO_UPDOWN);
benQInFromOutStep.Msg = "检测到右侧提升机有料架[无满料出],提升机上升";
benQInFromOutStep.AddIoWait(IO_Type.R_LeftStopCheck, IO_VALUE.HIGH);
benQInFromOutStep.AddIoWait(IO_Type.R_RightStopCheck, IO_VALUE.HIGH);
}
} }
else else
{ {
...@@ -168,14 +176,13 @@ namespace OnlineStore.DeviceLibrary ...@@ -168,14 +176,13 @@ namespace OnlineStore.DeviceLibrary
bool shelfUp = IOValue(IO_Type.R_Updown_Up).Equals(IO_VALUE.HIGH); bool shelfUp = IOValue(IO_Type.R_Updown_Up).Equals(IO_VALUE.HIGH);
if (!shelfUp) if (!shelfUp)
return; return;
if (!rHBuffTransStep.IsStep(RBUFF_TRANVERSE_STEP.NONE))
return;
if (benQInFromOutStep.IsFinished())//提升机到达上层 if (benQInFromOutStep.IsFinished())//提升机到达上层
{ {
benQInFromOutStep.ToNextStep(BenQ_IN_FROM_OUT_STEP.SHELF_ENTER); benQInFromOutStep.ToNextStep(BenQ_IN_FROM_OUT_STEP.SHELF_ENTER);
benQInFromOutStep.Msg = "料架到达右侧提升机上层,准备送出料架"; benQInFromOutStep.Msg = "料架到达右侧提升机上层,准备送出料架";
benQInFromOutStep.AddIoWait(IO_Type.R_LeftStopCheck, IO_VALUE.LOW, 5000); benQInFromOutStep.AddIoWait(IO_Type.R_LeftStopCheck, IO_VALUE.LOW, 5000);
benQInFromOutStep.AddIoWait(IO_Type.R_RightStopCheck, IO_VALUE.LOW, 5000); benQInFromOutStep.AddIoWait(IO_Type.R_RightStopCheck, IO_VALUE.LOW, 5000);
benQInFromOutStep.AddIoWait(IO_Type.RHigh_FullCheck, IO_VALUE.HIGH, 5000);
CheckAndMove(IO_Type.RHigh_LineRun, IO_VALUE.HIGH);//右侧上层链条运行 CheckAndMove(IO_Type.RHigh_LineRun, IO_VALUE.HIGH);//右侧上层链条运行
CheckAndMove(IO_Type.R_OutLineBackRun, IO_VALUE.HIGH); CheckAndMove(IO_Type.R_OutLineBackRun, IO_VALUE.HIGH);
IOMove(IO_Type.R_RightStopCylinder, IO_VALUE.HIGH, 5000); IOMove(IO_Type.R_RightStopCylinder, IO_VALUE.HIGH, 5000);
...@@ -185,7 +192,8 @@ namespace OnlineStore.DeviceLibrary ...@@ -185,7 +192,8 @@ namespace OnlineStore.DeviceLibrary
} }
else if (benQInFromOutStep.IsStep(BenQ_IN_FROM_OUT_STEP.SHELF_ENTER)) else if (benQInFromOutStep.IsStep(BenQ_IN_FROM_OUT_STEP.SHELF_ENTER))
{ {
bool noShelf = IOManager.IOValue(IO_Type.R_LeftStopCheck).Equals(IO_VALUE.LOW) && IOManager.IOValue(IO_Type.R_RightStopCheck).Equals(IO_VALUE.LOW); bool noShelf = IOManager.IOValue(IO_Type.R_LeftStopCheck).Equals(IO_VALUE.LOW) &&
IOManager.IOValue(IO_Type.R_RightStopCheck).Equals(IO_VALUE.LOW) && IOManager.IOValue(IO_Type.RHigh_FullCheck).Equals(IO_VALUE.HIGH);
if (noShelf && benQInFromOutStep.IsFinished())//料盘进入完成 if (noShelf && benQInFromOutStep.IsFinished())//料盘进入完成
{ {
IOMove(IO_Type.R_RightStopCylinder, IO_VALUE.LOW); IOMove(IO_Type.R_RightStopCylinder, IO_VALUE.LOW);
...@@ -200,6 +208,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -200,6 +208,7 @@ namespace OnlineStore.DeviceLibrary
} }
else else
{ {
KeepLineRun(IO_Type.RHigh_LineRun);
CheckAndMove(IO_Type.R_RightStopCylinder, IO_VALUE.HIGH); CheckAndMove(IO_Type.R_RightStopCylinder, IO_VALUE.HIGH);
CheckAndMove(IO_Type.R_LeftStopCylinder, IO_VALUE.HIGH); CheckAndMove(IO_Type.R_LeftStopCylinder, IO_VALUE.HIGH);
} }
...@@ -210,8 +219,8 @@ namespace OnlineStore.DeviceLibrary ...@@ -210,8 +219,8 @@ namespace OnlineStore.DeviceLibrary
{ {
benQInFromOutStep.ToNextStep(BenQ_IN_FROM_OUT_STEP.WAIT_SHELF_TO_READY_POS); benQInFromOutStep.ToNextStep(BenQ_IN_FROM_OUT_STEP.WAIT_SHELF_TO_READY_POS);
benQInFromOutStep.Msg = "BenQ AGV 在右侧提升机将料架送入上层平台完成"; benQInFromOutStep.Msg = "BenQ AGV 在右侧提升机将料架送入上层平台完成";
benQInFromOutStep.AddIoWait(IO_Type.RHigh_StopCheck1, IO_VALUE.HIGH); benQInFromOutStep.AddIoWait(IO_Type.RHigh_StopCheck1, IO_VALUE.HIGH);
benQInFromOutStep.AddTimeWait(10000); benQInFromOutStep.AddTimeWait(60000);
} }
} }
else if (benQInFromOutStep.IsStep(BenQ_IN_FROM_OUT_STEP.WAIT_SHELF_TO_READY_POS)) else if (benQInFromOutStep.IsStep(BenQ_IN_FROM_OUT_STEP.WAIT_SHELF_TO_READY_POS))
......
...@@ -51,7 +51,6 @@ ...@@ -51,7 +51,6 @@
<conversionPattern value="[%date][%t]%-5p %m%n" /> <conversionPattern value="[%date][%t]%-5p %m%n" />
</layout> </layout>
</appender> </appender>
<logger name="RollingLogFileAppender"> <logger name="RollingLogFileAppender">
<level value="Info" /> <level value="Info" />
<appender-ref ref="RollingLogFileAppender" /> <appender-ref ref="RollingLogFileAppender" />
...@@ -60,10 +59,10 @@ ...@@ -60,10 +59,10 @@
<level value="Error" /> <level value="Error" />
<appender-ref ref="TheRFID" /> <appender-ref ref="TheRFID" />
</logger> </logger>
<!--<root> <root name="RollingLogFileAppender">
<level value="Info" /> <level value="Info" />
<appender-ref ref="RollingLogFileAppender" /> <appender-ref ref="RollingLogFileAppender" />
</root>--> </root>
</log4net> </log4net>
<startup> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!