LAPTOP-SNT8I5JK\Boounion
2025-02-18 3a0ee214cfefcd1823b48ffe800b1932187eed0b
1.增加Upstream Inline Mode
Downstream Inline Mode
Local Alarm State
Auto Recipe Change Mode
VCR#1 Enable Mode
数据的解释,访问函数接口;
已修改2个文件
110 ■■■■■ 文件已修改
SourceCode/Bond/Servo/CEquipment.cpp 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEquipment.h 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEquipment.cpp
@@ -10,6 +10,11 @@
        m_listener = { nullptr, nullptr };
        m_alive = {FALSE, 0, FALSE};
        m_bCimState = FALSE;
        m_bUpstreamInline = FALSE;
        m_bDownstreamInline = FALSE;
        m_bLocalAlarm = FALSE;
        m_bAutoRecipeChange = FALSE;
        m_bVCREnable[0] = FALSE;
        InitializeCriticalSection(&m_criticalSection);
    }
@@ -134,12 +139,14 @@
        // 以下解释和处理数据
        BOOL bFlag;
        int index = 0x340;
        // alive
        /*
        BOOL bAliveFlag = isBitOn(pszData, size, 0x340);
        if (m_alive.flag != bAliveFlag) {
            m_alive.flag = bAliveFlag;
        bFlag = isBitOn(pszData, size, index);
        if (!equalBool(m_alive.flag, bFlag)) {
            m_alive.flag = bFlag;
            m_alive.count = 0;
            // ״̬
@@ -150,14 +157,44 @@
                }
            }
        }
        */
        // CIM State
        BOOL bCimState = isBitOn(pszData, size, 0x341);
        if ((bCimState && !m_bCimState) || (!bCimState && m_bCimState)) {
            m_bCimState = bCimState;
        bFlag = isBitOn(pszData, size, ++index);
        if (!equalBool(m_bCimState, bFlag)) {
            m_bCimState = bFlag;
            if (m_listener.onCimStateChanged != nullptr) {
                m_listener.onCimStateChanged(this, m_bCimState);
            }
        }
        // UpstreamInline
        bFlag = isBitOn(pszData, size, ++index);
        if (!equalBool(m_bUpstreamInline, bFlag)) {
            m_bUpstreamInline = bFlag;
        }
        // DownstreamInline
        bFlag = isBitOn(pszData, size, ++index);
        if (!equalBool(m_bDownstreamInline, bFlag)) {
            m_bDownstreamInline = bFlag;
        }
        // LocalAlarm
        bFlag = isBitOn(pszData, size, ++index);
        if (!equalBool(m_bLocalAlarm, bFlag)) {
            m_bLocalAlarm = bFlag;
        }
        // AutoRecipeChange
        bFlag = isBitOn(pszData, size, ++index);
        if (!equalBool(m_bAutoRecipeChange, bFlag)) {
            m_bAutoRecipeChange = bFlag;
        }
        // AutoRecipeChange
        bFlag = isBitOn(pszData, size, ++index);
        if (!equalBool(m_bVCREnable[0], bFlag)) {
            m_bVCREnable[0] = bFlag;
        }
    }
@@ -170,8 +207,44 @@
        return CToolUnits::getBit(pszData[byteIndex], bitIndex);
    }
    BOOL CEquipment::equalBool(BOOL b1, BOOL b2)
    {
        return (b1 && b2) || (!b1 && !b2);
    }
    BOOL CEquipment::isAlive()
    {
        return m_alive.alive;
    }
    BOOL CEquipment::isCimOn()
    {
        return m_bCimState;
    }
    BOOL CEquipment::isUpstreamInline()
    {
        return m_bUpstreamInline;
    }
    BOOL CEquipment::isDownstreamInline()
    {
        return m_bDownstreamInline;
    }
    BOOL CEquipment::isLocalAlarm()
    {
        return m_bLocalAlarm;
    }
    BOOL CEquipment::isAutoRecipeChange()
    {
        return m_bAutoRecipeChange;
    }
    BOOL CEquipment::isVCREnable(unsigned int index)
    {
        if (index >= VCR_MAX) return FALSE;
        return m_bVCREnable[index];
    }
}
SourceCode/Bond/Servo/CEquipment.h
@@ -5,6 +5,7 @@
namespace SERVO {
#define BLOCK_BUFFER_MAX            1024
#define ALIVE_TIMEOUT                15
#define VCR_MAX                        1
    typedef std::function<void(void* pEiuipment, BOOL bAlive)> ONALIVE;
    typedef struct _EquipmentListener
@@ -56,10 +57,22 @@
        virtual void onTimer(UINT nTimerid);
        virtual void serialize(CArchive& ar);
        virtual void onReceiveLBData(const char* pszData, size_t size);
    // 以下为从CC-Link读取到的Bit标志位检测函数
    public:
        BOOL isAlive();
        BOOL isCimOn();
        BOOL isUpstreamInline();
        BOOL isDownstreamInline();
        BOOL isLocalAlarm();
        BOOL isAutoRecipeChange();
        BOOL isVCREnable(unsigned int index);
    private:
        BOOL isBitOn(const char* pszData, size_t size, int index);
        inline BOOL equalBool(BOOL b1, BOOL b2);
    protected:
        inline void Lock() { EnterCriticalSection(&m_criticalSection); }
@@ -75,9 +88,15 @@
        MemoryBlock m_blockReadBit;
        MemoryBlock m_blockWriteBit;
        // 以下为从CC-Link读取到的Bit标志位
    private:
        ALIVE m_alive;
        BOOL m_bCimState;            // ON/OFF
        BOOL m_bUpstreamInline;
        BOOL m_bDownstreamInline;
        BOOL m_bLocalAlarm;
        BOOL m_bAutoRecipeChange;
        BOOL m_bVCREnable[VCR_MAX];
    };
}