コード例 #1
0
ファイル: GXDLMSBase.cpp プロジェクト: Gurux/Gurux.DLMS.cpp
/*
* Add Register Monitor object.
*/
void AddRegisterMonitor(CGXDLMSObjectCollection& items, CGXDLMSRegister* pRegister)
{
    CGXDLMSRegisterMonitor* pRm = new CGXDLMSRegisterMonitor("0.0.16.1.0.255");
    CGXDLMSVariant threshold;
    vector<CGXDLMSVariant> thresholds;
    threshold.Add("Gurux1", 6);
    thresholds.push_back(threshold);
    threshold.Clear();
    threshold.Add("Gurux2", 6);
    thresholds.push_back(threshold);
    pRm->SetThresholds(thresholds);
    CGXDLMSMonitoredValue mv;
    mv.Update(pRegister, 2);
    pRm->SetMonitoredValue(mv);
    CGXDLMSActionSet * action = new CGXDLMSActionSet();
    string ln;
    pRm->GetLogicalName(ln);
    action->GetActionDown().SetLogicalName(ln);
    action->GetActionDown().SetScriptSelector(1);
    pRm->GetLogicalName(ln);
    action->GetActionUp().SetLogicalName(ln);
    action->GetActionUp().SetScriptSelector(1);
    pRm->GetActions().push_back(action);
    items.push_back(pRm);
}
コード例 #2
0
ファイル: GXDLMSBase.cpp プロジェクト: Gurux/Gurux.DLMS.cpp
/*
* Add Electricity ID 1.
*/
void AddElectricityID1(CGXDLMSObjectCollection& items, unsigned long sn)
{
    char buff[17];
#if defined(_WIN32) || defined(_WIN64)//Windows
    sprintf_s(buff, "GRX%.13d", sn);
#else
    sprintf(buff, "GRX%.13d", sn);
#endif
    CGXDLMSVariant id;
    id.Add((const char*)buff, 16);
    CGXDLMSData* d = new CGXDLMSData("1.1.0.0.0.255");
    d->SetValue(id);
    d->GetAttributes().push_back(CGXDLMSAttribute(2, DLMS_DATA_TYPE_STRING));
    items.push_back(d);
}
コード例 #3
0
ファイル: GXDLMSBase.cpp プロジェクト: Gurux/Gurux.DLMS.cpp
///////////////////////////////////////////////////////////////////////
//Add Logical Device Name. 123456 is meter serial number.
///////////////////////////////////////////////////////////////////////
// COSEM Logical Device Name is defined as an octet-string of 16 octets.
// The first three octets uniquely identify the manufacturer of the device and it corresponds
// to the manufacturer's identification in IEC 62056-21.
// The following 13 octets are assigned by the manufacturer.
//The manufacturer is responsible for guaranteeing the uniqueness of these octets.
CGXDLMSData* AddLogicalDeviceName(CGXDLMSObjectCollection& items, unsigned long sn)
{
    char buff[17];
#if defined(_WIN32) || defined(_WIN64)//Windows
    sprintf_s(buff, "GRX%.13d", sn);
#else
    sprintf(buff, "GRX%.13d", sn);
#endif
    CGXDLMSVariant id;
    id.Add((const char*)buff, 16);
    CGXDLMSData* ldn = new CGXDLMSData("0.0.42.0.0.255");
    ldn->SetValue(id);
    items.push_back(ldn);
    return ldn;
}
コード例 #4
0
// Returns value of given attribute.
int CGXDLMSActionSchedule::GetValue(int index, unsigned char* parameters, int length, CGXDLMSVariant& value)
{
    if (index == 1)
    {
        GXHelpers::AddRange(value.byteArr, m_LN, 6);
		value.vt = DLMS_DATA_TYPE_OCTET_STRING;
		return ERROR_CODES_OK;
    }
    if (index == 2)
    {
        vector<unsigned char> stream;
		stream.push_back(DLMS_DATA_TYPE_STRUCTURE);
        stream.push_back(2);
		CGXDLMSVariant tmp;
		tmp.Add(GetExecutedScriptLogicalName());
        CGXOBISTemplate::SetData(stream, DLMS_DATA_TYPE_OCTET_STRING, tmp);
        CGXOBISTemplate::SetData(stream, DLMS_DATA_TYPE_UINT16, GetExecutedScriptSelector());
        value = stream;
		return ERROR_CODES_OK;
    }
    if (index == 3)
    {
        value = GetType();
		return ERROR_CODES_OK;
    }
    if (index == 4)
    {
        vector<unsigned char> stream;
        stream.push_back(DLMS_DATA_TYPE_ARRAY);
        CGXOBISTemplate::SetObjectCount(GetExecutionTime().size(), stream);
		for (vector<CGXDateTime>::iterator it = m_ExecutionTime.begin(); it != m_ExecutionTime.end(); ++it)
        {
            stream.push_back(DLMS_DATA_TYPE_STRUCTURE);
            stream.push_back(2); //Count
            CGXOBISTemplate::SetData(stream, DLMS_DATA_TYPE_TIME, *it); //Time
            CGXOBISTemplate::SetData(stream, DLMS_DATA_TYPE_DATE, *it); //Date
        }
        value = stream;
		return ERROR_CODES_OK;
    }  
    return ERROR_CODES_INVALID_PARAMETER;
}
コード例 #5
0
// Returns value of given attribute.
int CGXDLMSActivityCalendar::GetValue(int index, int selector, CGXDLMSVariant& parameters, CGXDLMSVariant& value)
{
    CGXByteBuffer data;
    if (index == 1)
    {
        return GetLogicalName(this, value);
    }
    if (index == 2)
    {
        value.Add(&m_CalendarNameActive[0], m_CalendarNameActive.size());
        return ERROR_CODES_OK;
    }
    if (index == 3)
    {
        data.SetUInt8(DLMS_DATA_TYPE_ARRAY);
        int cnt = m_SeasonProfileActive.size();
        //Add count
        GXHelpers::SetObjectCount(cnt, data);
        CGXDLMSVariant tmp;
        for (std::vector<CGXDLMSSeasonProfile>::iterator it = m_SeasonProfileActive.begin(); it != m_SeasonProfileActive.end(); ++it)
        {
            data.SetUInt8(DLMS_DATA_TYPE_STRUCTURE);
            data.SetUInt8(3);
            tmp = it->GetName();
            GXHelpers::SetData(data, DLMS_DATA_TYPE_OCTET_STRING, tmp);
            tmp = it->GetStart();
            GXHelpers::SetData(data, DLMS_DATA_TYPE_OCTET_STRING, tmp);
            tmp.Clear();
            tmp.Add((*it).GetWeekName());
            GXHelpers::SetData(data, DLMS_DATA_TYPE_OCTET_STRING, tmp);
        }
        value = data;
        return ERROR_CODES_OK;
    }
    if (index == 4)
    {
        data.SetUInt8(DLMS_DATA_TYPE_ARRAY);
        int cnt = m_WeekProfileTableActive.size();
        //Add count
        GXHelpers::SetObjectCount(cnt, data);
        CGXDLMSVariant tmp;
        for (std::vector<CGXDLMSWeekProfile>::iterator it = m_WeekProfileTableActive.begin(); it != m_WeekProfileTableActive.end(); ++it)
        {
            data.SetUInt8(DLMS_DATA_TYPE_ARRAY);
            data.SetUInt8(8);
            tmp = it->GetName();
            GXHelpers::SetData(data, DLMS_DATA_TYPE_OCTET_STRING, tmp);
            tmp = it->GetMonday();
            GXHelpers::SetData(data, DLMS_DATA_TYPE_UINT8, tmp);
            tmp = it->GetTuesday();
            GXHelpers::SetData(data, DLMS_DATA_TYPE_UINT8, tmp);
            tmp = it->GetWednesday();
            GXHelpers::SetData(data, DLMS_DATA_TYPE_UINT8, tmp);
            tmp = it->GetThursday();
            GXHelpers::SetData(data, DLMS_DATA_TYPE_UINT8, tmp);
            tmp = it->GetFriday();
            GXHelpers::SetData(data, DLMS_DATA_TYPE_UINT8, tmp);
            tmp = it->GetSaturday();
            GXHelpers::SetData(data, DLMS_DATA_TYPE_UINT8, tmp);
            tmp = it->GetSunday();
            GXHelpers::SetData(data, DLMS_DATA_TYPE_UINT8, tmp);
        }
        value = data;
        return ERROR_CODES_OK;
    }
    if (index == 5)
    {
        data.SetUInt8(DLMS_DATA_TYPE_ARRAY);
        int cnt = m_DayProfileTableActive.size();
        //Add count
        GXHelpers::SetObjectCount(cnt, data);
        for (std::vector<CGXDLMSDayProfile>::iterator it = m_DayProfileTableActive.begin(); it != m_DayProfileTableActive.end(); ++it)
        {
            data.SetUInt8(DLMS_DATA_TYPE_STRUCTURE);
            data.SetUInt8(2);
            CGXDLMSVariant tmp = it->GetDayId();
            GXHelpers::SetData(data, DLMS_DATA_TYPE_UINT8, tmp);
            data.SetUInt8(DLMS_DATA_TYPE_ARRAY);
            //Add count
            std::vector<CGXDLMSDayProfileAction>& schedules = (*it).GetDaySchedules();
            GXHelpers::SetObjectCount(schedules.size(), data);
            CGXDLMSVariant time, ln, selector;
            for (std::vector<CGXDLMSDayProfileAction>::iterator action = schedules.begin(); action != schedules.end(); ++action)
            {
                time = action->GetStartTime();
                ln = action->GetScriptLogicalName();
                selector = action->GetScriptSelector();
                GXHelpers::SetData(data, DLMS_DATA_TYPE_OCTET_STRING, time);
                GXHelpers::SetData(data, DLMS_DATA_TYPE_OCTET_STRING, ln);
                GXHelpers::SetData(data, DLMS_DATA_TYPE_UINT16, selector);
            }
        }
        value = data;
        return ERROR_CODES_OK;
    }
    if (index == 6)
    {
        value.Add(m_CalendarNamePassive);
        return ERROR_CODES_OK;
    }
    //
    if (index == 7)
    {
        data.SetUInt8(DLMS_DATA_TYPE_ARRAY);
        int cnt = m_SeasonProfilePassive.size();
        //Add count
        GXHelpers::SetObjectCount(cnt, data);
        CGXDLMSVariant tmp;
        for (std::vector<CGXDLMSSeasonProfile>::iterator it = m_SeasonProfilePassive.begin(); it != m_SeasonProfilePassive.end(); ++it)
        {
            data.SetUInt8(DLMS_DATA_TYPE_STRUCTURE);
            data.SetUInt8(3);
            tmp = it->GetName();
            GXHelpers::SetData(data, DLMS_DATA_TYPE_OCTET_STRING, tmp);
            tmp = it->GetStart();
            GXHelpers::SetData(data, DLMS_DATA_TYPE_OCTET_STRING, tmp);
            tmp = it->GetWeekName();
            GXHelpers::SetData(data, DLMS_DATA_TYPE_OCTET_STRING, tmp);
        }
        value = data;
        return ERROR_CODES_OK;

    }
    if (index == 8)
    {
        data.SetUInt8(DLMS_DATA_TYPE_ARRAY);
        int cnt = m_WeekProfileTablePassive.size();
        //Add count
        GXHelpers::SetObjectCount(cnt, data);
        CGXDLMSVariant tmp;
        for (std::vector<CGXDLMSWeekProfile>::iterator it = m_WeekProfileTablePassive.begin(); it != m_WeekProfileTablePassive.end(); ++it)
        {
            data.SetUInt8(DLMS_DATA_TYPE_ARRAY);
            data.SetUInt8(8);
            tmp = it->GetName();
            GXHelpers::SetData(data, DLMS_DATA_TYPE_OCTET_STRING, tmp);
            tmp = it->GetMonday();
            GXHelpers::SetData(data, DLMS_DATA_TYPE_UINT8, tmp);
            tmp = it->GetTuesday();
            GXHelpers::SetData(data, DLMS_DATA_TYPE_UINT8, tmp);
            tmp = it->GetWednesday();
            GXHelpers::SetData(data, DLMS_DATA_TYPE_UINT8, tmp);
            tmp = it->GetThursday();
            GXHelpers::SetData(data, DLMS_DATA_TYPE_UINT8, tmp);
            tmp = it->GetFriday();
            GXHelpers::SetData(data, DLMS_DATA_TYPE_UINT8, tmp);
            tmp = it->GetSaturday();
            GXHelpers::SetData(data, DLMS_DATA_TYPE_UINT8, tmp);
            tmp = it->GetSunday();
            GXHelpers::SetData(data, DLMS_DATA_TYPE_UINT8, tmp);
        }
        value = data;
        return ERROR_CODES_OK;
    }
    if (index == 9)
    {
        data.SetUInt8(DLMS_DATA_TYPE_ARRAY);
        int cnt = m_DayProfileTablePassive.size();
        //Add count
        GXHelpers::SetObjectCount(cnt, data);
        CGXDLMSVariant id, time, ln, selector;
        for (std::vector<CGXDLMSDayProfile>::iterator it = m_DayProfileTablePassive.begin(); it != m_DayProfileTablePassive.end(); ++it)
        {
            data.SetUInt8(DLMS_DATA_TYPE_STRUCTURE);
            data.SetUInt8(2);
            id = it->GetDayId();
            GXHelpers::SetData(data, DLMS_DATA_TYPE_UINT8, id);
            data.SetUInt8(DLMS_DATA_TYPE_ARRAY);
            //Add count
            GXHelpers::SetObjectCount((*it).GetDaySchedules().size(), data);
            for (std::vector<CGXDLMSDayProfileAction>::iterator action = (*it).GetDaySchedules().begin();
                    action != (*it).GetDaySchedules().end(); ++action)
            {
                time = action->GetStartTime();
                ln = action->GetScriptLogicalName();
                selector = action->GetScriptSelector();
                GXHelpers::SetData(data, DLMS_DATA_TYPE_OCTET_STRING, time);
                GXHelpers::SetData(data, DLMS_DATA_TYPE_OCTET_STRING, ln);
                GXHelpers::SetData(data, DLMS_DATA_TYPE_UINT16, selector);
            }
        }
        value = data;
        return ERROR_CODES_OK;
    }
    if (index == 10)
    {
        value = GetTime();
        return ERROR_CODES_OK;
    }
    return ERROR_CODES_INVALID_PARAMETER;
}
コード例 #6
0
int CGXDLMSObject::GetLogicalName(CGXDLMSObject * target, CGXDLMSVariant& value)
{
    value.Add(target->m_LN, 6);
    value.vt = DLMS_DATA_TYPE_OCTET_STRING;
    return ERROR_CODES_OK;
}