using System; using System.Collections.Generic; using System.Data; using System.Drawing; using System.Linq; using System.Text; using arCtl; using COMM; using static Project.StateMachine; namespace Project { public partial class fMain { DateTime chargesynctime = DateTime.Now; DateTime agvsendstarttime = DateTime.Now; void ConnectSerialPort(arDev.arRS232 dev, string port, int baud, eVarTime conn, eVarTime conntry, eVarTime recvtime) { if (dev.IsOpen == false && port.isEmpty() == false) { var tsPLC = VAR.TIME.RUN(conntry); if (tsPLC.TotalSeconds > 5) { VAR.TIME.Set(conntry); try { VAR.TIME.Set(recvtime); //this.LastReceiveTime = DateTime.Now; dev.PortName = port; dev.BaudRate = baud; if (dev.Open()) { PUB.log.Add(port, "연결완료"); } else { var errmessage = dev.errorMessage; PUB.log.Add("ERROR-" + port, errmessage); } VAR.TIME.Set(conn); VAR.TIME.Set(conntry); } catch (Exception ex) { PUB.log.AddE(ex.Message); } } } else if (dev.PortName.Equals(port) == false) { PUB.log.Add(port, $"포트변경({dev.PortName}->{port})으로 연결 종료"); dev.Close(); VAR.TIME.Set(conntry); } } void sm_SPS(object sender, EventArgs e) { if (PUB.sm.Step < eSMStep.IDLE || PUB.sm.Step >= eSMStep.CLOSING) return; //plc connect ConnectSerialPort(PUB.PLC, PUB.setting.Port_PLC, PUB.setting.Baud_PLC, eVarTime.LastConn_PLC, eVarTime.LastConnTry_PLC, eVarTime.LastRecv_PLC); //agv connect ConnectSerialPort(PUB.AGV, PUB.setting.Port_AGV, PUB.setting.Baud_AGV, eVarTime.LastConn_AGV, eVarTime.LastConnTry_AGV, eVarTime.LastRecv_AGV); //xbee connect ConnectSerialPort(PUB.XBE, PUB.setting.Port_XBE, PUB.setting.Baud_XBE, eVarTime.LastConn_XBE, eVarTime.LastConnTry_XBE, eVarTime.LastRecv_XBE); //bms connect ConnectSerialPort(PUB.BMS, PUB.setting.Port_BAT, PUB.setting.Baud_BAT, eVarTime.LastConn_BAT, eVarTime.LastConnTry_BAT, eVarTime.LastRecv_BAT); //지그비상태전송 if (PUB.XBE != null && PUB.XBE.IsOpen) { //일정간격으로 상태를 전송한다 if (PUB.XBE.lastSendTime.Year == 1982) PUB.XBE.lastSendTime = DateTime.Now.AddSeconds(1); var ts = DateTime.Now - PUB.XBE.lastSendTime; if (ts.TotalSeconds >= PUB.setting.interval_xbe) { var statusMsg = PUB.XBE.GetStatusString(); PUB.XBE.SendStatus(statusMsg); } } //배터리쿼리 if (PUB.BMS != null && PUB.BMS.IsOpen) { if (PUB.BMS.lastSendTime.Year == 1982) PUB.BMS.lastSendTime = DateTime.Now.AddSeconds(1); var ts = DateTime.Now - PUB.BMS.lastSendTime; if (ts.TotalMilliseconds >= PUB.setting.interval_bms) { PUB.BMS.SendQuery(); } Update_BatteryWarnSpeak(); } } } }