From ebc5dba7e2b0dccb9583faefa21ffd3454792788 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期二, 20 五月 2025 14:32:43 +0800
Subject: [PATCH] 1.修改名称,ID等;
---
SourceCode/Bond/Servo/CLoadPort.cpp | 457 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 441 insertions(+), 16 deletions(-)
diff --git a/SourceCode/Bond/Servo/CLoadPort.cpp b/SourceCode/Bond/Servo/CLoadPort.cpp
index f736ee1..d3879c3 100644
--- a/SourceCode/Bond/Servo/CLoadPort.cpp
+++ b/SourceCode/Bond/Servo/CLoadPort.cpp
@@ -1,11 +1,27 @@
#include "stdafx.h"
#include "CLoadPort.h"
+#include "CGlassPool.h"
+#include "Servo.h"
+
+#define CHECK_READ_STEP_SIGNAL2(addr, data, size) { \
+ BOOL bFlag = isBitOn(data, size, addr); \
+ SERVO::CStep* pStep = getStep(addr); \
+ if (pStep != nullptr) { \
+ ((CReadStep*)pStep)->onReadSignal(bFlag ? addr : 0); \
+ } \
+}
namespace SERVO {
CLoadPort::CLoadPort() : CEquipment()
{
-
+ m_nIndex = 0;
+ m_nType = 1;
+ m_nMode = 1;
+ m_nCassetteType = 1;
+ m_nTransferMode = 1;
+ m_bEnable = FALSE;
+ m_bAutoChangeEnable = FALSE;
}
CLoadPort::~CLoadPort()
@@ -39,6 +55,120 @@
addPin(SERVO::PinType::OUTPUT, _T("Out2"));
}
+ void CLoadPort::initSteps()
+ {
+ CEquipment::initSteps();
+
+
+ ASSERT(m_nIndex == 0 || m_nIndex == 1 || m_nIndex == 2 || m_nIndex == 3);
+
+ {
+ // Cassette Ctrl Cmd
+ static char* pszName[] = { STEP_EQ_P1_CASSETTE_CTRL_CMD, STEP_EQ_P2_CASSETTE_CTRL_CMD, STEP_EQ_P3_CASSETTE_CTRL_CMD, STEP_EQ_P4_CASSETTE_CTRL_CMD };
+ static int writeSignalDev[] = { 0x120, 0x121, 0x122, 0x123 };
+ static int dev[] = { 0x45, 0x1a5, 0x305, 0x465 };
+ static int addr[] = { 0x480, 0x481, 0x482, 0x483 };
+
+ CEqCassetteCtrlCmdStep* pStep = new CEqCassetteCtrlCmdStep();
+ pStep->setName(pszName[m_nIndex]);
+ pStep->setWriteSignalDev(writeSignalDev[m_nIndex]);
+ pStep->setCtrlCmdDev(dev[m_nIndex]);
+ if (addStep(addr[m_nIndex], pStep) != 0) {
+ delete pStep;
+ }
+ }
+
+ {
+ // Type
+ static char* pszName[] = { STEP_EQ_PORT1_TYPE, STEP_EQ_PORT2_TYPE, STEP_EQ_PORT3_TYPE, STEP_EQ_PORT4_TYPE };
+ static int dev[] = { 0x6010 , 0x6020, 0x6030, 0x6040 };
+ static int writeSignalDev[] = { 0xa0, 0xa1, 0xa2, 0xa3 };
+ static int addr[] = { STEP_ID_PORT1_TYPE_CHANGE, STEP_ID_PORT2_TYPE_CHANGE, STEP_ID_PORT3_TYPE_CHANGE, STEP_ID_PORT4_TYPE_CHANGE };
+
+ CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, dev[m_nIndex]);
+ pStep->setName(pszName[m_nIndex]);
+ pStep->setWriteSignalDev(writeSignalDev[m_nIndex]);
+ if (addStep(addr[m_nIndex], pStep) != 0) {
+ delete pStep;
+ }
+ }
+
+ {
+ // Mode
+ static char* pszName[] = { STEP_EQ_PORT1_MODE, STEP_EQ_PORT2_MODE, STEP_EQ_PORT3_MODE, STEP_EQ_PORT4_MODE };
+ static int dev[] = { 0x6011, 0x6021, 0x6031, 0x6041 };
+ static int writeSignalDev[] = { 0xa8, 0xa9, 0xaa, 0xab };
+ static int addr[] = { STEP_ID_PORT1_MODE_CHANGE, STEP_ID_PORT2_MODE_CHANGE, STEP_ID_PORT3_MODE_CHANGE, STEP_ID_PORT4_MODE_CHANGE };
+
+ CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, dev[m_nIndex]);
+ pStep->setName(pszName[m_nIndex]);
+ pStep->setWriteSignalDev(writeSignalDev[m_nIndex]);
+ if (addStep(addr[m_nIndex], pStep) != 0) {
+ delete pStep;
+ }
+ }
+
+ {
+ // Cassette type
+ static char* pszName[] = { STEP_EQ_PORT1_CASSETTE_TYPE, STEP_EQ_PORT2_CASSETTE_TYPE, STEP_EQ_PORT3_CASSETTE_TYPE, STEP_EQ_PORT4_CASSETTE_TYPE };
+ static int dev[] = { 0x6012, 0x6022, 0x6032, 0x6042 };
+ static int writeSignalDev[] = { 0xb0, 0xb1, 0xb2, 0xb3 };
+ static int addr[] = { STEP_ID_PORT1_CASSETTE_TYPE_CHANGE, STEP_ID_PORT2_CASSETTE_TYPE_CHANGE, STEP_ID_PORT3_CASSETTE_TYPE_CHANGE, STEP_ID_PORT4_CASSETTE_TYPE_CHANGE };
+
+ CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, dev[m_nIndex]);
+ pStep->setName(pszName[m_nIndex]);
+ pStep->setWriteSignalDev(writeSignalDev[m_nIndex]);
+ if (addStep(addr[m_nIndex], pStep) != 0) {
+ delete pStep;
+ }
+ }
+
+ {
+ // Transfer type
+ static char* pszName[] = { STEP_EQ_PORT1_TRANSFER_MODE, STEP_EQ_PORT2_TRANSFER_MODE, STEP_EQ_PORT3_TRANSFER_MODE, STEP_EQ_PORT4_TRANSFER_MODE };
+ static int dev[] = { 0x6014, 0x6024, 0x6034, 0x6044 };
+ static int writeSignalDev[] = { 0xb8, 0xb9, 0xba, 0xbb };
+ static int addr[] = { STEP_ID_PORT1_TRANSFER_MODE_CHANGE, STEP_ID_PORT2_TRANSFER_MODE_CHANGE, STEP_ID_PORT3_TRANSFER_MODE_CHANGE, STEP_ID_PORT4_TRANSFER_MODE_CHANGE };
+
+ CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, dev[m_nIndex]);
+ pStep->setName(pszName[m_nIndex]);
+ pStep->setWriteSignalDev(writeSignalDev[m_nIndex]);
+ if (addStep(addr[m_nIndex], pStep) != 0) {
+ delete pStep;
+ }
+ }
+
+ {
+ // Port enable
+ static char* pszName[] = { STEP_EQ_PORT1_ENABLE, STEP_EQ_PORT2_ENABLE, STEP_EQ_PORT3_ENABLE, STEP_EQ_PORT4_ENABLE };
+ static int dev[] = { 0x6015, 0x6025, 0x6035, 0x6045 };
+ static int writeSignalDev[] = { 0xc0, 0xc1, 0xc2, 0xc3 };
+ static int addr[] = { STEP_ID_PORT1_ENABLE_MODE_CHANGE, STEP_ID_PORT2_ENABLE_MODE_CHANGE, STEP_ID_PORT3_ENABLE_MODE_CHANGE, STEP_ID_PORT4_ENABLE_MODE_CHANGE };
+
+ CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, dev[m_nIndex]);
+ pStep->setName(pszName[m_nIndex]);
+ pStep->setWriteSignalDev(writeSignalDev[m_nIndex]);
+ if (addStep(addr[m_nIndex], pStep) != 0) {
+ delete pStep;
+ }
+ }
+
+ {
+ // Type auto change
+ char* pszName[] = { STEP_EQ_PORT1_TYPE_ATUO, STEP_EQ_PORT2_TYPE_ATUO, STEP_EQ_PORT3_TYPE_ATUO, STEP_EQ_PORT4_TYPE_ATUO };
+ static int dev[] = { 0x6016, 0x6026, 0x6036, 0x6046 };
+ static int writeSignalDev[] = { 0xc8, 0xc9, 0xca, 0xcb };
+ static int addr[] = { STEP_ID_PORT1_TYPE_AUTO_CHANGE, STEP_ID_PORT2_TYPE_AUTO_CHANGE, STEP_ID_PORT3_TYPE_AUTO_CHANGE, STEP_ID_PORT4_TYPE_AUTO_CHANGE };
+
+ CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, dev[m_nIndex]);
+ pStep->setName(pszName[m_nIndex]);
+ pStep->setWriteSignalDev(writeSignalDev[m_nIndex]);
+ if (addStep(addr[m_nIndex], pStep) != 0) {
+ delete pStep;
+ }
+ }
+ }
+
void CLoadPort::onTimer(UINT nTimerid)
{
CEquipment::onTimer(nTimerid);
@@ -52,6 +182,23 @@
void CLoadPort::getAttributeVector(CAttributeVector& attrubutes)
{
__super::getAttributeVector(attrubutes);
+
+ unsigned int weight = 101;
+ std::string strTemp;
+ attrubutes.addAttribute(new CAttribute("Index",
+ std::to_string(m_nIndex).c_str(), "", weight++));
+ attrubutes.addAttribute(new CAttribute("Type",
+ getPortTypeDescription(m_nType, strTemp).c_str(), "", weight++));
+ attrubutes.addAttribute(new CAttribute("Mode",
+ getPortModeDescription(m_nMode, strTemp).c_str(), "", weight++));
+ attrubutes.addAttribute(new CAttribute("CassetteType",
+ getPortCassetteTypeDescription(m_nCassetteType, strTemp).c_str(), "", weight++));
+ attrubutes.addAttribute(new CAttribute("TransferMode",
+ getPortTransferModeDescription(m_nTransferMode, strTemp).c_str(), "", weight++));
+ attrubutes.addAttribute(new CAttribute("Enable",
+ m_bEnable ? "Eanble" : "Disable", "", weight++));
+ attrubutes.addAttribute(new CAttribute("Auto Change",
+ m_bAutoChangeEnable ? "Eanble" : "Disable", "", weight++));
}
int CLoadPort::recvIntent(CPin* pPin, CIntent* pIntent)
@@ -61,19 +208,6 @@
int CLoadPort::outputGlass(int port)
{
- // 如果列表中没有Panel,模拟生成10张
- if (m_glassList.empty()) {
- static int ii = 0;
- char szBuffer[64];
- LOGI("<CLoadPort>模拟生成10张PANEL");
- for (int i = 0; i < 10; i++) {
- sprintf_s(szBuffer, "P20250320A1A%d", ++ii);
- CGlass* pGlass = new CGlass();
- pGlass->setID(szBuffer);
- addGlassToList(pGlass);
- }
- }
-
return __super::outputGlass(port);
}
@@ -92,7 +226,7 @@
int jobExistenceSize,
short slotProcess,
short jopCount,
- CJobDataB* pJobDataB)
+ CJobDataA* pJobDataA)
{
int id = getID();
if ( !(id == EQ_ID_LOADPORT1 || id == EQ_ID_LOADPORT2) ) {
@@ -102,7 +236,7 @@
SERVO::CEqCassetteCtrlCmdStep* pStep = (SERVO::CEqCassetteCtrlCmdStep*)getCassetteCtrlCmdStep();
ASSERT(pStep);
- return pStep->sendCtrlCmd(cmd, jobExistence, jobExistenceSize, slotProcess, jopCount, pJobDataB);
+ return pStep->sendCtrlCmd(cmd, jobExistence, jobExistenceSize, slotProcess, jopCount, pJobDataA);
}
CStep* CLoadPort::getCassetteCtrlCmdStep()
@@ -121,4 +255,295 @@
return pStep;
}
+
+ void CLoadPort::setIndex(unsigned int index)
+ {
+ m_nIndex = index;
+ }
+
+ unsigned int CLoadPort::getIndex()
+ {
+ return m_nIndex;
+ }
+
+ BOOL CLoadPort::isEnable()
+ {
+ return m_bEnable;
+ }
+
+ int CLoadPort::getPortType()
+ {
+ return m_nType;
+ }
+
+ int CLoadPort::getPortMode()
+ {
+ return m_nMode;
+ }
+
+ int CLoadPort::getCessetteType()
+ {
+ return m_nCassetteType;
+ }
+
+ int CLoadPort::getTransferMode()
+ {
+ return m_nTransferMode;
+ }
+
+ BOOL CLoadPort::isAutoChange()
+ {
+ return m_bAutoChangeEnable;
+ }
+
+ /*
+ 1: Loading Port
+ 2: Unloading Port
+ 3: Both Port
+ 4: Buffer Port-Buffer Type
+ 5: Buffer Port-Loader in Buffer Type
+ 6: Buffer Port-Un-loader in Buffer Type
+ 7: Unloading Partial Port
+ */
+ std::string& CLoadPort::getPortTypeDescription(int portType, std::string& strDescription)
+ {
+ switch (portType) {
+ case 1:
+ strDescription = _T("Loading Port");
+ break;
+ case 2:
+ strDescription = _T("Unloading Port");
+ break;
+ case 3:
+ strDescription = _T("Both Port");
+ break;
+ case 4:
+ strDescription = _T("Buffer Port - Buffer Type");
+ break;
+ case 5:
+ strDescription = _T("Buffer Port - Loader in Buffer Type");
+ break;
+ case 6:
+ strDescription = _T("Buffer Port - Un-loader in Buffer Type");
+ break;
+ case 7:
+ strDescription = _T("Unloading Partial Port");
+ break;
+ default:
+ strDescription = _T("");
+ break;
+ }
+
+ return strDescription;
+ }
+
+ /*
+ 0: OutOfService
+ 1: TransferBlocked
+ 2: ReadyToLoad
+ 3: ReadyToUnload
+ 4: InService
+ 5: TransferReady
+ */
+ std::string& CLoadPort::getPortModeDescription(int portMode, std::string& strDescription)
+ {
+ switch (portMode) {
+ case 0:
+ strDescription = _T("OutOfService");
+ break;
+ case 1:
+ strDescription = _T("TransferBlocked");
+ break;
+ case 2:
+ strDescription = _T("ReadyToLoad");
+ break;
+ case 3:
+ strDescription = _T("ReadyToUnload");
+ break;
+ case 4:
+ strDescription = _T("InService");
+ break;
+ case 5:
+ strDescription = _T("TransferReady");
+ break;
+ default:
+ strDescription = _T("");
+ break;
+ }
+
+ return strDescription;
+ }
+
+ /*
+ 1: G1
+ 2: G2
+ 3: G1&G2
+ */
+ std::string& CLoadPort::getPortCassetteTypeDescription(int casseteType, std::string& strDescription)
+ {
+ switch (casseteType) {
+ case 1:
+ strDescription = _T("G1");
+ break;
+ case 2:
+ strDescription = _T("G2");
+ break;
+ case 3:
+ strDescription = _T("G1&G2");
+ break;
+ default:
+ strDescription = _T("");
+ break;
+ }
+
+ return strDescription;
+ }
+
+ /*
+ 1: MGV Mode
+ 2: AGV Mode
+ 3: Stocker Inline Mode
+ */
+ std::string& CLoadPort::getPortTransferModeDescription(int mode, std::string& strDescription)
+ {
+ switch (mode) {
+ case 1:
+ strDescription = _T("MGV Mode");
+ break;
+ case 2:
+ strDescription = _T("AGV Mode");
+ break;
+ case 3:
+ strDescription = _T("Stocker Inline Mode");
+ break;
+ default:
+ strDescription = _T("");
+ break;
+ }
+
+ return strDescription;
+ }
+
+
+ /*
+ 1 : Enable
+ 2 : Disable
+ */
+ std::string& CLoadPort::getEnableModeDescription(int mode, std::string& strDescription)
+ {
+ switch (mode) {
+ case 1:
+ strDescription = _T("Enable");
+ break;
+ case 2:
+ strDescription = _T("Disable");
+ break;
+ default:
+ strDescription = _T("");
+ break;
+ }
+
+ return strDescription;
+ }
+
+ void CLoadPort::onReceiveLBData(const char* pszData, size_t size)
+ {
+ static int type[] = { STEP_ID_PORT1_TYPE_CHANGE, STEP_ID_PORT2_TYPE_CHANGE,
+ STEP_ID_PORT3_TYPE_CHANGE, STEP_ID_PORT4_TYPE_CHANGE };
+ static int mode[] = { STEP_ID_PORT1_MODE_CHANGE, STEP_ID_PORT2_MODE_CHANGE,
+ STEP_ID_PORT3_MODE_CHANGE, STEP_ID_PORT4_MODE_CHANGE };
+ static int cassetteType[] = { STEP_ID_PORT1_CASSETTE_TYPE_CHANGE, STEP_ID_PORT2_CASSETTE_TYPE_CHANGE,
+ STEP_ID_PORT3_CASSETTE_TYPE_CHANGE, STEP_ID_PORT4_CASSETTE_TYPE_CHANGE };
+ static int transferMode[] = { STEP_ID_PORT1_TRANSFER_MODE_CHANGE, STEP_ID_PORT2_TRANSFER_MODE_CHANGE,
+ STEP_ID_PORT3_TRANSFER_MODE_CHANGE, STEP_ID_PORT4_TRANSFER_MODE_CHANGE };
+ static int enable[] = { STEP_ID_PORT1_ENABLE_MODE_CHANGE, STEP_ID_PORT2_ENABLE_MODE_CHANGE,
+ STEP_ID_PORT3_ENABLE_MODE_CHANGE, STEP_ID_PORT4_ENABLE_MODE_CHANGE };
+ static int autoType[] = { STEP_ID_PORT1_TYPE_AUTO_CHANGE, STEP_ID_PORT2_TYPE_AUTO_CHANGE,
+ STEP_ID_PORT3_TYPE_AUTO_CHANGE, STEP_ID_PORT4_TYPE_AUTO_CHANGE };
+
+ CHECK_READ_STEP_SIGNAL2(type[m_nIndex], pszData, size);
+ CHECK_READ_STEP_SIGNAL2(mode[m_nIndex], pszData, size);
+ CHECK_READ_STEP_SIGNAL2(cassetteType[m_nIndex], pszData, size);
+ CHECK_READ_STEP_SIGNAL2(transferMode[m_nIndex], pszData, size);
+ CHECK_READ_STEP_SIGNAL2(enable[m_nIndex], pszData, size);
+ CHECK_READ_STEP_SIGNAL2(autoType[m_nIndex], pszData, size);
+ }
+
+ int CLoadPort::onStepEvent(CStep* pStep, int code)
+ {
+ int nRet = CEquipment::onStepEvent(pStep, code);
+ if (nRet > 0) return nRet;
+
+ if (code == STEP_EVENT_READDATA) {
+ if (isPortTypeStep(pStep)) {
+ SERVO::CEqReadIntStep* pReadIntStep = (SERVO::CEqReadIntStep*)pStep;
+ m_nType = pReadIntStep->getValue();
+ }
+ else if(isPortModeStep(pStep)) {
+ SERVO::CEqReadIntStep* pReadIntStep = (SERVO::CEqReadIntStep*)pStep;
+ m_nMode = pReadIntStep->getValue();
+ }
+ else if (isPortCassetteTypeStep(pStep)) {
+ SERVO::CEqReadIntStep* pReadIntStep = (SERVO::CEqReadIntStep*)pStep;
+ m_nCassetteType = pReadIntStep->getValue();
+ }
+ else if (isPortTransferModeStep(pStep)) {
+ SERVO::CEqReadIntStep* pReadIntStep = (SERVO::CEqReadIntStep*)pStep;
+ m_nTransferMode = pReadIntStep->getValue();
+ }
+ else if (isPortEnableStep(pStep)) {
+ SERVO::CEqReadIntStep* pReadIntStep = (SERVO::CEqReadIntStep*)pStep;
+ m_bEnable = pReadIntStep->getValue() == 1;
+ }
+ else if (isPortTypeAutoChangeEnableStep(pStep)) {
+ SERVO::CEqReadIntStep* pReadIntStep = (SERVO::CEqReadIntStep*)pStep;
+ m_bAutoChangeEnable = pReadIntStep->getValue() == 1;
+ }
+ }
+
+
+ return 0;
+ }
+
+ /*
+ * 生成测试用的玻璃列表
+ */
+ int CLoadPort::testGenerateGlassList(MaterialsType type, int count, const char* pszPrefix, int startSuffix)
+ {
+ // 如果非空就不生成了
+ Lock();
+ if (!m_glassList.empty()) {
+ Unlock();
+ return -1;
+ }
+ Unlock();
+
+
+ char szBuffer[64];
+ int suffix = startSuffix;
+ for (int i = 0; i < count; i++) {
+ CJobDataB jb;
+ CJobDataS js;
+
+ sprintf_s(szBuffer, "%s%d", pszPrefix, suffix++);
+ jb.setGlassId(szBuffer);
+ js.setMaterialsType((int)type);
+ if (type == MaterialsType::G1) {
+ js.setGlass1Id(szBuffer);
+ }
+ else if (type == MaterialsType::G2) {
+ js.setGlass2Id(szBuffer);
+ }
+
+ CGlass* pGlass = theApp.m_model.m_glassPool.allocaGlass();
+ pGlass->setID(szBuffer);
+ pGlass->setJobDataB(&jb);
+ pGlass->setType(type);
+ pGlass->setJobDataS(&js);
+ addGlassToList(pGlass);
+ }
+
+ return 0;
+ }
+
}
--
Gitblit v1.9.3