《电力通信网络管理信息系统的设计与实现》源代码


    头文件:
    ******************************************************************
    * All rights reserved
    *
    * 文件名称:baseruleh
    ******************************************************************
    #ifndef _BASERULE_H
    #define _BASERULE_H
    #if _MSC_VER>1000
    #pragma warning(disable 4786)
    #endif
    #include
    #include datadefh
    using namespace std
    class BaseRule
    {
    public
    BaseRule(BYTE no short rlen short slen)
    BaseRule(BaseRule& b) 拷贝构造函数
    virtual ~BaseRule()
    unsigned int m_nPortNo RTU逻辑端口号
    unsigned char *m_bSendBuf 发送缓区址
    unsigned char *m_bRevBuf 接收缓区址
    int m_wRevLen 接收数包长度
    int m_wSendLen 发送数包长度
    enum CMD_TYPE m_eCmdCode 前通讯命令码
    enum CMD_TYPE m_ePreCode 次通讯命令码
    TCPIPRS232LON通讯方式融合函数里外部规约
    模块调透明实现连接初次建立重新建立
    int BaseConnect(unsigned char Channel_Type)
    支持TCPIPRS232LON通讯方式发送数包
    int BaseSend(unsigned char Channel_Type)
    支持TCPIPRS232LON通讯方式接收数包
    中:t长延时时间(秒)ms字节间隔时间(毫秒)SOCK方式cdt规约RS232LON:ms0Channel_Type通道类型
    int BaseRead(int t int ms unsigned char Channel_Type)
    纯虚函数BaseRule类抽象类
    循环发送接收函数
    virtual void RuleLoop(void) 0
    数进行解包处理
    virtual void UnpackData(void) 0
    数进行包处理
    virtual void PackData(void) 0
    设置网络状态
    void SetNetState(enum GateDevStatus state)
    读取网络状态
    void GetNetAddr(GateIpPort &netaddr)
    读取站类型
    void GetGateStation(enum GateStation &eStation)
    private
    int m_nServer 服务器方式 SOCKET通讯连接句柄
    unsigned char m_bComIndex 串口序号
    HANDLE m_hCom RS232通讯连接柄
    COMINFO m_ComInfo[MAXCOMCOUNT] 串口信息
    BYTE m_no 构造函数参数值
    short m_rlen 构造函数参数值
    short m_slen 构造函数参数值
    TCPIP通讯方式接收数包等方式
    int SockRead(int fd int t int ms)
    TCPIP通讯方式:实现连接建立
    int SockConnect(void)
    TCPIP通讯方式发送数包
    int SockSend(void)
    释放套接字资源
    int FreeSocket(int &s)
    串口连接实现连接建立
    int CommConnect(void)
    监测串口否开
    int CommCheck(char *sysname)
    写232串口信息
    int RS232Send(void)
    读232串口信息
    int RS232Read(int nLength)
    读配置信息
    void ReadConfig(void)
    取文件数
    DWORD GetFileValue(FILE *fp)
    读字符数
    void GetFileChar(FILE *fp char pcRead[])

    protected继承
    int m_iAddress 节点址
    char m_szIPAddress[20] IP址
    int m_iPort IP端口号
    char m_szComm[20] 串口址
    DWORD m_dbBaudRate 波特率baud
    BYTE m_bByteSize 数位number of bitsbyte 48
    BYTE m_bParity 校验位04nooddevenmarkspace
    BYTE m_bStopBits 停止位012 1 15 2
    }
    #endif
    **********************************************************************
    ******************************************************************
    * All rights reserved
    *
    * 文件名称:cdth
    ******************************************************************
    #ifndef _CCDT_H
    #define _CCDT_H
    #include
    #include baseruleh
    using namespace std
    class CCDT public BaseRule
    {
    public
    CCDT(BYTE no short rlen short slen)
    virtual ~CCDT()
    private
    步字类型
    enum CdtType
    {
    FIND_HEAD 0x00
    SYN_HEAD
    PACK_DATA
    }

    unsigned char m_bHeadEB 字节eb数
    unsigned char m_bHead90 字节90数
    unsigned char m_bSerial 解包数序号
    enum CdtType m_bSyncFlag 步字类型
    unsigned char m_bInfoBuf[6] 解包数信息
    unsigned char m_bControl 控制字节
    unsigned char m_bFrameType 帧类
    unsigned char m_bInfoNumber 信息字数
    unsigned char m_bBchTable[256] 中间余式表
    enum FUNC_TYPE m_ePreFuncType 包功码类型
    unsigned char m_bSoe80 soe事件第功码
    unsigned char m_bSoeBuf[12] soe信息
    unsigned long m_lTimeBegin 开始时刻
    unsigned int m_nCtrlNumber 控制号
    unsigned char m_bCtrlType 控分控合
    测试
    unsigned long m_begin 装置遥信状态测试时钟开始

    vector bCommSendVec 发送缓
    vector bCommReceiveVec 接收缓
    private
    循环发送接收函数
    virtual void RuleLoop(void)
    处理收数防止接收数分两次传送情况
    void PreUnpackData(BYTE bRead)
    验证接收数校验码
    bool CheckRevCode(void)
    计算发送数校验码
    void CheckSendCode(int no)
    解包整理数
    void UnpackData(void)
    包函数
    void PackData(void)
    区分功码代号
    int GetFunType(enum FUNC_TYPE &eFunc)
    存储遥测数值60870系列格式
    void PutYC(void)
    存储遥信值
    void PutYX(void)
    存储事件进队列
    void PutSOE(void)
    存储电度值
    void PutDD(void)
    存储遥控返校信息
    void PutYK(enum INFO_TYPE eType bool bFailFlag false)
    存储频率值
    void PutHZ(void)
    16进制数转换成BCD码
    int HexToBCD(unsigned char bHex)
    超时检测
    int TimeCheck(void)
    测试模拟遥信信息
    void TestPutYX(void)
    测试模拟SOE
    void TestPutSOE(void)
    测试间隔段时间送遥信信息
    int TimeTest()

    }
    #endif
    ********************************************************
    ******************************************************************
    * All rights reserved
    *
    * 文件名称:coreargh
    ******************************************************************
    #ifndef _CORE_ARG_H
    #define _CORE_ARG_H
    #if _MSC_VER>1000
    #pragma warning(disable 4786)
    #endif
    #include
    #include
    #include numdefh
    #include ntdefh
    #include datadefh
    using namespace std
    网络存数
    class CGloalNet
    {
    public
    CGloalNet()
    ~CGloalNet()
    public
    enum GateDevStatus m_eState 装置状态(起初设置时候置ACIE_UNKNOW)
    GateNetAddr NetAddr 网络址
    sem_t sem_addr
    sem_t sem_msg

    int InsNetAddr(GateNetAddr addr)
    int GetNetAddr(GateNetAddr &addr)
    int InsDevStatus(enum GateDevStatus state)
    int GetDevStatus(enum GateDevStatus state)
    }
    事件存数包括层层传输数层层发送命令
    class CSoeData
    {
    public
    CSoeData()
    ~CSoeData()
    list m_ListSoe 层送遥信soe等信息
    list m_CtrlValue 103104CDT命令
    sem_t sem_soe
    public
    插入事件信息
    int InsSoeData(SOE_STATUS soe_status)
    读取弹出事件信息
    int GetSoeData(enum GateStation eStation SOE_STATUS &soe_status)
    插入命令信息
    int InsCtrlData(CTRL_VALUE ctrl_value)
    读取弹出命令信息
    int GetCtrlData(CTRL_VALUE &ctrl_value)
    protected
    private
    检测事件队列list值超2000弹出第值
    void CheckSoeData(void)
    检测命令队列list值超2000弹出第值
    void CheckCtrlData(void)
    }
    设备存数包括遥测量遥信量soe
    class CDevData
    {
    public
    CDevData()
    ~CDevData()
    键值数类型>
    map enum DATA_TYPE> DATAGROUP> m_MapDataYc m_MapSoe m_MapYx
    sem_t sem_dev
    public
    插入设备数信息
    int InsDevData(DATAGROUP *pData int count)
    删设备数信息
    int DelDevData(unsigned int nPortNo unsigned int *No enum DATA_TYPE eType int count)
    删全部设备数信息
    int DelAllDevData(unsigned int nPortNo)
    返回指定装置数分组信息记录
    int CountDevData(unsigned int nPortNo enum DATA_TYPE eType)
    返回指定装置序号指定数信息记录(根设备编号序号找实际值)
    int GetFixDevData(unsigned int nPortNo unsigned int no enum DATA_TYPE eType DATAGROUP &pData)
    }
    #endif
    ****************************************
    ******************************************************************
    * All rights reserved
    *
    * 文件名称:datadefh
    ******************************************************************
    #ifndef _DATADEF_H
    #define _DATADEF_H
    #if _MSC_VER>1000
    #pragma warning(disable 4786)
    #endif
    #include
    #include numdefh
    using namespace std
    const unsigned char MAXCOMCOUNT 24 串口数
    串口信息
    typedef struct COMINFO
    {
    char name[20] 串口名称
    HANDLE hcom 句柄
    sem_t semcom 串口锁
    BYTE flag 效标志
    }COMINFO
    SOE_STATUS队列结构体存储状态变化信息SOE事件
    typedef struct SOE_STATUS
    {
    unsigned char bAddress 装置址
    enum GateStation eStation 通道类型
    int nPot 信息点号
    unsigned char bStatus 状态
    unsigned char bDay 日
    unsigned char bHour 时
    unsigned char bMinute 分
    unsigned short wMilliseconds 毫秒
    enum INFO_TYPE eType 送类型
    unsigned short wSerial soe象号
    }SOE_STATUS
    链路层前六字节
    struct APDUHEAD
    {
    unsigned char bStartCode 启动字符
    unsigned char bApduLength 长度
    unsigned char bControlCode1 控制域1
    unsigned char bControlCode2 控制域2
    unsigned char bControlCode3 控制域3
    unsigned char bControlCode4 控制域4
    }
    应层前六字节
    struct ASDUHEAD
    {
    unsigned char bAsduType 类型标示
    unsigned char bAsduVsq 变结构限定词
    unsigned short nAsduCot 传送原
    unsigned short nAsduComAddr 应服务数单元公址
    unsigned char bAsduFun 功类型104没位
    unsigned char bAsduInf 信息序号
    }
    送报文结构
    typedef struct _tagDATASTR
    {
    struct APDUHEAD ApduHead 链路层
    struct ASDUHEAD AsduHead 应层前六字节
    vector bDataVec 数
    }DATA_STR
    命令结构体
    typedef struct _tagCtrlValue
    {
    unsigned int nPortno 装置序号
    unsigned int nPortno103 台序号
    unsigned char bAddress 装置址
    unsigned char bSwitch 定值区号
    unsigned int iValue 值
    unsigned short nPotValue 信息址
    unsigned char bCpu cpu号
    enum CMD_TYPE eCmdType 命令类型
    }CTRL_VALUE
    存中存储装置信息包括遥测遥信事件定值区定值
    typedef struct _tagDataGroup
    {
    unsigned int nPortNo 装置序号
    unsigned int nSerial 序号
    unsigned int nAddress 装置址
    unsigned char bLocal 远方0远方1
    unsigned int nSize 长度
    enum DATA_TYPE eType 遥测遥信SOE电度
    unsigned short nValue 存储装置信息
    }DATAGROUP
    #endif
    ***************************************************
    程序:
    ********************************************************************
    ******************************************************************
    * All rights reserved
    *
    * 文件名称:baserulecpp
    ******************************************************************
    #include baseruleh
    #include exth
    BaseRuleBaseRule(BYTE no short rlen short slen)
    {
    m_nPortNo no
    m_nServer INVALID_SOCKET
    m_wRevLen 0
    m_wSendLen 0
    m_eCmdCode COMMAND_NONE 前通讯命令码
    m_ePreCode m_eCmdCode 次通讯命令码
    m_bSendBuf new BYTE [slen]
    m_bRevBuf new BYTE [rlen]
    memset(m_bSendBuf 0 slen)
    memset(m_bRevBuf 0 rlen)
    m_bComIndex 0
    m_hCom NULL
    memset(&m_ComInfo 0 sizeof(COMINFO)*MAXCOMCOUNT)
    for(int i0 i {
    sprintf(m_ComInfo[i]nameCOMdi)
    }
    网络状态断开
    SetNetState(GATE_UNCLOSE)
    ReadConfig()
    }
    拷贝构造函数
    BaseRuleBaseRule(BaseRule& b)
    {
    m_nPortNo bm_nPortNo
    m_nServer bm_nServer
    m_wRevLen bm_wRevLen
    m_wSendLen bm_wSendLen
    m_eCmdCode bm_eCmdCode 前通讯命令码
    m_ePreCode bm_ePreCode 次通讯命令码
    m_bSendBuf new BYTE [m_slenbm_slen]
    memcpy((void*)m_bSendBuf (void*)bm_bSendBuf m_slen*sizeof(BYTE))
    m_bRevBuf new BYTE [m_rlenbm_rlen]
    memcpy((void*)m_bRevBuf (void*)bm_bRevBuf m_rlen*sizeof(BYTE))
    memset(m_bSendBuf 0 bm_slen)
    memset(m_bRevBuf 0 bm_rlen)
    m_bComIndex bm_bComIndex
    m_hCom bm_hCom
    memset(&bm_ComInfo 0 sizeof(COMINFO)*MAXCOMCOUNT)

    for(int i0 i {
    sprintf(bm_ComInfo[i]nameCOMdi)
    }
    网络状态断开
    bSetNetState(GATE_UNCLOSE)
    bReadConfig()
    }
    BaseRule~BaseRule()
    {
    if(m_bSendBuf)
    {
    delete []m_bSendBuf
    m_bSendBuf NULL
    }
    if(m_bRevBuf)
    {
    delete []m_bRevBuf
    m_bRevBuf NULL
    }
    if ( m_nServer 0 )
    {
    FreeSocket(m_nServer)
    }
    if (m_hCom)
    {
    CloseHandle(m_hCom)
    }
    }
    *
    int BaseRuleBaseConnect(BYTE Channel_Type)
    {
    int ret 0
    if (g_bSysStop)
    {
    switch(Channel_Type)
    {
    case CHANNEL_SOCK
    ret SockConnect()
    break
    case CHANNEL_RS232
    ret CommConnect()
    break
    case CHANNEL_LON
    ret TRUE
    break
    }
    }
    return ret
    }
    int BaseRuleBaseRead(int t int ms BYTE Channel_Type)
    {
    int ret 0
    switch(Channel_Type)
    {
    case CHANNEL_SOCK 1fail
    ret SockRead(m_nServer t ms)
    break
    case CHANNEL_RS232 1fail
    Sleep(t*1000)
    ret RS232Read(300)
    break
    case CHANNEL_RS485
    break
    case CHANNEL_LON
    ret LonRead( t )
    break
    default
    break
    }
    return ret
    }
    int BaseRuleBaseSend(BYTE Channel_Type)
    {
    int ret 0
    switch(Channel_Type)
    {
    case CHANNEL_SOCK 1fail
    ret SockSend()
    break
    case CHANNEL_RS232 1fail
    ret RS232Send()
    break
    case CHANNEL_LON
    ret m_pLon>LonWriteLpdu(m_nPortNo&m_bSendVec) RETOKRETFAIL
    break
    default
    break
    }
    return ret
    }
    int BaseRuleSockConnect(void)
    {
    unsigned long larg1
    int iret
    int ipport
    char szIP[20]
    int asock
    struct sockaddr_in ServerAddr TCPIP SOCKET址数结构
    memset(&ServerAddr0x00sizeof(sockaddr_in))
    if (m_nServer INVALID_SOCKET)
    {
    FreeSocket(m_nServer)
    }
    m_nServer socket(AF_INET SOCK_STREAM 0)
    if (m_nServerINVALID_SOCKET)
    {
    return FALSE
    }
    ServerAddrsin_family AF_INET
    ipport m_iPort24035000NetAddrport界面
    ServerAddrsin_port htons(ipport)
    strcpy(szIP 1010010034)
    strcpy(szIP m_szIPAddress)NetAddrNetIp)界面
    字符串形式IP址转换成unsigned long型整数值
    ServerAddrsin_addrs_addr inet_addr(szIP)
    if (bind(m_nServer(struct sockaddr *)&ServerAddrsizeof(ServerAddr))SOCKET_ERROR)
    {
    FreeSocket(m_nServer)
    return FALSE
    }
    if (listen(m_nServer8) SOCKET_ERROR)
    {
    FreeSocket(m_nServer)
    return FALSE
    }
    int sin_sizesizeof(struct sockaddr_in)
    服务器阻塞直客户程序建立连接
    asockaccept(m_nServer(struct sockaddr *)(&ServerAddr)&sin_size)
    if (asock INVALID_SOCKET)
    {
    FreeSocket(m_nServer)
    return FALSE
    }
    else
    {
    FreeSocket(m_nServer)
    m_nServerasock
    }

    iret ioctlsocket(m_nServerFIONBIO(u_long *)&larg)
    if (iret 0)
    {
    FreeSocket(m_nServer)
    return FALSE
    }
    return TRUE
    }
    int BaseRuleSockRead(int fd int t int ms)
    {
    fd_set readbits
    struct timeval timer
    unsigned long lBegin 0
    unsigned long lEnd 0
    int ret 0
    int i 0
    int rlenisecims
    int n 256
    int fd m_nServer
    m_wRevLen 0
    timertv_sec t
    timertv_usec 0
    FD_ZERO(&readbits)
    FD_SET(m_nServer &readbits)
    lBegin GetTickCount()
    ret select(fd+1 &readbits NULL NULL &timer)
    if (FD_ISSET(m_nServer &readbits)) 报文
    {
    do
    {
    Sleep(1)
    rlen 0
    for (im_wRevLen i {
    m_bRevVecpush_back(0)
    ret recv(m_nServer (char *)&m_bRevBuf[i] 1 0)
    if (ret 1)
    {
    rlen ++
    m_wRevLen++
    }
    else
    {
    break
    }
    }
    时间退出
    lEnd GetTickCount()
    unsigned long lTime lEnd lBegin
    if (((t*1000 + ms) lTime) <0)
    {
    break
    }
    } while(rlen>0) 收报文退出
    }
    return m_wRevLen
    }
    int BaseRuleSockSend()
    {
    int ret 0
    if( m_wSendLen > 0 )
    {
    ret send(m_nServer(char *)m_bSendBuf m_wSendLen MSG_DONTROUTE)
    }
    return ret
    }
    *
    int BaseRuleFreeSocket(int &s)
    {
    int ret
    ret closesocket(s)
    s 0
    return ret
    }
    int BaseRuleCommConnect()
    {
    DCB dcb
    BYTE b8p0s0 number of bitsbyte 48
    char portname[20]
    char cportname[20]
    DWORD dwerrderr
    int comlen0
    int ret 0
    DWORD C_Rtimeout 3000
    DWORD C_RtimeMilti 20
    memcpy(&portname m_szComm 0) m_szCommconfigtxt中配置
    ret CommCheck(portname)
    if (ret0)
    {
    return true
    }
    sprintf(cportname\\\\\\sportname)
    if ((m_ComInfo[m_bComIndex]hcom
    CreateFile(cportname
    GENERIC_READ | GENERIC_WRITE 0 NULL
    OPEN_EXISTING
    FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED
    NULL))
    INVALID_HANDLE_VALUE)
    {
    derr GetLastError()
    return false
    }
    ClearCommError(m_ComInfo[m_bComIndex]hcom&dwerrNULL)
    derrGetLastError()
    if(derr0)
    {
    return false
    }
    SetCommMask(m_ComInfo[m_bComIndex]hcom EV_RXCHAR)
    SetupComm(m_ComInfo[m_bComIndex]hcom 1024 1024)
    derrGetLastError()
    if(derr0)
    {
    CloseHandle( m_ComInfo[m_bComIndex]hcom )
    return false
    }

    {
    m_hCom m_ComInfo[m_bComIndex]hcom
    m_ComInfo[m_bComIndex]flag 1
    }

    GetCommState(m_ComInfo[m_bComIndex]hcom&dcb)
    dcbBaudRate m_dbBaudRate 波特率baud
    dcbByteSize m_bByteSize 数位number of bitsbyte 48
    dcbParity m_bParity 校验位04nooddevenmarkspace
    dcbStopBits m_bStopBits 停止位012 1 15 2
    SetCommState(m_ComInfo[m_bComIndex]hcom &dcb)
    derrGetLastError()
    COMMTIMEOUTS CommTimeOuts
    CommTimeOutsReadIntervalTimeout 0x100
    CommTimeOutsReadTotalTimeoutMultiplier C_RtimeMilti
    CommTimeOutsReadTotalTimeoutConstant C_Rtimeout
    CommTimeOutsWriteTotalTimeoutMultiplier 10
    CommTimeOutsWriteTotalTimeoutConstant 3000
    SetCommTimeouts(m_ComInfo[m_bComIndex]hcom &CommTimeOuts)
    derrGetLastError()
    PurgeComm(m_ComInfo[m_bComIndex]hcomPURGE_TXCLEAR|PURGE_RXCLEAR)
    return true
    }
    int BaseRuleCommCheck(char *sysname)
    {
    int i 0
    int ret false
    if (m_bComIndex > 0)
    {更换
    m_ComInfo[m_bComIndex]flag
    if (m_ComInfo[m_bComIndex]flag < 0)
    {
    CloseHandle(m_ComInfo[m_bComIndex]hcom)
    m_ComInfo[m_bComIndex]hcom NULL
    }
    m_bComIndex 0
    }
    if (m_bComIndex < 0)
    {
    for (i0 i {
    if (strcmp(m_ComInfo[i]name sysname))
    {
    m_bComIndex i
    if (m_ComInfo[i]flag > 0)break
    }
    }
    if (i < MAXCOMCOUNT)
    {
    m_hCom m_ComInfo[i]hcom
    m_ComInfo[i]flag ++
    ret true
    }
    }
    return ret
    }
    int BaseRuleRS232Send()
    {
    OVERLAPPED OlWRtu
    DWORD byte1byte20
    BOOL waitflag
    memset(&OlWRtu0sizeof(OlWRtu))
    OlWRtuhEventNULL
    if (m_ComInfo[m_bComIndex]hcom NULL)
    {
    WriteFile(m_ComInfo[m_bComIndex]hcom m_bSendBuf m_wSendLen &byte1 &OlWRtu)
    waitflag GetOverlappedResult(m_ComInfo[m_bComIndex]hcom &OlWRtu &byte2 TRUE)
    }
    if( (int) byte2m_wSendLen)
    {
    byte2 1
    }
    return byte2
    }
    int BaseRuleRS232Read(int n)
    {
    OVERLAPPED OlWRtu
    DWORD byte1byte20
    BOOL waitflagFALSE
    memset(&OlWRtu0sizeof(OlWRtu))
    OlWRtuhEventNULL
    if(m_ComInfo[m_bComIndex]hcom NULL)
    {
    ReadFile(m_ComInfo[m_bComIndex]hcom m_bRevBuf n &byte1 &OlWRtu)
    waitflag GetOverlappedResult(m_ComInfo[m_bComIndex]hcom &OlWRtu &byte2 TRUE)
    }
    if(waitflag && byte2>0 )
    {
    m_wSendLen (short)byte2
    byte2 1
    }
    return byte2
    }
    void BaseRuleSetNetState(enum GateDevStatus state)
    {
    GateNetAddr n_addr
    g_glonetGetNetAddr(n_addr)
    switch(m_nPortNo)
    {
    case RULE_CDT CDT规约
    {
    break
    }
    case RULE_ENGINEER 103规约工程师站
    {
    n_addrENGINEERNeteNetState state
    break
    }
    case RULE_REMOTE 104规约远动站
    {
    n_addrREMOTENeteNetState state
    break
    }
    case RULE_OPERATER 104规约操作员站
    {
    n_addrOPERATERNeteNetState state
    break
    }
    default
    break
    }
    g_glonetInsNetAddr(n_addr)
    }
    void BaseRuleGetNetAddr(GateIpPort &netaddr)
    {
    GateNetAddr n_addr
    g_glonetGetNetAddr(n_addr)
    switch(m_nPortNo)
    {
    case RULE_CDT CDT规约
    {
    break
    }
    case RULE_ENGINEER 103规约工程师站
    {
    memcpy(&netaddr &n_addrENGINEERNet sizeof(GateIpPort))确认OPERATENet
    break
    }
    case RULE_REMOTE 104规约远动站
    {
    memcpy(&netaddr &n_addrREMOTENet sizeof(GateIpPort))确认OPERATENet
    break
    }
    case RULE_OPERATER 104规约操作员站
    {
    memcpy(&netaddr &n_addrOPERATERNet sizeof(GateIpPort))确认OPERATENet
    break
    }
    default
    break
    }
    return
    }
    void BaseRuleGetGateStation(enum GateStation &eStation)
    {
    switch(m_nPortNo)
    {
    case RULE_CDT CDT规约
    {
    break
    }
    case RULE_ENGINEER 103规约工程师站
    {
    eStation GATE_ENGINEERSTATION
    break
    }
    case RULE_REMOTE 104规约远动站
    {
    eStation GATE_REMOTESTATION
    break
    }
    case RULE_OPERATER 104规约操作员站
    {
    eStation GATE_OPERATERSTATION
    break
    }
    default
    break
    }
    }
    void BaseRuleReadConfig()
    {
    FILE* fp NULL
    m_iAddress 0
    m_iPort 0
    memset(m_szIPAddress 0 sizeof(char)*20)
    memset(m_szComm 0 sizeof(char)*20)
    m_dbBaudRate 9600 波特率baud
    m_bByteSize 8 数位number of bitsbyte 48
    m_bParity 0 校验位04nooddevenmarkspace
    m_bStopBits 0 停止位012 1 15 2
    fp fopen(configtxt r)
    if (fp NULL)
    {
    strcpy(m_szIPAddress 101001007)
    m_iAddress 1
    m_iPort 2403
    }
    else
    {

    m_iAddress GetFileValue(fp)
    IP址
    GetFileChar(fp m_szIPAddress)
    IP端口号
    m_iPort GetFileValue(fp)
    串口址
    GetFileChar(fp &m_szComm[0])
    波特率baud
    m_dbBaudRate GetFileValue(fp)
    数位number of bitsbyte 48
    m_bByteSize GetFileValue(fp)
    校验位04nooddevenmarkspace
    m_bParity GetFileValue(fp)
    停止位012 1 15 2
    m_bStopBits GetFileValue(fp)
    if (fp NULL)
    {
    fclose(fp)
    }
    }
    }
    DWORD BaseRuleGetFileValue(FILE *fp)
    {
    int validx
    char szStr[80]
    char szNum[20]
    string s
    fscanf(fp s\n szStr) position year
    s szStr
    idx sfind('')
    memcpy(szNum &szStr[idx+1] 20)
    val atoi(szNum)
    return val
    }
    void BaseRuleGetFileChar(FILE *fp char pcRead[])
    {
    int idx
    char szStr[80]
    string s
    fscanf(fp s\n szStr)
    s szStr
    idx sfind('')
    memcpy(pcRead &szStr[idx+1] 20)
    }
    *************************************************************
    #include
    #include stdioh
    #include exth
    #include cdth
    #include ntdefh
    #include gatetimeh
    CCDTCCDT(BYTE no short rlen short slen) BaseRule(norlenslen)
    {
    memcpy(m_bBchTable G_bBchTable 256)
    m_bHeadEB 0
    m_bHead90 0
    m_bSerial 0 解包数序号
    m_bSyncFlag FIND_HEAD 步字类型
    m_nCtrlNumber 0 遥控号初始成0问题
    m_bCtrlType 0 控分控合
    m_bControl 0 控制字节
    m_bFrameType 0 帧类
    m_bInfoNumber 0 信息字数
    memset(&m_bInfoBuf 0 sizeof(m_bInfoBuf)) 解包数信息
    for (int i0 i<6 i+2)
    {
    m_bSendBuf[i] 0xeb
    m_bSendBuf[i+1] 0x90
    }
    }
    CCDT~CCDT()
    {
    }
    void CCDTRuleLoop(void)
    {
    int nResult 0 返回值变量
    int i 0 般变量]
    unsigned long i_start 收报文判断开始
    unsigned long i_end 结束时间
    int tstop 30
    i_start GetTickCount() 初始化
    i_end GetTickCount() 初始化
    g_glonetInsDevStatus(GATE_UNCLOSE)
    测试
    m_begin GetTickCount()
    while (1)
    {
    if (g_bSysStop)
    {
    break
    }
    测试
    TimeTest()
    if (BaseConnect(CHANNEL_RS232) 0)
    {
    Sleep(10)函数分辨率10
    continue
    }
    while (1)
    {
    Sleep(10)
    PackData()
    BaseSend()
    nResult BaseRead(1 0 CHANNEL_SOCK) RS232Read(300)
    if (nResult>0)
    {
    i_start GetTickCount()
    g_glonetInsDevStatus(GATE_CLOSE)
    for (i0 i {
    PreUnpackData(m_bRevBuf[i])
    }
    }
    else
    {
    i_end GetTickCount()
    if ((i_endi_start)1000>tstop)
    {
    g_glonetInsDevStatus(GATE_UNCLOSE)
    break
    }
    }
    }
    }
    return
    }
    *
    void CCDTPreUnpackData(BYTE bRead)
    {
    if (bRead m_bHeadEB)
    {
    m_bHeadEB++
    }
    else if ((bRead 0x90) && (m_bHeadEB > 0) )
    {
    m_bHead90++
    }
    else
    {
    m_bHeadEB 0
    m_bHead90 0
    }
    if ( (m_bHeadEB 3) && (m_bHead90 3) )
    {
    m_bHeadEB 0
    m_bHead90 0
    m_bSerial 0
    m_bSyncFlag SYN_HEAD
    return
    }
    if (m_bSyncFlag SYN_HEAD)
    {
    m_bInfoBuf[m_bSerial] bRead
    m_bSerial ++
    if (m_bSerial > 6)
    {
    m_bSerial 0
    if ( CheckRevCode() )
    {
    m_bInfoNumber m_bInfoBuf[2]
    m_bControl ((m_bInfoBuf[0]&0x80) 0) 10
    m_bFrameType m_bInfoBuf[1]
    if ((m_bInfoNumber > 0) && (m_bInfoBuf[1] 0xf9) )
    {
    m_bSyncFlag PACK_DATA
    }
    else
    {
    m_bSyncFlag FIND_HEAD
    }
    }
    else
    {
    m_bSyncFlag FIND_HEAD
    }
    return
    }
    }
    if (m_bSyncFlag PACK_DATA)
    {
    m_bInfoBuf[m_bSerial] bRead
    m_bSerial++
    if (m_bSerial > 6)
    {
    m_bSerial 0
    if (CheckRevCode())
    {
    UnpackData()
    }
    else
    { error rate
    m_bSyncFlag FIND_HEAD
    }
    if( m_bInfoNumber > 0)
    {
    m_bInfoNumber
    }
    if( m_bInfoNumber 0 )
    {
    m_bSyncFlag FIND_HEAD
    }
    }
    }
    }
    *
    bool CCDTCheckRevCode()
    {
    bool bResult false 返回值
    unsigned char temp 0x00 时变量
    for (int i0 i<5 i++)
    {
    temp temp ^ m_bInfoBuf[i]
    temp m_bBchTable[temp]
    }
    temp temp ^ 0xff
    if (temp m_bInfoBuf[5])
    {
    bResult true
    }
    return bResult
    }
    void CCDTCheckSendCode(int no)
    {
    unsigned char temp 0x00 时变量
    for (int i0 i<5 i++)
    {
    temp temp ^ m_bSendBuf[no+i]
    temp m_bBchTable[temp]
    }
    temp temp ^ 0xff
    m_bSendBuf[no+5] temp
    }
    {
    int nOrder 0 序号
    short nValue 0 数值
    BYTE cstatus
    short pyx
    char szStr[20]
    enum FUNC_TYPE eFuncType FUNC_NONE 功码类型
    GetFunType(eFuncType)
    if( eFuncType m_ePreFuncType && m_ePreFuncType BAOHU_KIND )
    {notify
    Fill_BaoHuNotify()
    m_ePreFuncType eFuncType
    }
    if( eFuncType m_ePreFuncType && m_ePreFuncType FUNC_YK_UP )
    {
    CTRL_Proc(VARTYPE_YX001)
    }
    if( eFuncType m_ePreFuncType && m_ePreFuncType FUNC_YT_UP )
    {
    CTRL_Proc(VARTYPE_YT001)
    }
    m_ePreFuncType eFuncType
    switch(eFuncType)
    {
    case FUNC_YC 遥测
    PutYC()
    break
    case FUNC_YX 遥信
    PutYX()
    break
    case FUNC_DD电脉计数值
    PutDD()
    break
    case FUNC_SOE事件序纪录
    PutSOE()
    break
    case FUNC_YK_UP遥控返校
    PutYK(INFDATA_YK_SEL)
    break
    case FUNC_YT_UP升降返校
    if( m_bInfoBuf[1] 0x33) CTRL_Proc(VARTYPE_YT0m_bInfoBuf[2]0)
    else CTRL_Proc(VARTYPE_YT1m_bInfoBuf[2]0)
    break
    case FUNC_HZ频率
    PutHZ()
    break
    case FUNC_YC_ADD总加遥测
    break
    case FUNC_WHITE水位
    lValue HexToBCD(m_bInfoBuf[1]) + HexToBCD(m_bInfoBuf[2])*100+HexToBCD(m_bInfoBuf[3])*10000
    break
    case BAOHU_KIND
    lValue ((m_bInfoBuf[4]*256+m_bInfoBuf[3])*256+m_bInfoBuf[2])*256+m_bInfoBuf[1]
    PutBHDZValue(m_bInfoBuf[0]lValue)
    break
    default
    break
    }
    return
    }
    int CCDTGetFunType(enum FUNC_TYPE &eFunc)
    {
    unsigned char bFunc 功码
    bool bResult 1 返回值
    bFunc m_bInfoBuf[0]
    if (m_bControl0)
    {
    if (bFunc > 0x00 && bFunc < 0x80 )
    {
    eFunc FUNC_YC 遥测
    }
    else if (bFunc 0x8a)
    {
    eFunc FUNC_HZ 频率
    }
    else if ((bFunc >0x8d) && (bFunc<0x93))
    {
    eFunc FUNC_WHITE 水位
    }
    else if ((bFunc > 0x86) && (bFunc < 0x89))
    {
    eFunc FUNC_YC_ADD 总加遥测
    }
    else if ((bFunc > 0xf0) && (bFunc < 0xff))
    {
    eFunc FUNC_YX 遥信
    }
    else if (bFunc 0xe1)
    {
    eFunc FUNC_YK_UP 遥控返校
    }
    else if (bFunc 0xe5)
    {
    eFunc FUNC_YT_UP 升降返校
    }
    else if ((bFunc > 0xa0) && (bFunc < 0xe0))
    {
    eFunc FUNC_DD 电脉D2帧
    }
    else if ((bFunc 0x80) || (bFunc0x81))
    {
    eFunc FUNC_SOE 事件序纪录
    }
    else
    {
    bResult 0
    }
    }
    else
    {
    if ((m_bFrameType 0x3d) && ((eFunc>0x00) && (eFunc< 0x40)))
    {
    eFunc BAOHU_KIND
    }
    else if ((m_bFrameType 0x3d) && (eFunc 0x96))
    {notify
    if(m_bInfoBuf[1] 0xa5) Fill_BaohuValueEvt(00PortNo) ok
    else Fill_BaohuValueEvt(01PortNo) fail
    return
    }
    else return
    bResult 0
    }
    return bResult
    }
    void CCDTPutYC(void)
    {
    unsigned short nOrder 0 序号
    unsigned short nValue 0 数值
    unsigned short nData 0 送数
    DATAGROUP DataGroup 存储数结构体
    memset(&DataGroup 0x00 sizeof(DATAGROUP))
    nOrder m_bInfoBuf[0] * 2
    for (int i0 i<2 i++)
    {
    nValue m_bInfoBuf[i*2+1] + (m_bInfoBuf[i*2+2] & 0x07) * 0x100
    DataGroupbLocal 0
    DataGroupeType DATA_YC
    DataGroupnAddress m_nAddr
    DataGroupnPortNo m_nPortNo
    DataGroupnSerial nOrder +i
    nData (nValue & 0x07ff) >> 3
    负数
    if (m_bInfoBuf[i*2+2] & 0x08)
    {
    nData nData | 0x80
    }
    if (m_bInfoBuf[i*2+2] & 0x80)
    {
    nData nData | 0x02 效
    }
    else if (m_bInfoBuf[i*2+2] & 0x40)
    {
    nData nData | 0x01 溢出
    }
    DataGroupnValue nData
    g_devdataInsDevData(&DataGroup 1)
    }
    return
    }
    *
    void CCDTPutYX(void)
    {
    int nOrder 0 序号
    unsigned short nValue 0 数值
    int nNumber 0 存储序号
    int i 0 般变量
    int j 0 般变量
    SYSTEMTIME systime 时间结构体
    DATAGROUP DataGroup 存储数结构体
    SOE_STATUS SoeStatus 事件结构体
    memset(&SoeStatus 0 sizeof(SOE_STATUS))
    memset(&DataGroup 0x00 sizeof(DATAGROUP))
    GetLocalTime(&systime)
    nOrder (m_bInfoBuf[0] 0xf0) * 32
    for (i0 i<4 i++)
    {
    unsigned char m 0
    for (j0 j<8 j++)
    {
    nNumber nOrder + i*8 + j
    m 1 << j
    if ((m_bInfoBuf[i+1] & m) 0x00 )
    {
    nValue 1换算成双点
    }
    else
    {
    nValue 2
    }
    g_devdataGetFixDevData(m_nPortNo nNumber DATA_YX DataGroup)
    if (DataGroupnValue nValue)
    {
    if (m_nCtrlNumber nNumber)
    {
    PutYK(INFDATA_YK_EXE false) 遥控执行成功
    }
    SoeStatusbAddress 0x01 固定值
    SoeStatusnPot nNumber
    SoeStatusbStatus nValue
    SoeStatuswMilliseconds systimewMilliseconds + (systimewSecond & 0xff) * 1000
    SoeStatusbSecond systimewMilliseconds 1000
    SoeStatusbMinute systimewMinute & 0x3f
    SoeStatusbHour systimewHour & 0x1f
    SoeStatusbDay systimewDay & 0x3f
    SoeStatuseType INFDATA_YX
    SoeStatuseStation GATE_REMOTESTATION 远动站
    g_soedataInsSoeData(SoeStatus)
    SoeStatuseStation GATE_OPERATERSTATION 操作员站
    g_soedataInsSoeData(SoeStatus)
    SoeStatuseStation GATE_ENGINEERSTATION 工程师站
    g_soedataInsSoeData(SoeStatus)
    g_devdataInsDevData(&DataGroup 1)
    }
    }
    }
    return
    }
    void CCDTPutSOE(void)
    {
    SOE_STATUS SoeStatus 事件结构体
    memset(&SoeStatus 0 sizeof(SOE_STATUS))
    if(m_bInfoBuf[0]0x80)
    {
    m_bSoe80 0x80
    memcpy(&m_bSoeBuf[0]&m_bInfoBuf[0]6)
    }
    if(m_bInfoBuf[0]0x81 && m_bSoe80 0x80)
    {
    m_bSoe80 0x00
    memcpy(&m_bSoeBuf[6]&m_bInfoBuf[0]6)
    SoeStatusbAddress 0x01 固定值
    SoeStatusnPot m_bSoeBuf[9] + (m_bSoeBuf[10] & 0x0f) * 256
    SoeStatusbStatus m_bSoeBuf[10] & 0x80
    SoeStatuswMilliseconds (m_bSoeBuf[2] & 0x03 ) * 256 + m_bSoeBuf[1]
    + (m_bSoeBuf[3] & 0x3f) * 1000
    SoeStatusbSecond m_bSoeBuf[3]
    SoeStatusbMinute m_bSoeBuf[4]
    SoeStatusbHour m_bSoeBuf[7]
    SoeStatusbDay m_bSoeBuf[8]
    SoeStatuseType INFDATA_SOE
    SoeStatuswSerial m_bSoeBuf[9] + (m_bSoeBuf[10] & 0x0f) * 0x100
    SoeStatuseStation GATE_REMOTESTATION 远动站
    g_soedataInsSoeData(SoeStatus)
    SoeStatuseStation GATE_OPERATERSTATION 操作员站
    g_soedataInsSoeData(SoeStatus)
    SoeStatuseStation GATE_ENGINEERSTATION 工程师站
    g_soedataInsSoeData(SoeStatus)
    }
    return
    }
    void CCDTPutDD(void)
    {
    unsigned short nOrder 0 序号
    DATAGROUP DataGroup 存储数结构体
    memset(&DataGroup 0x00 sizeof(DATAGROUP))
    nOrder m_bInfoBuf[0] 0xa0
    DataGroupbLocal 0
    DataGroupeType DATA_DD
    DataGroupnAddress m_nAddr
    DataGroupnPortNo m_nPortNo
    DataGroupnSerial nOrder
    DataGroupnValue (((m_bInfoBuf[4]&0x0f) * 256 + m_bInfoBuf[3]) * 256
    + m_bInfoBuf[2]) * 256 + m_bInfoBuf[1]
    g_devdataInsDevData(&DataGroup 1)
    return
    }
    void CCDTPutYK(enum INFO_TYPE eType bool bFailFlag)
    {
    SYSTEMTIME systime 时间结构体
    SOE_STATUS SoeStatus 事件结构体
    memset(&SoeStatus 0 sizeof(SOE_STATUS))
    GetLocalTime(&systime)
    SoeStatusbAddress 0x01 固定值
    SoeStatusnPot m_bInfoBuf[2]
    if (eType INFDATA_YK_EXE)
    {
    SoeStatusnPot m_nCtrlNumber
    if (bFailFlag)
    {
    SoeStatusbStatus 0
    }
    else
    {
    SoeStatusbStatus m_bCtrlType
    }
    }
    else if (eType INFDATA_YK_SEL)
    {
    if (bFailFlag) 遥控失败
    {
    SoeStatusnPot m_nCtrlNumber
    SoeStatusbStatus 0x00
    }
    else
    {
    SoeStatusnPot m_bInfoBuf[2]
    if (m_bInfoBuf[1] 0x33)
    {
    SoeStatusbStatus 1
    }
    else if (m_bInfoBuf[1] 0xcc)
    {
    SoeStatusbStatus 2
    }
    else
    {
    SoeStatusbStatus 0
    }
    }
    }
    SoeStatuswMilliseconds systimewMilliseconds + (systimewSecond & 0xff) * 1000
    SoeStatusbMinute systimewMinute & 0x3f
    SoeStatusbHour systimewHour & 0x1f
    SoeStatusbDay systimewDay & 0x3f
    SoeStatuseType eType
    SoeStatuseStation GATE_REMOTESTATION 远动站
    g_soedataInsSoeData(SoeStatus)
    SoeStatuseStation GATE_OPERATERSTATION 操作员站
    g_soedataInsSoeData(SoeStatus)
    SoeStatuseStation GATE_ENGINEERSTATION 工程师站
    g_soedataInsSoeData(SoeStatus)
    m_nCtrlNumber 0
    m_bCtrlType 0
    return
    }
    void CCDTPutHZ(void)
    {
    unsigned short nOrder 0 序号
    int val1 0 数值1
    int val2 0 数值2
    DATAGROUP DataGroup 存储数结构体
    memset(&DataGroup 0x00 sizeof(DATAGROUP))
    nOrder m_bInfoBuf[0] 0x8a
    DataGroupbLocal 0
    DataGroupeType DATA_HZ
    DataGroupnAddress m_nAddr
    DataGroupnPortNo m_nPortNo
    DataGroupnSerial nOrder
    val1 HexToBCD(m_bInfoBuf[1])
    val2 HexToBCD(m_bInfoBuf[2])
    if ((val1>0) && (val2>0))
    {
    DataGroupnValue val1 + val2 * 100
    g_devdataInsDevData(&DataGroup 1)
    }
    return
    }
    void CCDTPackData(void)
    {
    int nResult 0 常变量返回值
    unsigned short nTime 0 时间变量
    int nOffset 0 延时时间
    SYSTEMTIME newtime 时间结构
    CTRL_VALUE CtrlValue 发命令结构体
    PansTime pt 时间类
    memset(&CtrlValue 0x00 sizeof(CTRL_VALUE))
    nResult TimeCheck()
    if (nResult 0)
    {
    return
    }
    nResult g_soedataGetCtrlData(CtrlValue)
    if (nResult 0)
    {
    m_eCmdCode COMMAND_NONE
    }
    else
    {
    m_eCmdCode CtrlValueeCmdType
    }
    switch (m_eCmdCode)
    {
    case COMMAND_SEL_CTRL 控制选择
    m_bSendBuf[6] 0x71
    m_bSendBuf[7] 0x61
    m_bSendBuf[8] 0x03
    m_bSendBuf[9] CtrlValuebAddressRtuID配置
    m_bSendBuf[10] 0x01配置
    CheckSendCode(6)
    m_bSendBuf[12] 0xe0
    if (CtrlValueiValue 1)
    {
    m_bSendBuf[13] 0x33
    }
    else if (CtrlValueiValue 2)
    {
    m_bSendBuf[13] 0xcc
    }
    m_bSendBuf[14] CtrlValuenPotValue
    m_bSendBuf[15] m_bSendBuf[13]
    m_bSendBuf[16] m_bSendBuf[14]
    CheckSendCode(12)
    memcpy(&m_bSendBuf[18] &m_bSendBuf[12] 6) 连送三相信息字
    memcpy(&m_bSendBuf[24] &m_bSendBuf[12] 6)
    m_wSendLen 30
    m_nCtrlNumber CtrlValuenPotValue
    m_bCtrlType CtrlValueiValue
    break
    case COMMAND_EXE_CTRL 控制执行
    m_bSendBuf[6] 0x71
    m_bSendBuf[7] 0xc2
    m_bSendBuf[8] 0x03
    m_bSendBuf[9] CtrlValuebAddressRtuID配置
    m_bSendBuf[10] 0x01配置
    CheckSendCode(6)
    m_bSendBuf[12] 0xe2
    m_bSendBuf[13] 0xaa
    m_bSendBuf[14] CtrlValuenPotValue
    m_bSendBuf[15] m_bSendBuf[13]
    m_bSendBuf[16] m_bSendBuf[14]
    CheckSendCode(12)
    memcpy(&m_bSendBuf[18] &m_bSendBuf[12] 6) 连送三相信息字
    memcpy(&m_bSendBuf[24] &m_bSendBuf[12] 6)
    m_wSendLen 30
    m_nCtrlNumber CtrlValuenPotValue
    m_bCtrlType CtrlValueiValue
    break
    case COMMAND_CANCEL_CTRL 控制撤消
    m_bSendBuf[6] 0x71
    m_bSendBuf[7] 0xb3
    m_bSendBuf[8] 0x03
    m_bSendBuf[9] CtrlValuebAddressRtuID配置
    m_bSendBuf[10] 0x01配置
    CheckSendCode(6)
    m_bSendBuf[12] 0xe3
    m_bSendBuf[13] 0x55
    m_bSendBuf[14] CtrlValuenPotValue
    m_bSendBuf[15] m_bSendBuf[13]
    m_bSendBuf[16] m_bSendBuf[14]
    CheckSendCode(12)
    memcpy(&m_bSendBuf[18] &m_bSendBuf[12] 6) 连送三相信息字
    memcpy(&m_bSendBuf[24] &m_bSendBuf[12] 6)
    m_wSendLen 30
    break
    case COMMAND_BAOHU_RESET 保护复
    m_bSendBuf[6] 0x31
    m_bSendBuf[7] 0x3d
    m_bSendBuf[8] 0x00
    m_bSendBuf[9] CtrlValuebAddressRtuID
    m_bSendBuf[10] 0x01
    CheckSendCode(6)
    m_wSendLen 12
    m_bSendBuf[6] 0xf0 定义格式
    m_bSendBuf[7] 0x3d
    m_bSendBuf[8] 0x01
    m_bSendBuf[9] RtuID
    m_bSendBuf[10] 0x01
    Check_SendCode(6)
    m_bSendBuf[12] 0x9f
    m_bSendBuf[13] 0xaa
    m_bSendBuf[14] rtu_debugpdata[0]
    m_bSendBuf[15] 0xaa
    m_bSendBuf[16] SendBuf[14]
    Check_SendCode(12)
    m_wSendLen 18
    break
    case COMMAND_AMMETER 冻结电度
    m_bSendBuf[6] 0x21
    m_bSendBuf[7] 0x9e
    m_bSendBuf[8] 0x00
    m_bSendBuf[9] CtrlValuebAddressRtuID
    m_bSendBuf[10] 0xff 广播命令
    CheckSendCode(6)
    m_wSendLen 12
    break
    case COMMAND_CALI_TIME 时
    m_bSendBuf[6] 0x70
    m_bSendBuf[7] 0x7a
    m_bSendBuf[8] 0x02
    m_bSendBuf[9] CtrlValuebAddressRtuID配置
    m_bSendBuf[10] 0x01 destination
    CheckSendCode(6)
    m_bSendBuf[12] 0xee
    try
    {
    Fetch_VDTSysInfo(PortNoBAUD(void *)&baud)
    msoff 240000baud
    }
    catch( ) {}
    SYSTEMTIME newtime
    ptGetCurTime(&newtime)
    nOffset 240000 600分母波特率
    newtimewMilliseconds + nOffset
    if (newtimewMilliseconds > 999)
    {
    newtimewMilliseconds 1000
    ptTimeAdd(&newtime 1)
    }
    m_bSendBuf[13] (BYTE)(newtimewMilliseconds 256)
    m_bSendBuf[14] (BYTE)(newtimewMilliseconds 256)
    m_bSendBuf[15] (BYTE)newtimewSecond
    m_bSendBuf[16] (BYTE)newtimewMinute
    CheckSendCode(12)
    m_bSendBuf[18] 0xef
    m_bSendBuf[19] (BYTE)newtimewHour
    m_bSendBuf[20] (BYTE)newtimewDay
    m_bSendBuf[21] (BYTE)newtimewMonth
    m_bSendBuf[22] (BYTE)(newtimewYear 100)
    CheckSendCode(18)
    m_wSendLen 24
    break
    case COMMAND_NONE 空命令
    break
    case COMMAND_SET_RYB 软压板
    break
    default
    break
    }
    m_ePreCode m_eCmdCode
    m_eCmdCode COMMAND_NONE
    #ifdef SYNC_HEADBB
    if (m_wSendLen < 1)
    {
    m_wSendLen 6
    }
    #endif
    }
    int CCDTTimeCheck(void)
    {
    int nResult 0 返回值变量
    unsigned long lTimeEnd 0 结束时刻
    unsigned long lUsingTime 0 溢出时间
    bool bFlag false 失败参数
    if ((m_ePreCode COMMAND_SEL_CTRL) 控制选择
    ||(m_ePreCode COMMAND_EXE_CTRL)) 控制执行
    {
    lTimeEnd GetTickCount()
    lUsingTime (lTimeEnd m_lTimeBegin) 1000
    if (lUsingTime > TIMEOUT)
    {
    if (m_ePreCode COMMAND_SEL_CTRL) 控制选择
    {
    m_ePreCode COMMAND_NONE
    bFlag true
    PutYK(INFDATA_YK_SEL bFlag) 遥控返校失败
    }
    else if (m_ePreCode COMMAND_EXE_CTRL) 控制执行
    {
    CommandReturn(INF_SWITCH RESULT_FAIL)
    }
    }
    else
    {
    nResult 1
    }
    }
    else
    {
    m_lTimeBegin GetTickCount()
    }
    return nResult
    }
    int CCDTHexToBCD(unsigned char bHex)
    {
    int nResult 1
    if (((bHex >> 4) < 10)
    || ((bHex & 0x0f) < 10))
    {
    nResult ((bHex & 0xf0) 16) * 10 + (bHex & 0x0f)
    }
    return nResult
    }
    void CCDTTestPutYX(void)
    {
    int i 0 般变量
    SYSTEMTIME systime 时间结构体
    DATAGROUP DataGroup 存储数结构体
    SOE_STATUS SoeStatus 事件结构体
    memset(&SoeStatus 0 sizeof(SOE_STATUS))
    memset(&DataGroup 0x00 sizeof(DATAGROUP))
    GetLocalTime(&systime)
    for (i0 i<43 i++)
    {
    SoeStatusbAddress 0x01 固定值
    SoeStatusnPot i
    SoeStatusbStatus rand()2+1
    SoeStatuswMilliseconds systimewMilliseconds + (systimewSecond & 0xff) * 1000
    SoeStatusbMinute systimewMinute & 0x3f
    SoeStatusbHour systimewHour & 0x1f
    SoeStatusbDay systimewDay & 0x3f
    SoeStatuseType INFDATA_YX
    SoeStatuseStation GATE_REMOTESTATION 远动站
    g_soedataInsSoeData(SoeStatus)
    SoeStatuseStation GATE_OPERATERSTATION 操作员站
    g_soedataInsSoeData(SoeStatus)
    SoeStatuseStation GATE_ENGINEERSTATION 工程师站
    g_soedataInsSoeData(SoeStatus)
    g_devdataInsDevData(&DataGroup 1)
    }
    return
    }
    void CCDTTestPutSOE(void)
    {
    SOE_STATUS SoeStatus 事件结构体
    SYSTEMTIME systime 时间结构体
    DATAGROUP DataGroup 存储数结构体
    memset(&DataGroup 0x00 sizeof(DATAGROUP))
    memset(&SoeStatus 0 sizeof(SOE_STATUS))
    GetLocalTime(&systime)
    SoeStatusbAddress 0x01 固定值
    SoeStatusnPot 17m_bSoeBuf[9] + (m_bSoeBuf[10] & 0x0f) * 256
    SoeStatusbStatus rand()2+1m_bSoeBuf[10] & 0x80
    SoeStatuswMilliseconds systimewMilliseconds + (systimewSecond & 0xff) * 1000
    SoeStatusbMinute systimewMinute & 0x3f
    SoeStatusbHour systimewHour & 0x1f
    SoeStatusbDay systimewDay & 0x3f
    SoeStatuseType INFDATA_SOE

    SoeStatuseStation GATE_REMOTESTATION 远动站
    g_soedataInsSoeData(SoeStatus)
    SoeStatuseStation GATE_OPERATERSTATION 操作员站
    g_soedataInsSoeData(SoeStatus)
    SoeStatuseStation GATE_ENGINEERSTATION 工程师站
    g_soedataInsSoeData(SoeStatus)
    return
    }
    int CCDTTimeTest()
    {
    int i0
    unsigned long YXend

    间隔30秒送次状态
    YXend GetTickCount()
    if ((YXend m_begin)1000 > 30)
    {
    m_begin GetTickCount()
    TestPutYX()
    TestPutSOE()
    return 1
    }
    return 0
    }
    *******************************************************
    文档香网(httpswwwxiangdangnet)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 10 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    数字图像处理车牌识别课程设计matlab实现附源代码

    基于matlab的车牌识别系统一、 目的与要求目的:利用matlab实现车牌识别系统,熟悉matlab应用软件的基础知识,了解了基本程序设计方法,利用其解决数字信号处理的实际应用问题,从而加深...

    1年前   
    341    0

    房地资源档案管理信息系统的设计与实现

    房地资源档案管理信息系统的设计与实现摘 要: 房地资源档案管理信息系统是适用于房地资源类档案的管理系统,系统实现档案条目的录入、审核、管理功能,通过影像扫描对档案进行数字化处理,并通过查阅功能...

    11年前   
    442    0

    房产中介管理信息系统的设计与实现

    摘 要随着房地产业的开发,房产中介行业也随之发展起来,由于房改政策的出台,购房、售房、租房的居民越来越多,这对房产中介部门无疑是一个发展的契机。本文结合目前中国城市房产管理的实际情况...

    2年前   
    396    0

    企业网络规划设计与实现

    职业技术学院毕业实践报告题目:企业网络规划设计与实现毕业论文毕业设计毕业专题√类型:指导老师: 系 别: 班 级: 学 号: 姓 名:2014 年 X 月 X 日【...

    1年前   
    443    0

    电力系统通信技术建设电力通信网络管理系统

    电力系统通信技术建设电力通信网络管理系统摘要:分析了电力系统专用通信网的管理要求,针对网络管理层次多、设备种类多、网络结构复杂的特点,从技术的角度提出了建设电力通信网网络管理系统的基本要求及解...

    9年前   
    573    0

    基于BS架构的网络教学平台的设计与实现

    当今是网络信息时代,出现了很多行业都依靠互联网的发展,这就是互联网+的概念。现在中国的网络教育如火如茶,百花齐放,有职业教育,有中小学教育,留学教学,兴趣教育等等,都利用了互联网的便捷性进行着知...

    3年前   
    667    0

    基于网络的蛋糕销售系统的设计与实现毕业论文

     毕 业 论 文(设 计) 20XX 届 计算机科学与技术 专业 班级 题 目基于网络的蛋糕销售系统的设计与实现 姓...

    5年前   
    2342    0

    毕业设计管理系统的设计与实现

    毕业设计管理系统的设计与实现 摘 要 随着Internet的飞速发展及互联网的普及,计算机已广泛用于政府、军事、科研、商业等部门,连接到千家万户,利用计算机实现毕业设计管...

    5年前   
    2633    0

    计算机网络设计报告简单企业网的设计与实现

     课程名称: 计算机网络课程设计 项目名称: 简单企业网的设计与实现 学 院:计算机科学与通信工程专 业:物联网工程班 级:物联学 号:姓 名:指导教师:成 ...

    7个月前   
    202    0

    求职网站的设计与实现

    伴随大学生人数不断增加,就业负担沉重,工作职位少但是待业人员众多等,在上述环境中尽早抓住时机就变成寻找最佳工作的关键条件,目前即便是网络社会,但是大部分学生依旧无法逃脱奔波于人才市场的窘境,利用...

    3年前   
    604    0

    网上书店的设计与实现

    网上书店的设计与实现摘 要在当今的社会计算机已经渐渐深入到人类生活的各个角落,在我们生活的周围,处处可见与网络息息相关的产品。尤其是最近几年,参加网络购物的人越来越多。这不仅仅是因为网上购物...

    3年前   
    682    0

    物流管理信息系统课程设计

    湖南长沙家润多超市是由全国零售业前十强企业湖南友谊阿波罗股份全资控股的子公司。公司的第一家门店于2000年9月28日在长沙市朝阳区开业,至今在湖南省拥有家润多朝阳店、千喜店、赤岗冲店、常德店、益...

    2年前   
    660    0

    医院管理信息系统的分析与设计

    目前在我国许多中小型医院,没有使用管理信息系统(MIS),信息处理基本上还处于手工状态,致使医护和管理人员劳动强度大且工作效率低,医院也为此苦恼不以,所以一个好的有效的管理信息系统的出台是十分必要的

    3年前   
    665    0

    超市管理信息系统课程设计

    XX大学商学院课程设计总结报告 实习课程 管理信息系统设计 设计课题 鲜果屋超市进销存管理信息系统设计 小 组 经管第组 ...

    3年前   
    811    0

    设计课题:商务网站管理信息系统

    设计课题:商务网站管理信息系统  目的:解决企事业单位及商家全套网络信息化服务 意义: 精确、简化企业内部管理,提高工作效率;扩大市场范围、营造商机、增加企业知名度;有助于促进与客户和同行间的...

    10年前   
    549    0

    源代码使用许可协议

    ________源代码使用许可合同甲方:XX软件有限公司 乙方:法定地址: 法定地址:法定代表人: 法定代表人:联系电话: ...

    4年前   
    1729    0

    OTN技术在电力通信系统中的应用与优化

    电力系统通信网,作为电力行业的专用通信网,是电力系统不可缺少的组成部分,伴随着电力系统信息化、智能化发展需求的不断提升,电力系统通信网承载的业务逐渐从单一的调度监控业务、安全生产业务、营销业务、...

    3年前   
    714    0

    试述电力通信技术在智能电网的运用

    试述电力通信技术在智能电网的运用摘要:目前,电网也随着技术的创新不断进步,其发展脚步越来越快,已逐步实现智能化、自动化控制,极大提高电网的运行效率。智能电网的建立基础是电力通信,良好的通信质量...

    2年前   
    455    0

    设备管理信息系统详细设计、概要设计

    设备管理信息系统详细设计、概要设计目录设备管理系统详细设计 41. 编写目的 42. 背景 43. 定义 44. 总体设计 54.1、 需求概述 54.2、 系统结构 54.2.1、 系统的功...

    3年前   
    703    0

    Ping程序的设计与实现课程设计

     计算机网络课程设计报告设计名称 Ping程序的设计与实现 专业班级 同组人姓名 ...

    3年前   
    620    0

    文档贡献者

    文***享

    贡献于2019-07-02

    下载需要 10 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档