QuakeGod
2022-10-17 d69aae90ede578aaebc355dafd3496993ccea126
fix 2
1个文件已删除
23个文件已修改
7068 ■■■■ 已修改文件
Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_rcc.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Inc/BSP.h 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Inc/GlobalDef.h 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Inc/KBus.h 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Inc/KLink.h 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Inc/KMachine.h 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Inc/functions.h 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Inc/main.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Inc/stm32f0xx_hal_conf.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Inc/stm32f0xx_it.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MDK-ARM/F030C8T6_Test2.uvguix.QuakeGod 444 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MDK-ARM/F030C8T6_Test2.uvoptx 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MDK-ARM/F030C8T6_Test2.uvprojx 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MDK-ARM/JLinkLog.txt 5097 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Src/BSP.c 179 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Src/GlobalDef.c 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Src/KBus.c 211 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Src/KLink.c 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Src/KMachine.c 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Src/ModbusRTU.c 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Src/ModbusRTU.h 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Src/functions.c 143 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Src/main.c 589 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Src/stm32f0xx_it.c 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_rcc.h
@@ -129,7 +129,7 @@
  * @{
  */
#if !defined  (HSE_VALUE)
#define HSE_VALUE    8000000U  /*!< Value of the HSE oscillator in Hz */
#define HSE_VALUE    12000000U  /*!< Value of the HSE oscillator in Hz */
#endif /* HSE_VALUE */
#if !defined  (HSI_VALUE)
Inc/BSP.h
@@ -1,12 +1,13 @@
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __BSP_H__
#define __BSP_H__
#include "stm32f0xx_ll_rcc.h"
#include "stm32f0xx_ll_adc.h"
#include "stm32f0xx_ll_crc.h"
#include "stm32f0xx_ll_dma.h"
#include "stm32f0xx_ll_spi.h"
#include "stm32f0xx_ll_usart.h"
#include "stm32f0xx_ll_rcc.h"
#include "stm32f0xx_ll_system.h"
#include "stm32f0xx_ll_gpio.h"
#include "stm32f0xx_ll_exti.h"
@@ -14,6 +15,7 @@
#include "stm32f0xx_ll_cortex.h"
#include "stm32f0xx_ll_utils.h"
#include "stm32f0xx_ll_pwr.h"
#include "stm32f0xx_ll_tim.h"
void SystemClock_Config(void);
void MX_IWDG_Init(void);
@@ -21,6 +23,7 @@
void MX_DMA_Init(void);
void MX_USART1_UART_Init(void);
void MX_USART2_UART_Init(void);
void MX_TIM6_Init(void);
void MX_SPI1_Init(void);
void MX_SPI2_Init(void);
Inc/GlobalDef.h
@@ -36,13 +36,17 @@
    BOARD_V42_SLAVE,        //10    New V4.2 Slave 8 in 8 o    
    
    BOARD_V30_MINI    =11,        //11  Mini Board
    BOARD_EXT_FP0 = 12,
    BOARD_V45_NET = 13,
    BOARD_V50_RADIO = 15,
};
#define XLAT_FREQ 8
#define BOARD_TYPE 9
#define BOARD_TYPE 11
#define XLAT_FREQ 12
extern int GetBoardType(void);
#define GetBoardType() (BOARD_TYPE)
extern volatile int PendSvCount;
Inc/KBus.h
@@ -11,7 +11,7 @@
#define __KBUS_H__
typedef unsigned char uchar;
extern int bMaster,bSlave;
extern unsigned char bMaster,bSlave,bRepeater;
    enum enCMDs
    {
        cmdNone = '0',        //Nothing
@@ -49,9 +49,9 @@
extern unsigned char nCurPollId;
extern unsigned char nSeq;
extern volatile int MasterRecved;
extern volatile int MasterRecvOK;
extern volatile int SlaveRecved;
extern volatile unsigned char MasterRecved;
extern volatile unsigned char MasterRecvOK;
extern volatile unsigned char SlaveRecved;
extern unsigned int SendTimeuS;
extern volatile int RecvTimeuS;
extern int DelayuS;
@@ -143,7 +143,8 @@
        };
    };
} stChnStat;
extern stChnStat ChnStats[8];
extern stChnStat ChnStats[9];
typedef struct tagSlaveStat
{
@@ -205,17 +206,21 @@
    S_TIMEOUT=2
}    ;
int RepeaterFunc(int nChn);
int MasterFunc(int nChn);
int SlaveFunc(int nChn);
unsigned char BCC(void * pData, int nSize);
//
    /* Make a Packet and return Packet Length */
int MakePacket(pPacket p1,uchar Src, uchar Dst, uchar nType, uchar nSEQ, uchar DataLen, void *pData );
/*   */
int CheckPacket(pPacket p1,int len1);
int CheckPacket(int nChn, pPacket p1, int len1);
/* */
int ParsePacket(pPacket p1, int Len1);
int ParsePacket(int nChn, pPacket p1, int Len1);
typedef struct tagMachineConfig
{
    int bMaster;
Inc/KLink.h
@@ -28,8 +28,8 @@
    
}    ;
enum {KLSignStart='%',
            KLSignReply='U',
enum {KLSignStart='%',    //0x25
            KLSignReply='U',    //0x55
            KLSignEnd=0x0D,
            KLMaxPacketLength=64,
};
@@ -228,10 +228,10 @@
int KLMakeRplyPacket(void * pBuf1, uchar Dst, uchar Status, uchar nCmd, uchar DataLen, const void *pData );
/*   */
int KLCheckPacket(void * pBuf1,int len1);
int KLCheckPacket(int nChn, void * pBuf1, int len1);
/* */
int KLParsePacket(void * pBuf1, int Len1);
int KLParsePacket(int nChn, void * pBuf1, int Len1);
//int ReadData(void);
Inc/KMachine.h
@@ -43,6 +43,12 @@
typedef unsigned short WORD;
typedef unsigned char BYTE;
#define LoBofW(x) ((x)&0xff)
#define HiBofW(x) (((x)>>8)&0xff)
#define LoHofB(x) ((x)&0xf)
#define HiHofB(x) (((x)>>4)&0xf)
enum enStoreCfg
{
    START_SIGN = 0x55aa,
@@ -80,6 +86,21 @@
    PortType_KNet = 4,     // KNetͨѶ
    PortType_ModbusRTU = 5, //Modbus RTU ͨѶ
};
//每个模块有 0/1/2/3/4/5/6/7/8个 通讯port
//不限于 UART, 网口,无线,单总线等,都是port
//甚至可以有虚拟的port
typedef struct tagPortStat
{
    UCHAR nWorking;            //工作中
    UCHAR nStation;            //自己站号
    UCHAR bBus;                    //总线?,,全双工?
    UCHAR bMaster;            //主机
    UCHAR PortType;            //端口工作模式
    UCHAR nDevices;            //连接的设备数量//不包括自己 //device list;
}stPortStat,*pPortStat;
enum enKeventType
{
@@ -348,9 +369,15 @@
    unsigned char CurVALs[TOTAL_CurVAL];
    unsigned char CurVAL;
    stTimer Timers[TOTALTIMERS];
    union {
    unsigned short WX[KLDataWXCount];        //本机的X和Y
    unsigned char WXB[KLDataWXCount*2];
    };
    union {
    unsigned short WY[KLDataWYCount];        //本机的X和Y
    unsigned char WYB[KLDataWYCount*2];        //本机的X和Y
    };
    unsigned short WR[KLDataWRCount];
    
    unsigned short WT[16];
@@ -365,8 +392,11 @@
    unsigned short WLR[16];    
    unsigned short WSR[16];
union {
    unsigned int DTD[KLDataDTCount];
    unsigned short DT[KLDataDTCount];
    unsigned char DTB[KLDataDTCount*2];
};
    // 配置寄存器
    // 系统状态寄存器
    // 特殊寄存器
@@ -405,6 +435,10 @@
extern stKMem KMem;
extern const stKMInfoBlock KMInfoBlock;
extern volatile int PowerDownEvent;
extern volatile int OldPowerDownEvent;
extern volatile int OldPowerDownEventTime;
int KMachineInit(void);
int ReadFlashMem(void * pBuf, void * pAddrFlash, int nByteSize);
int WriteToFlashMemNoErase(void * pBuf, void * pAddrFlash, unsigned int nByteSize);
Inc/functions.h
@@ -45,16 +45,16 @@
int Uart3TriggerSendDMA(void );
void TriggerPendSV(void);
void PendSvCallBack(void);
void SPI1_IRQ_CallBack(void);
void Uart1SendDone(void);
void Uart1RecvDone(void);
void Uart2SendDone(void);
void Uart2RecvDone(void);
int PutStr(char * str1, int len1);
void clearscreen(void );
void Locate(int x,int y);
int SendPacket1(void * pBuf,int len1);
int SendPacket2(pPacket p1,int len1);
int SendPacket(int nChn, void * pBuf,int len1);
//int SendPacket1(void * pBuf,int len1);
//int SendPacket2(pPacket p1,int len1);
void ToggleRunLed(void );
void ToggleErrLed(void );
void ToggleOutStat(void );
@@ -74,5 +74,5 @@
void EnableDisIn(uchar bEnable);
void displayInput(unsigned int cc);
void PutOutputSPI1(unsigned int Y);
#endif  /* __MYFUNCTIONS_H__ */
Inc/main.h
@@ -54,6 +54,7 @@
#include "stm32f0xx_ll_exti.h"
#include "stm32f0xx_ll_bus.h"
#include "stm32f0xx_ll_cortex.h"
#include "stm32f0xx_ll_tim.h"
#include "stm32f0xx_ll_utils.h"
#include "stm32f0xx_ll_pwr.h"
Inc/stm32f0xx_hal_conf.h
@@ -89,7 +89,7 @@
  *        (when HSE is used as system clock source, directly or through the PLL).  
  */
#if !defined  (HSE_VALUE) 
  #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
  #define HSE_VALUE    ((uint32_t)12000000) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
/**
Inc/stm32f0xx_it.h
@@ -52,6 +52,8 @@
void SVC_Handler(void);
void PendSV_Handler(void);
void SysTick_Handler(void);
void TIM6_IRQHandler(void);
void SPI1_IRQHandler(void);
void DMA1_Channel2_3_IRQHandler(void);
void DMA1_Channel4_5_IRQHandler(void);
void USART1_IRQHandler(void);
MDK-ARM/F030C8T6_Test2.uvguix.QuakeGod
@@ -36,17 +36,17 @@
    <View>
      <WinId>38003</WinId>
      <ViewName>Registers</ViewName>
      <TableColWidths>115 79</TableColWidths>
      <TableColWidths>115 179</TableColWidths>
    </View>
    <View>
      <WinId>346</WinId>
      <ViewName>Code Coverage</ViewName>
      <TableColWidths>1010 160</TableColWidths>
      <TableColWidths>1010 988</TableColWidths>
    </View>
    <View>
      <WinId>204</WinId>
      <ViewName>Performance Analyzer</ViewName>
      <TableColWidths>1170</TableColWidths>
      <TableColWidths>1170 175 175 478</TableColWidths>
    </View>
  </SECTreeCtrl>
@@ -55,31 +55,31 @@
      <WinId>1506</WinId>
      <ViewName>Symbols</ViewName>
      <UserString></UserString>
      <TableColWidths>80 80 80</TableColWidths>
      <TableColWidths>106 106 106</TableColWidths>
    </View>
    <View>
      <WinId>1936</WinId>
      <ViewName>Watch 1</ViewName>
      <UserString></UserString>
      <TableColWidths>80 80 80</TableColWidths>
      <TableColWidths>106 106 106</TableColWidths>
    </View>
    <View>
      <WinId>1937</WinId>
      <ViewName>Watch 2</ViewName>
      <UserString></UserString>
      <TableColWidths>80 80 80</TableColWidths>
      <TableColWidths>106 106 106</TableColWidths>
    </View>
    <View>
      <WinId>1935</WinId>
      <ViewName>Call Stack + Locals</ViewName>
      <UserString></UserString>
      <TableColWidths>80 80 80</TableColWidths>
      <TableColWidths>208 106 106</TableColWidths>
    </View>
    <View>
      <WinId>2506</WinId>
      <ViewName>Trace Data</ViewName>
      <UserString>FiltIdx=0;DescrEn=0;DescrHeight=4;FuncTrc=1;FindType=8;ColWidths=004B00870082005F004600E600C80096</UserString>
      <TableColWidths>75 135 130 95 70 230 200 150</TableColWidths>
      <TableColWidths>75 135 95 70 230 200 150</TableColWidths>
    </View>
  </TreeListPane>
@@ -99,8 +99,8 @@
    <sActiveDebugView></sActiveDebugView>
    <WindowPosition>
      <length>44</length>
      <flags>0</flags>
      <showCmd>1</showCmd>
      <flags>2</flags>
      <showCmd>3</showCmd>
      <MinPosition>
        <xPos>-32000</xPos>
        <yPos>-32000</yPos>
@@ -110,17 +110,17 @@
        <yPos>-1</yPos>
      </MaxPosition>
      <NormalPosition>
        <Top>26</Top>
        <Left>-7</Left>
        <Right>1927</Right>
        <Bottom>1040</Bottom>
        <Top>124</Top>
        <Left>-2182</Left>
        <Right>-249</Right>
        <Bottom>1177</Bottom>
      </NormalPosition>
    </WindowPosition>
    <MDIClientArea>
      <RegID>0</RegID>
      <MDITabState>
        <Len>1855</Len>
        <Data>0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000010000002800000028000000020000000F0000000E0000000000000042443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C496E635C504C4366756E6374696F6E732E68000000000E504C4366756E6374696F6E732E6801000000C5D4F200FFFFFFFF3F443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C496E635C66756E6374696F6E732E68000000000B66756E6374696F6E732E6801000000FFDC7800FFFFFFFF3A443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C496E635C6D61696E2E6800000000066D61696E2E6801000000BECEA100FFFFFFFF39443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C496E635C4253502E6800000000054253502E6801000000F0A0A100FFFFFFFF3E443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C496E635C4B4D616368696E652E68000000000A4B4D616368696E652E6801000000BCA8E100FFFFFFFF3A443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C5372635C6D61696E2E6300000000066D61696E2E63010000009CC1B600FFFFFFFF3B443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C496E635C4B4C696E6B2E6800000000074B4C696E6B2E6801000000F7B88600FFFFFFFF63443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C447269766572735C53544D3332463078785F48414C5F4472697665725C496E635C73746D3332663078785F6C6C5F6164632E68000000001273746D3332663078785F6C6C5F6164632E6801000000D9ADC200FFFFFFFF67443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C447269766572735C434D5349535C4465766963655C53545C53544D3332463078785C496E636C7564655C73746D33326630333078382E68000000000D73746D33326630333078382E6801000000A5C2D700FFFFFFFF64443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C447269766572735C53544D3332463078785F48414C5F4472697665725C5372635C73746D3332663078785F68616C5F7263632E63000000001373746D3332663078785F68616C5F7263632E6301000000B3A6BE00FFFFFFFF3F443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C5372635C4D6F646275735254552E68000000000B4D6F646275735254552E6801000000EAD6A300FFFFFFFF3A443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C5372635C4B4275732E6300000000064B4275732E6301000000F6FA7D00FFFFFFFF3A443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C496E635C4B4275732E6800000000064B4275732E6801000000B5E99D00FFFFFFFF3F443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C496E635C476C6F62616C6465662E68000000000B476C6F62616C6465662E68010000005FC3CF00FFFFFFFF60443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C447269766572735C53544D3332463078785F48414C5F4472697665725C5372635C73746D3332663078785F68616C2E63000000000F73746D3332663078785F68616C2E6301000000C1838300FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000D100000088000000490300002F03000001000000000000000100000039443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C5372635C4253502E6300000000054253502E6300000000FFDC7800FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD50001000000000000000200000049030000880000007F0700002F030000</Data>
        <Len>1846</Len>
        <Data>0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000010000002800000028000000020000000800000005000000010000003F443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C496E635C66756E6374696F6E732E68000000000B66756E6374696F6E732E6801000000BECEA100FFFFFFFF39443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C496E635C4253502E6800000000054253502E6801000000BCA8E100FFFFFFFF3E443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C496E635C4B4D616368696E652E68000000000A4B4D616368696E652E68010000009CC1B600FFFFFFFF3B443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C496E635C4B4C696E6B2E6800000000074B4C696E6B2E6801000000F7B88600FFFFFFFF3A443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C496E635C4B4275732E6800000000064B4275732E6801000000F6FA7D00FFFFFFFF3F443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C496E635C476C6F62616C6465662E68000000000B476C6F62616C6465662E6801000000B5E99D00FFFFFFFF3F443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C5372635C476C6F62616C4465662E63000000000B476C6F62616C4465662E6301000000A5C2D700FFFFFFFF3B443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C5372635C64656275672E63000000000764656275672E6301000000D9ADC200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000003EF7FFFF6B00000045FBFFFF270400000A000000080000000000000039443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C5372635C4253502E6300000000054253502E6300000000C5D4F200FFFFFFFF42443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C5372635C73746D3332663078785F69742E63000000000E73746D3332663078785F69742E6300000000FFDC7800FFFFFFFF3A443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C5372635C6D61696E2E6300000000066D61696E2E6300000000BECEA100FFFFFFFF3F443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C5372635C66756E6374696F6E732E63000000000B66756E6374696F6E732E6300000000F0A0A100FFFFFFFF3B443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C5372635C4B4C696E6B2E6300000000074B4C696E6B2E6300000000BCA8E100FFFFFFFF3F443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C5372635C4D6F646275735254552E63000000000B4D6F646275735254552E6300000000FFDC7800FFFFFFFF3A443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C496E635C6D61696E2E6800000000066D61696E2E6800000000F7B88600FFFFFFFF3A443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C5372635C4B4275732E6300000000064B4275732E6300000000D9ADC200FFFFFFFF3E443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C5372635C4B4D616368696E652E63000000000A4B4D616368696E652E6300000000A5C2D700FFFFFFFF3B443A5C574F524B5C4D4355265043425C444953545F494F5C46303330433854365F4B4C696E6B5F32303231303632305C496E635C64656275672E68000000000764656275672E6800000000B3A6BE00FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD50001000000000000000200000045FBFFFF6B0000000000000027040000</Data>
      </MDITabState>
    </MDIClientArea>
    <ViewEx>
@@ -143,7 +143,7 @@
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
          <Data>F5000000880000009105000018010000</Data>
          <Data>F40000006600000090050000F6000000</Data>
        </RectRecentFloat>
      </Window>
      <Window>
@@ -159,7 +159,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>0300000066000000C9000000DD020000</Data>
          <Data>030000006600000037010000F2030000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -179,7 +179,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>0300000066000000C9000000DD020000</Data>
          <Data>030000006600000037010000F2030000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -459,7 +459,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>0300000066000000C9000000DD020000</Data>
          <Data>030000006600000037010000F2030000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -479,7 +479,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>0300000066000000C9000000DD020000</Data>
          <Data>030000006600000037010000F2030000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -499,7 +499,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>03000000110300007B070000A3030000</Data>
          <Data>0300000026040000FD09000035050000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -539,7 +539,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>03000000110300007B070000A3030000</Data>
          <Data>0300000026040000FD09000035050000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -1139,7 +1139,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>0300000066000000C9000000DD020000</Data>
          <Data>030000006600000037010000F2030000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -1159,7 +1159,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>03000000110300007B070000A3030000</Data>
          <Data>0300000026040000FD09000035050000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -1179,7 +1179,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>03000000110300007B070000A3030000</Data>
          <Data>0300000026040000FD09000035050000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -1659,7 +1659,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>00000000BC0300007E070000CF030000</Data>
          <Data>000000004E050000000A000061050000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -1708,14 +1708,14 @@
      </Window>
      <DockMan>
        <Len>3119</Len>
        <Data>000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DF00000090050000E3000000000000000100000004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E650020000000000000F5000000880000009105000018010000F40000004F00000090050000DF0000000000000040280046060000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000A1040000880000009105000062020000A00400004F000000900500002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFCC0000004F000000D0000000F602000001000000020000100400000001000000D3FEFFFFC6030000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000100000088000000CD0000002F030000000000004F000000CC000000F60200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000015020000900500001902000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB09000001800080000000000000010000005202000091050000F6020000000000001902000090050000BD02000000000000404100460E0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000019020000CC020000BD02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000F60200007E070000FA02000001000000010000100400000001000000B9FCFFFF45000000FFFFFFFF04000000C5000000C7000000B4010000779400000180008000000100000001000000330300007F070000F503000000000000FA0200007E070000BC0300000000000040820056040000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data>
        <Data>000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DF00000090050000E3000000000000000100000004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E650020000000000000F40000006600000090050000F6000000F40000004F00000090050000DF0000000000000040280046060000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000A0040000660000009005000040020000A00400004F000000900500002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF3A0100004F0000003E0100000B0400000100000002000010040000000100000036FFFFFF2B090000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000000000000660000003A01000022040000000000004F0000003A0100000B0400000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000015020000900500001902000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000003002000090050000D4020000000000001902000090050000BD02000000000000404100460E0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000019020000CC020000BD02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000000B040000000A00000F04000001000000010000100400000001000000CCFBFFFFC0000000FFFFFFFF04000000C5000000C7000000B401000077940000018000800000010000000000000026040000000A000065050000000000000F040000000A00004E0500000000000040820056040000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data>
      </DockMan>
      <ToolBar>
        <RegID>59392</RegID>
        <Name>File</Name>
        <Buttons>
          <Len>2025</Len>
          <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE8030000000000000000000000000000000000000000000000010000000100000096000000020020500000000009584C41545F465245519600000000000000010009584C41545F4652455100000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020000001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65AC030000</Data>
          <Len>2372</Len>
          <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000630303030303096000000000000001400074C6174616E63790C5061636B65744C656E677468054461746173134C617374436972636C65537461727454696D650A436972636C6554696D650C54696D654F7574436F756E74076E436F756E7432000D5075744F757470757453504931094853455F56414C5545195243435F504C4C5F47657446726571446F6D61696E5F535953165243435F47657453797374656D436C6F636B46726571063030303030301A4C4C5F5243435F47657453797374656D436C6F636B7346726571144C4C5F5243435F436C6F636B735479706544656610535953434C4B5F4672657175656E63791275736172745F6672657175656E6379203D200C55617274316261756476616C095561727431426175641044656661756C745561727431426175640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020000001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65AC030000</Data>
        </Buttons>
        <OriginalItems>
          <Len>1423</Len>
@@ -1731,7 +1731,7 @@
        <Name>Build</Name>
        <Buttons>
          <Len>690</Len>
          <Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000000001F0000000000000000000000000000000001000000010000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000E46303330433854365F5465737432960000000000000001000E46303330433854365F5465737432000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64CF010000</Data>
          <Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000000001F0000000000000000000000000000000001000000010000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000E46303330433854365F5465737432960000000000000001000E46303330433854365F5465737432000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64CF010000</Data>
        </Buttons>
        <OriginalItems>
          <Len>583</Len>
@@ -1760,8 +1760,8 @@
      </ToolBar>
      <ControlBarsSummary>
        <Bars>0</Bars>
        <ScreenCX>1920</ScreenCX>
        <ScreenCY>1080</ScreenCY>
        <ScreenCX>2560</ScreenCX>
        <ScreenCY>1440</ScreenCY>
      </ControlBarsSummary>
    </ViewEx>
    <ViewEx>
@@ -1780,11 +1780,11 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>340100004F0000008C0600003E010000</Data>
          <Data>340100004F0000000C0900003E010000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
          <Data>34010000660000008C06000055010000</Data>
          <Data>34010000660000000C09000055010000</Data>
        </RectRecentFloat>
      </Window>
      <Window>
@@ -1800,7 +1800,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>03000000660000002D010000AD020000</Data>
          <Data>03000000660000002D01000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -1820,7 +1820,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>03000000660000002D010000AD020000</Data>
          <Data>03000000660000002D01000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -1840,7 +1840,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>C7030000E10200007D070000CD030000</Data>
          <Data>0705000049040000FD09000035050000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -1860,7 +1860,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>C7030000E10200007D070000CD030000</Data>
          <Data>0705000049040000FD09000035050000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -1880,7 +1880,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>C7030000E10200007D070000CD030000</Data>
          <Data>0705000049040000FD09000035050000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -1900,7 +1900,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>C7030000E10200007D070000CD030000</Data>
          <Data>0705000049040000FD09000035050000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -1920,7 +1920,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -1940,7 +1940,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>37010000660000008906000025010000</Data>
          <Data>37010000660000000909000025010000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -1960,7 +1960,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>C7030000E10200007D070000CD030000</Data>
          <Data>0705000049040000FD09000035050000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -1980,7 +1980,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>C7030000E10200007D070000CD030000</Data>
          <Data>0705000049040000FD09000035050000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2000,7 +2000,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>C7030000E10200007D070000CD030000</Data>
          <Data>0705000049040000FD09000035050000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2020,7 +2020,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>C7030000E10200007D070000CD030000</Data>
          <Data>0705000049040000FD09000035050000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2040,7 +2040,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>C7030000E10200007D070000CD030000</Data>
          <Data>0705000049040000FD09000035050000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2060,7 +2060,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>C7030000E10200007D070000CD030000</Data>
          <Data>0705000049040000FD09000035050000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2080,7 +2080,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>C7030000E10200007D070000CD030000</Data>
          <Data>0705000049040000FD09000035050000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2100,7 +2100,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>03000000660000002D010000AD020000</Data>
          <Data>03000000660000002D01000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2120,7 +2120,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>03000000660000002D010000AD020000</Data>
          <Data>03000000660000002D01000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2160,7 +2160,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>00000000CA020000C0030000E6030000</Data>
          <Data>0000000032040000000500004E050000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2200,7 +2200,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>34010000630000008C0600003E010000</Data>
          <Data>34010000630000000C0900003E010000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2220,7 +2220,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>37010000660000008906000025010000</Data>
          <Data>37010000660000000909000025010000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2260,7 +2260,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2280,7 +2280,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>C7030000E10200007D070000CD030000</Data>
          <Data>0705000049040000FD09000035050000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2300,7 +2300,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>37010000660000008906000025010000</Data>
          <Data>37010000660000000909000025010000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2320,7 +2320,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>37010000660000008906000025010000</Data>
          <Data>37010000660000000909000025010000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2340,7 +2340,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>37010000660000008906000025010000</Data>
          <Data>37010000660000000909000025010000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2360,7 +2360,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2380,7 +2380,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2400,7 +2400,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2420,7 +2420,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2440,7 +2440,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2460,7 +2460,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2480,7 +2480,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2500,7 +2500,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2520,7 +2520,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2540,7 +2540,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2560,7 +2560,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2580,7 +2580,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2600,7 +2600,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2620,7 +2620,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2640,7 +2640,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2660,7 +2660,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2670,7 +2670,7 @@
      <Window>
        <RegID>35901</RegID>
        <PaneID>35901</PaneID>
        <IsVisible>0</IsVisible>
        <IsVisible>1</IsVisible>
        <IsFloating>0</IsFloating>
        <IsTabbed>0</IsTabbed>
        <IsActivated>0</IsActivated>
@@ -2680,7 +2680,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2700,7 +2700,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2720,7 +2720,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2740,7 +2740,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2760,7 +2760,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2780,7 +2780,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>03000000660000002D010000AD020000</Data>
          <Data>03000000660000002D01000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2840,7 +2840,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>C7030000E10200007D070000CD030000</Data>
          <Data>0705000049040000FD09000035050000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2860,7 +2860,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>C7030000E10200007D070000CD030000</Data>
          <Data>0705000049040000FD09000035050000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2880,7 +2880,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2900,7 +2900,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2920,7 +2920,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2940,7 +2940,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2960,7 +2960,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -2980,7 +2980,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -3000,7 +3000,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -3020,7 +3020,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -3040,7 +3040,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -3060,7 +3060,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -3080,7 +3080,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -3100,7 +3100,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -3120,7 +3120,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -3140,7 +3140,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -3160,7 +3160,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -3180,7 +3180,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -3200,7 +3200,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -3220,7 +3220,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -3240,7 +3240,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -3260,7 +3260,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>93060000660000007D070000AD020000</Data>
          <Data>1309000066000000FD09000015040000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -3300,7 +3300,7 @@
        <RecentRowIndex>0</RecentRowIndex>
        <RectRecentDocked>
          <Len>16</Len>
          <Data>00000000E603000080070000F9030000</Data>
          <Data>000000004E050000000A000061050000</Data>
        </RectRecentDocked>
        <RectRecentFloat>
          <Len>16</Len>
@@ -3348,15 +3348,15 @@
        </RectRecentFloat>
      </Window>
      <DockMan>
        <Len>3128</Len>
        <Data>000000000B000000000000000020000001000000FFFFFFFFFFFFFFFF340100003E0100008C060000420100000100000001000010040000000100000076FEFFFF6E000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E65002000000100000034010000660000008C06000055010000340100004F0000008C0600003E0100000000000040280056060000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000001000000FFFFFFFFFFFFFFFF8C0600004F00000090060000C6020000010000000200001004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000001000000900600006600000080070000DD020000900600004F00000080070000C602000000000000404100562B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF06555341525432010000003E8C000001000000FFFFFFFFFFFFFFFF03524343010000003F8C000001000000FFFFFFFFFFFFFFFF0001000000408C000001000000FFFFFFFFFFFFFFFF0001000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFF13000000000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF300100004F00000034010000C6020000010000000200001004000000010000005CFFFFFFDD050000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000000000006600000030010000DD020000000000004F00000030010000C60200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF04000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF00000000C602000080070000CA0200000100000001000010040000000100000036FFFFFF6C01000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB09000001800080000001000000C4030000E102000080070000FD030000C4030000CA02000080070000E603000000000000404100560E0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF050000000000000001000000000000000100000001000000FFFFFFFFC0030000CA020000C4030000E603000001000000020000100400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF00000000520300008007000056030000000000000100000004000000010000000000000000000000FFFFFFFF04000000C5000000C7000000B40100007794000001800080000000000000000000006D03000080070000FD030000000000005603000080070000E60300000000000040820046040000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data>
        <Len>3132</Len>
        <Data>000000000B000000000000000020000001000000FFFFFFFFFFFFFFFF340100003E0100000C090000420100000100000001000010040000000100000076FEFFFF6E000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E65002000000100000034010000660000000C09000055010000340100004F0000000C0900003E0100000000000040280056060000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000001000000FFFFFFFFFFFFFFFF0C0900004F000000100900002E040000010000000200001004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000010000001009000066000000000A000045040000100900004F000000000A00002E04000000000000404100562B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF0454494D36010000003D8C000001000000FFFFFFFFFFFFFFFF06555341525432010000003E8C000001000000FFFFFFFFFFFFFFFF03524343010000003F8C000001000000FFFFFFFFFFFFFFFF0001000000408C000001000000FFFFFFFFFFFFFFFF0001000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFF12000000000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF300100004F000000340100002E040000010000000200001004000000010000005CFFFFFFDD050000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000000000000660000003001000045040000000000004F000000300100002E0400000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF04000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF000000002E040000000A0000320400000100000001000010040000000100000036FFFFFF6C01000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB090000018000800000010000000405000049040000000A0000650500000405000032040000000A00004E05000000000000404100560E0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF050000000000000001000000000000000100000001000000FFFFFFFF0005000032040000040500004E05000001000000020000100400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF00000000520300008007000056030000000000000100000004000000010000000000000000000000FFFFFFFF04000000C5000000C7000000B40100007794000001800080000000000000000000006D03000080070000FD030000000000005603000080070000E60300000000000040820046040000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data>
      </DockMan>
      <ToolBar>
        <RegID>59392</RegID>
        <Name>File</Name>
        <Buttons>
          <Len>2290</Len>
          <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000094853455F56414C554596000000000000001300094853455F56414C55450F53797374656D436F7265436C6F636B1248414C5F5359535449434B5F436F6E6669670873686F77696E6974155265616C5F74696D655F74656D70657261747572650C5243435F504C4C5F4D554C3609584C41545F46524551066E496E6465780955617274324261756401630E50656E6453565F48616E646C65720F5379735469636B5F48616E646C65720650656E645376075344445B31365D08427566666572496E0A5265637654696D65755305536C617665056E416464720654686973755300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020001001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65AC030000</Data>
          <Len>2278</Len>
          <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE8030000000000000000000000000000000000000000000000010000000100000096000000020020500000000000960000000000000013000008484152445F53504904737472310F535049315F49525148616E646C6572184C4C5F5350495F4973416374697665466C61675F52584E4509535049315F4952516E0B4750494F5F50494E5F313509584C41545F46524551094B4D52756E537461740357595B08576F726B4D6F64650257590C4D6173746572526563764F4B07657272737461740B62504C4352756E6E696E670955736572446174613107447374486F7374155265616C5F74696D655F74656D70657261747572650C5243435F504C4C5F4D554C3600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020001001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65AC030000</Data>
        </Buttons>
        <OriginalItems>
          <Len>1423</Len>
@@ -3388,7 +3388,7 @@
        <Name>Debug</Name>
        <Buttons>
          <Len>2362</Len>
          <Data>00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000020000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000</Data>
          <Data>00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000020000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000</Data>
        </Buttons>
        <OriginalItems>
          <Len>898</Len>
@@ -3401,162 +3401,180 @@
      </ToolBar>
      <ControlBarsSummary>
        <Bars>0</Bars>
        <ScreenCX>1920</ScreenCX>
        <ScreenCY>1080</ScreenCY>
        <ScreenCX>2560</ScreenCX>
        <ScreenCY>1440</ScreenCY>
      </ControlBarsSummary>
    </ViewEx>
  </WinLayoutEx>
  <MDIGroups>
    <Orientation>3</Orientation>
    <ActiveMDIGroup>1</ActiveMDIGroup>
    <ActiveMDIGroup>0</ActiveMDIGroup>
    <MDIGroup>
      <Size>37</Size>
      <ActiveTab>14</ActiveTab>
      <Doc>
        <Name>../Inc/PLCfunctions.h</Name>
        <ColumnNumber>26</ColumnNumber>
        <TopLine>120</TopLine>
        <CurrentLine>157</CurrentLine>
        <Folding>1</Folding>
        <ContractedFolders></ContractedFolders>
        <PaneID>0</PaneID>
      </Doc>
      <Size>46</Size>
      <ActiveTab>5</ActiveTab>
      <Doc>
        <Name>../Inc/functions.h</Name>
        <ColumnNumber>35</ColumnNumber>
        <TopLine>39</TopLine>
        <CurrentLine>76</CurrentLine>
        <Folding>1</Folding>
        <ContractedFolders></ContractedFolders>
        <PaneID>0</PaneID>
      </Doc>
      <Doc>
        <Name>../Inc/main.h</Name>
        <ColumnNumber>0</ColumnNumber>
        <TopLine>27</TopLine>
        <CurrentLine>45</CurrentLine>
        <ColumnNumber>39</ColumnNumber>
        <TopLine>24</TopLine>
        <CurrentLine>57</CurrentLine>
        <Folding>1</Folding>
        <ContractedFolders></ContractedFolders>
        <PaneID>0</PaneID>
      </Doc>
      <Doc>
        <Name>../Inc/BSP.h</Name>
        <ColumnNumber>23</ColumnNumber>
        <ColumnNumber>0</ColumnNumber>
        <TopLine>1</TopLine>
        <CurrentLine>24</CurrentLine>
        <CurrentLine>34</CurrentLine>
        <Folding>1</Folding>
        <ContractedFolders></ContractedFolders>
        <PaneID>0</PaneID>
      </Doc>
      <Doc>
        <Name>../Inc/KMachine.h</Name>
        <ColumnNumber>18</ColumnNumber>
        <TopLine>170</TopLine>
        <CurrentLine>207</CurrentLine>
        <Folding>1</Folding>
        <ContractedFolders></ContractedFolders>
        <PaneID>0</PaneID>
      </Doc>
      <Doc>
        <Name>../Src/main.c</Name>
        <ColumnNumber>2</ColumnNumber>
        <TopLine>537</TopLine>
        <CurrentLine>574</CurrentLine>
        <ColumnNumber>6</ColumnNumber>
        <TopLine>401</TopLine>
        <CurrentLine>420</CurrentLine>
        <Folding>1</Folding>
        <ContractedFolders></ContractedFolders>
        <PaneID>0</PaneID>
      </Doc>
      <Doc>
        <Name>../Inc/KLink.h</Name>
        <ColumnNumber>12</ColumnNumber>
        <TopLine>107</TopLine>
        <CurrentLine>108</CurrentLine>
        <Folding>1</Folding>
        <ContractedFolders></ContractedFolders>
        <PaneID>0</PaneID>
      </Doc>
      <Doc>
        <Name>../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_adc.h</Name>
        <ColumnNumber>0</ColumnNumber>
        <TopLine>439</TopLine>
        <CurrentLine>466</CurrentLine>
        <Folding>1</Folding>
        <ContractedFolders></ContractedFolders>
        <PaneID>0</PaneID>
      </Doc>
      <Doc>
        <Name>../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f030x8.h</Name>
        <ColumnNumber>0</ColumnNumber>
        <TopLine>483</TopLine>
        <CurrentLine>496</CurrentLine>
        <Folding>1</Folding>
        <ContractedFolders></ContractedFolders>
        <PaneID>0</PaneID>
      </Doc>
      <Doc>
        <Name>../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c</Name>
        <ColumnNumber>15</ColumnNumber>
        <TopLine>1104</TopLine>
        <CurrentLine>1141</CurrentLine>
        <Folding>1</Folding>
        <ContractedFolders></ContractedFolders>
        <PaneID>0</PaneID>
      </Doc>
      <Doc>
        <Name>../Src/ModbusRTU.h</Name>
        <ColumnNumber>0</ColumnNumber>
        <TopLine>24</TopLine>
        <CurrentLine>54</CurrentLine>
        <Folding>0</Folding>
        <ContractedFolders></ContractedFolders>
        <PaneID>0</PaneID>
      </Doc>
      <Doc>
        <Name>..\Src\KBus.c</Name>
        <ColumnNumber>0</ColumnNumber>
        <TopLine>271</TopLine>
        <CurrentLine>276</CurrentLine>
        <ColumnNumber>22</ColumnNumber>
        <TopLine>10</TopLine>
        <CurrentLine>32</CurrentLine>
        <Folding>1</Folding>
        <ContractedFolders></ContractedFolders>
        <PaneID>0</PaneID>
      </Doc>
      <Doc>
        <Name>../Inc/KBus.h</Name>
        <ColumnNumber>23</ColumnNumber>
        <TopLine>165</TopLine>
        <CurrentLine>172</CurrentLine>
        <ColumnNumber>0</ColumnNumber>
        <TopLine>184</TopLine>
        <CurrentLine>209</CurrentLine>
        <Folding>1</Folding>
        <ContractedFolders></ContractedFolders>
        <PaneID>0</PaneID>
      </Doc>
      <Doc>
        <Name>../Inc/Globaldef.h</Name>
        <ColumnNumber>20</ColumnNumber>
        <TopLine>13</TopLine>
        <CurrentLine>41</CurrentLine>
        <ColumnNumber>8</ColumnNumber>
        <TopLine>19</TopLine>
        <CurrentLine>40</CurrentLine>
        <Folding>1</Folding>
        <ContractedFolders></ContractedFolders>
        <PaneID>0</PaneID>
      </Doc>
      <Doc>
        <Name>../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c</Name>
        <ColumnNumber>39</ColumnNumber>
        <TopLine>378</TopLine>
        <CurrentLine>393</CurrentLine>
        <Name>..\Src\GlobalDef.c</Name>
        <ColumnNumber>23</ColumnNumber>
        <TopLine>18</TopLine>
        <CurrentLine>40</CurrentLine>
        <Folding>1</Folding>
        <ContractedFolders></ContractedFolders>
        <PaneID>0</PaneID>
      </Doc>
      <Doc>
        <Name>..\Src\debug.c</Name>
        <ColumnNumber>9</ColumnNumber>
        <TopLine>52</TopLine>
        <CurrentLine>84</CurrentLine>
        <Folding>1</Folding>
        <ContractedFolders></ContractedFolders>
        <PaneID>0</PaneID>
      </Doc>
    </MDIGroup>
    <MDIGroup>
      <Size>63</Size>
      <ActiveTab>0</ActiveTab>
      <Size>54</Size>
      <ActiveTab>8</ActiveTab>
      <Doc>
        <Name>..\Src\BSP.c</Name>
        <ColumnNumber>0</ColumnNumber>
        <TopLine>115</TopLine>
        <CurrentLine>140</CurrentLine>
        <TopLine>762</TopLine>
        <CurrentLine>816</CurrentLine>
        <Folding>1</Folding>
        <ContractedFolders></ContractedFolders>
        <PaneID>0</PaneID>
      </Doc>
      <Doc>
        <Name>../Src/stm32f0xx_it.c</Name>
        <ColumnNumber>26</ColumnNumber>
        <TopLine>216</TopLine>
        <CurrentLine>252</CurrentLine>
        <Folding>1</Folding>
        <ContractedFolders></ContractedFolders>
        <PaneID>0</PaneID>
      </Doc>
      <Doc>
        <Name>../Src/main.c</Name>
        <ColumnNumber>23</ColumnNumber>
        <TopLine>410</TopLine>
        <CurrentLine>427</CurrentLine>
        <Folding>1</Folding>
        <ContractedFolders></ContractedFolders>
        <PaneID>0</PaneID>
      </Doc>
      <Doc>
        <Name>..\Src\functions.c</Name>
        <ColumnNumber>16</ColumnNumber>
        <TopLine>806</TopLine>
        <CurrentLine>840</CurrentLine>
        <Folding>1</Folding>
        <ContractedFolders></ContractedFolders>
        <PaneID>0</PaneID>
      </Doc>
      <Doc>
        <Name>..\Src\KLink.c</Name>
        <ColumnNumber>33</ColumnNumber>
        <TopLine>365</TopLine>
        <CurrentLine>408</CurrentLine>
        <Folding>1</Folding>
        <ContractedFolders></ContractedFolders>
        <PaneID>0</PaneID>
      </Doc>
      <Doc>
        <Name>..\Src\ModbusRTU.c</Name>
        <ColumnNumber>31</ColumnNumber>
        <TopLine>240</TopLine>
        <CurrentLine>266</CurrentLine>
        <Folding>1</Folding>
        <ContractedFolders></ContractedFolders>
        <PaneID>0</PaneID>
      </Doc>
      <Doc>
        <Name>../Inc/main.h</Name>
        <ColumnNumber>53</ColumnNumber>
        <TopLine>1</TopLine>
        <CurrentLine>20</CurrentLine>
        <Folding>1</Folding>
        <ContractedFolders></ContractedFolders>
        <PaneID>0</PaneID>
      </Doc>
      <Doc>
        <Name>..\Src\KBus.c</Name>
        <ColumnNumber>0</ColumnNumber>
        <TopLine>505</TopLine>
        <CurrentLine>549</CurrentLine>
        <Folding>1</Folding>
        <ContractedFolders></ContractedFolders>
        <PaneID>0</PaneID>
      </Doc>
      <Doc>
        <Name>..\Src\KMachine.c</Name>
        <ColumnNumber>19</ColumnNumber>
        <TopLine>448</TopLine>
        <CurrentLine>480</CurrentLine>
        <Folding>1</Folding>
        <ContractedFolders></ContractedFolders>
        <PaneID>0</PaneID>
      </Doc>
      <Doc>
        <Name>../Inc/debug.h</Name>
        <ColumnNumber>0</ColumnNumber>
        <TopLine>1</TopLine>
        <CurrentLine>15</CurrentLine>
        <Folding>1</Folding>
        <ContractedFolders></ContractedFolders>
        <PaneID>0</PaneID>
MDK-ARM/F030C8T6_Test2.uvoptx
@@ -79,8 +79,8 @@
      </OPTFL>
      <CpuCode>18</CpuCode>
      <DebugOpt>
        <uSim>0</uSim>
        <uTrg>1</uTrg>
        <uSim>1</uSim>
        <uTrg>0</uTrg>
        <sLdApp>1</sLdApp>
        <sGomain>1</sGomain>
        <sRbreak>1</sRbreak>
@@ -106,7 +106,7 @@
        <sDllPa></sDllPa>
        <sDlgDll></sDlgDll>
        <sDlgPa></sDlgPa>
        <sIfile></sIfile>
        <sIfile>.\debug.ini</sIfile>
        <tDll></tDll>
        <tDllPa></tDllPa>
        <tDlgDll></tDlgDll>
@@ -118,7 +118,7 @@
        <SetRegEntry>
          <Number>0</Number>
          <Key>DLGDARM</Key>
          <Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)</Name>
          <Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)</Name>
        </SetRegEntry>
        <SetRegEntry>
          <Number>0</Number>
@@ -282,7 +282,7 @@
      <GroupNumber>2</GroupNumber>
      <FileNumber>3</FileNumber>
      <FileType>1</FileType>
      <tvExp>1</tvExp>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
      <bDave2>0</bDave2>
      <PathWithFileName>..\Src\GlobalDef.c</PathWithFileName>
@@ -422,6 +422,18 @@
      <RteFlg>0</RteFlg>
      <bShared>0</bShared>
    </File>
    <File>
      <GroupNumber>2</GroupNumber>
      <FileNumber>15</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
      <bDave2>0</bDave2>
      <PathWithFileName>..\Src\debug.c</PathWithFileName>
      <FilenameWithoutPath>debug.c</FilenameWithoutPath>
      <RteFlg>0</RteFlg>
      <bShared>0</bShared>
    </File>
  </Group>
  <Group>
@@ -432,7 +444,7 @@
    <RteFlg>0</RteFlg>
    <File>
      <GroupNumber>3</GroupNumber>
      <FileNumber>15</FileNumber>
      <FileNumber>16</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -446,13 +458,13 @@
  <Group>
    <GroupName>Drivers/STM32F0xx_HAL_Driver</GroupName>
    <tvExp>1</tvExp>
    <tvExp>0</tvExp>
    <tvExpOptDlg>0</tvExpOptDlg>
    <cbSel>0</cbSel>
    <RteFlg>0</RteFlg>
    <File>
      <GroupNumber>4</GroupNumber>
      <FileNumber>16</FileNumber>
      <FileNumber>17</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -464,7 +476,7 @@
    </File>
    <File>
      <GroupNumber>4</GroupNumber>
      <FileNumber>17</FileNumber>
      <FileNumber>18</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -476,7 +488,7 @@
    </File>
    <File>
      <GroupNumber>4</GroupNumber>
      <FileNumber>18</FileNumber>
      <FileNumber>19</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -488,7 +500,7 @@
    </File>
    <File>
      <GroupNumber>4</GroupNumber>
      <FileNumber>19</FileNumber>
      <FileNumber>20</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -500,7 +512,7 @@
    </File>
    <File>
      <GroupNumber>4</GroupNumber>
      <FileNumber>20</FileNumber>
      <FileNumber>21</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -512,7 +524,7 @@
    </File>
    <File>
      <GroupNumber>4</GroupNumber>
      <FileNumber>21</FileNumber>
      <FileNumber>22</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -524,7 +536,7 @@
    </File>
    <File>
      <GroupNumber>4</GroupNumber>
      <FileNumber>22</FileNumber>
      <FileNumber>23</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -536,7 +548,7 @@
    </File>
    <File>
      <GroupNumber>4</GroupNumber>
      <FileNumber>23</FileNumber>
      <FileNumber>24</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -548,7 +560,7 @@
    </File>
    <File>
      <GroupNumber>4</GroupNumber>
      <FileNumber>24</FileNumber>
      <FileNumber>25</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -560,7 +572,7 @@
    </File>
    <File>
      <GroupNumber>4</GroupNumber>
      <FileNumber>25</FileNumber>
      <FileNumber>26</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -572,7 +584,7 @@
    </File>
    <File>
      <GroupNumber>4</GroupNumber>
      <FileNumber>26</FileNumber>
      <FileNumber>27</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -584,7 +596,7 @@
    </File>
    <File>
      <GroupNumber>4</GroupNumber>
      <FileNumber>27</FileNumber>
      <FileNumber>28</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -596,7 +608,7 @@
    </File>
    <File>
      <GroupNumber>4</GroupNumber>
      <FileNumber>28</FileNumber>
      <FileNumber>29</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -608,7 +620,7 @@
    </File>
    <File>
      <GroupNumber>4</GroupNumber>
      <FileNumber>29</FileNumber>
      <FileNumber>30</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -620,7 +632,7 @@
    </File>
    <File>
      <GroupNumber>4</GroupNumber>
      <FileNumber>30</FileNumber>
      <FileNumber>31</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -632,7 +644,7 @@
    </File>
    <File>
      <GroupNumber>4</GroupNumber>
      <FileNumber>31</FileNumber>
      <FileNumber>32</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -644,7 +656,7 @@
    </File>
    <File>
      <GroupNumber>4</GroupNumber>
      <FileNumber>32</FileNumber>
      <FileNumber>33</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -656,7 +668,7 @@
    </File>
    <File>
      <GroupNumber>4</GroupNumber>
      <FileNumber>33</FileNumber>
      <FileNumber>34</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -668,7 +680,7 @@
    </File>
    <File>
      <GroupNumber>4</GroupNumber>
      <FileNumber>34</FileNumber>
      <FileNumber>35</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -680,7 +692,7 @@
    </File>
    <File>
      <GroupNumber>4</GroupNumber>
      <FileNumber>35</FileNumber>
      <FileNumber>36</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -692,7 +704,7 @@
    </File>
    <File>
      <GroupNumber>4</GroupNumber>
      <FileNumber>36</FileNumber>
      <FileNumber>37</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -704,7 +716,7 @@
    </File>
    <File>
      <GroupNumber>4</GroupNumber>
      <FileNumber>37</FileNumber>
      <FileNumber>38</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -714,6 +726,18 @@
      <RteFlg>0</RteFlg>
      <bShared>0</bShared>
    </File>
    <File>
      <GroupNumber>4</GroupNumber>
      <FileNumber>39</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
      <bDave2>0</bDave2>
      <PathWithFileName>..\Drivers\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_tim.c</PathWithFileName>
      <FilenameWithoutPath>stm32f0xx_ll_tim.c</FilenameWithoutPath>
      <RteFlg>0</RteFlg>
      <bShared>0</bShared>
    </File>
  </Group>
  <Group>
MDK-ARM/F030C8T6_Test2.uvprojx
@@ -110,8 +110,8 @@
        <DllOption>
          <SimDllName>SARMCM3.DLL</SimDllName>
          <SimDllArguments> -REMAP </SimDllArguments>
          <SimDlgDll>DARMCM1.DLL</SimDlgDll>
          <SimDlgDllArguments>-pCM0</SimDlgDllArguments>
          <SimDlgDll>DARMSTM.DLL</SimDlgDll>
          <SimDlgDllArguments>-pSTM32F030C8</SimDlgDllArguments>
          <TargetDllName>SARMCM3.DLL</TargetDllName>
          <TargetDllArguments> </TargetDllArguments>
          <TargetDlgDll>TARMCM1.DLL</TargetDlgDll>
@@ -454,6 +454,11 @@
              <FileType>1</FileType>
              <FilePath>..\Src\ModbusRTU.c</FilePath>
            </File>
            <File>
              <FileName>debug.c</FileName>
              <FileType>1</FileType>
              <FilePath>..\Src\debug.c</FilePath>
            </File>
          </Files>
        </Group>
        <Group>
@@ -579,6 +584,11 @@
              <FileType>1</FileType>
              <FilePath>../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_utils.c</FilePath>
            </File>
            <File>
              <FileName>stm32f0xx_ll_tim.c</FileName>
              <FileType>1</FileType>
              <FilePath>..\Drivers\STM32F0xx_HAL_Driver\Src\stm32f0xx_ll_tim.c</FilePath>
            </File>
          </Files>
        </Group>
        <Group>
MDK-ARM/JLinkLog.txt
Diff too large
Src/BSP.c
@@ -116,16 +116,16 @@
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
//  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
//  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
    
//#if (XLAT_FREQ == 12)
//  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL8;
//#else
    RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12;
//#endif
#if (XLAT_FREQ == 12)
  RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV3;
#else
  RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV2;
#endif
    RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
@@ -196,7 +196,40 @@
  /* USER CODE END IWDG_Init 2 */
}
/**
  * @brief TIM6 Initialization Function
  * @param None
  * @retval None
  */
void MX_TIM6_Init(void)
{
  /* USER CODE BEGIN TIM6_Init 0 */
  /* USER CODE END TIM6_Init 0 */
  LL_TIM_InitTypeDef TIM_InitStruct = {0};
  /* Peripheral clock enable */
  LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM6);
  /* TIM6 interrupt Init */
  NVIC_SetPriority(TIM6_IRQn, 0);
  NVIC_EnableIRQ(TIM6_IRQn);
  /* USER CODE BEGIN TIM6_Init 1 */
  /* USER CODE END TIM6_Init 1 */
  TIM_InitStruct.Prescaler = 47;
  TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;
  TIM_InitStruct.Autoreload = 999;
  LL_TIM_Init(TIM6, &TIM_InitStruct);
  LL_TIM_DisableARRPreload(TIM6);
  /* USER CODE BEGIN TIM6_Init 2 */
    LL_TIM_EnableIT_UPDATE(TIM6);
  /* USER CODE END TIM6_Init 2 */
}
/* ADC init function */
void MX_ADC_Init(void)
{
@@ -320,7 +353,7 @@
  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
  GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
  GPIO_InitStruct.Alternate = LL_GPIO_AF_0;
  LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
@@ -337,9 +370,51 @@
  NVIC_EnableIRQ(SPI1_IRQn);
  /* USER CODE BEGIN SPI1_Init 1 */
#if (BOARD_TYPE == 12)
  /* USER CODE END SPI1_Init 1 */
  /* SPI1 parameter configuration*/
  SPI_InitStruct.TransferDirection = LL_SPI_FULL_DUPLEX;
  SPI_InitStruct.Mode = LL_SPI_MODE_SLAVE;
  SPI_InitStruct.DataWidth = LL_SPI_DATAWIDTH_8BIT;
  SPI_InitStruct.ClockPolarity = LL_SPI_POLARITY_LOW; //LL_SPI_POLARITY_LOW;
  SPI_InitStruct.ClockPhase = LL_SPI_PHASE_2EDGE ; //LL_SPI_PHASE_1EDGE;
  SPI_InitStruct.NSS = LL_SPI_NSS_SOFT;
  SPI_InitStruct.BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV4;
  SPI_InitStruct.BitOrder = LL_SPI_LSB_FIRST;
  SPI_InitStruct.CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE;
  SPI_InitStruct.CRCPoly = 7;
  LL_SPI_Init(SPI1, &SPI_InitStruct);
  LL_SPI_SetStandard(SPI1, LL_SPI_PROTOCOL_MOTOROLA);
  LL_SPI_DisableNSSPulseMgt(SPI1);
  LL_SPI_SetRxFIFOThreshold(SPI1,LL_SPI_RX_FIFO_TH_QUARTER);
//  LL_SPI_EnableNSSPulseMgt(SPI1);
  /* USER CODE BEGIN SPI1_Init 2 */
#elif (BOARD_TYPE == 13)
  SPI_InitStruct.TransferDirection = LL_SPI_FULL_DUPLEX;
  SPI_InitStruct.Mode = LL_SPI_MODE_MASTER;
  SPI_InitStruct.DataWidth = LL_SPI_DATAWIDTH_8BIT;
  SPI_InitStruct.ClockPolarity = LL_SPI_POLARITY_HIGH; //LL_SPI_POLARITY_LOW;
  SPI_InitStruct.ClockPhase = LL_SPI_PHASE_2EDGE ; //LL_SPI_PHASE_1EDGE;
  SPI_InitStruct.NSS = LL_SPI_NSS_SOFT;
  SPI_InitStruct.BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV2;
  SPI_InitStruct.BitOrder = LL_SPI_MSB_FIRST;
  SPI_InitStruct.CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE;
  SPI_InitStruct.CRCPoly = 7;
  LL_SPI_Init(SPI1, &SPI_InitStruct);
  LL_SPI_SetStandard(SPI1, LL_SPI_PROTOCOL_MOTOROLA);
  LL_SPI_SetRxFIFOThreshold(SPI1,LL_SPI_RX_FIFO_TH_QUARTER);
//  LL_SPI_EnableNSSPulseMgt(SPI1);
#else
  SPI_InitStruct.TransferDirection = LL_SPI_FULL_DUPLEX;
  SPI_InitStruct.Mode = LL_SPI_MODE_MASTER;
  SPI_InitStruct.DataWidth = LL_SPI_DATAWIDTH_8BIT;
@@ -353,9 +428,12 @@
  LL_SPI_Init(SPI1, &SPI_InitStruct);
  LL_SPI_SetStandard(SPI1, LL_SPI_PROTOCOL_MOTOROLA);
  LL_SPI_SetRxFIFOThreshold(SPI1,LL_SPI_RX_FIFO_TH_QUARTER);
  LL_SPI_EnableNSSPulseMgt(SPI1);
  /* USER CODE BEGIN SPI1_Init 2 */
#endif
    LL_SPI_Enable(SPI1);
  /* USER CODE END SPI1_Init 2 */
}
@@ -604,11 +682,12 @@
  LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA);
  LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOB);
  LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOC);
  LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOF);
    /**/
  /**/
    GPIO_InitStruct.Pin = LL_GPIO_PIN_6 ; //|LL_GPIO_PIN_7;
    GPIO_InitStruct.Pin = LL_GPIO_PIN_6 |LL_GPIO_PIN_7;
  GPIO_InitStruct.Mode = LL_GPIO_MODE_INPUT;
  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
  GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
@@ -645,26 +724,29 @@
    if (GetBoardType()==2)
    {
        GPIO_InitStruct.Pin = LL_GPIO_PIN_3|LL_GPIO_PIN_4|LL_GPIO_PIN_5|LL_GPIO_PIN_6|LL_GPIO_PIN_7|
                                                    LL_GPIO_PIN_12|LL_GPIO_PIN_13|LL_GPIO_PIN_15;
        LL_GPIO_PIN_12|LL_GPIO_PIN_13|LL_GPIO_PIN_15;
        
    }
    else if (GetBoardType()==9 || GetBoardType()==10 )
    {
        GPIO_InitStruct.Pin = LL_GPIO_PIN_3|LL_GPIO_PIN_4|LL_GPIO_PIN_5|LL_GPIO_PIN_6|LL_GPIO_PIN_7|
                                                    LL_GPIO_PIN_11|LL_GPIO_PIN_1|LL_GPIO_PIN_2|LL_GPIO_PIN_10|
                                                    LL_GPIO_PIN_12|LL_GPIO_PIN_13|LL_GPIO_PIN_15;
        GPIO_InitStruct.Pin = LL_GPIO_PIN_3|LL_GPIO_PIN_5|LL_GPIO_PIN_6|LL_GPIO_PIN_7|
        LL_GPIO_PIN_11|LL_GPIO_PIN_1|LL_GPIO_PIN_2|LL_GPIO_PIN_10|
        LL_GPIO_PIN_12|LL_GPIO_PIN_13|LL_GPIO_PIN_15;
    }
    else if ( GetBoardType() == 11 )
    {    
        GPIO_InitStruct.Pin = LL_GPIO_PIN_3|LL_GPIO_PIN_4|LL_GPIO_PIN_5|LL_GPIO_PIN_6|LL_GPIO_PIN_7|
                                                    LL_GPIO_PIN_2|LL_GPIO_PIN_10|
                                                    LL_GPIO_PIN_12|LL_GPIO_PIN_13|LL_GPIO_PIN_15;
    } else
        LL_GPIO_PIN_2|LL_GPIO_PIN_10|LL_GPIO_PIN_12|LL_GPIO_PIN_13|LL_GPIO_PIN_15;
    } else    if (BOARD_TYPE == 12)
    {    
        GPIO_InitStruct.Pin = LL_GPIO_PIN_6|LL_GPIO_PIN_7|
        LL_GPIO_PIN_10|LL_GPIO_PIN_11|LL_GPIO_PIN_12|LL_GPIO_PIN_13|LL_GPIO_PIN_14|LL_GPIO_PIN_15;
    } else
    {
        GPIO_InitStruct.Pin = LL_GPIO_PIN_3|LL_GPIO_PIN_4|LL_GPIO_PIN_5|LL_GPIO_PIN_6|LL_GPIO_PIN_7|
                                                    LL_GPIO_PIN_0|LL_GPIO_PIN_1|LL_GPIO_PIN_2|LL_GPIO_PIN_10|
                                                    LL_GPIO_PIN_12|LL_GPIO_PIN_13|LL_GPIO_PIN_15;
    }
        LL_GPIO_PIN_0|LL_GPIO_PIN_1|LL_GPIO_PIN_2|LL_GPIO_PIN_10|
        LL_GPIO_PIN_12|LL_GPIO_PIN_13|LL_GPIO_PIN_15;
    }
    
  GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
@@ -672,9 +754,7 @@
  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
  LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  LL_GPIO_SetOutputPin(GPIOB, LL_GPIO_PIN_3);
  GPIO_InitStruct.Pin = LL_GPIO_PIN_13|LL_GPIO_PIN_14;
  GPIO_InitStruct.Pin = LL_GPIO_PIN_13|LL_GPIO_PIN_14|LL_GPIO_PIN_15;
  GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
  GPIO_InitStruct.Speed = LL_GPIO_SPEED_LOW;
  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
@@ -685,5 +765,54 @@
//    PWR_BackupAccessCmd( ENABLE );/* ????RTC??????*/
//    RCC_LSEConfig( RCC_LSE_OFF ); /* ????????,PC14+PC15??????IO*/
 //   BKP_TamperPinCmd(DISABLE);  /* ????????,PC13??????IO*/
#if (BORAD_TYPE ==12)
    GPIO_InitStruct.Pin = LL_GPIO_PIN_4|LL_GPIO_PIN_5|LL_GPIO_PIN_6|LL_GPIO_PIN_7;
  GPIO_InitStruct.Mode = LL_GPIO_MODE_INPUT;
  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
  GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
  LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_8);
    GPIO_InitStruct.Pin = LL_GPIO_PIN_9 ;                                //RST_PIN in
  GPIO_InitStruct.Mode = LL_GPIO_MODE_INPUT;
  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
  GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
  LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    GPIO_InitStruct.Pin = SYN_PIN ;                                //SYN_PIN Pin in
  GPIO_InitStruct.Mode = LL_GPIO_MODE_INPUT;
  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
  GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
  LL_GPIO_Init(SYN_PORT, &GPIO_InitStruct);
    GPIO_InitStruct.Pin = ACK_PIN ;                                //ACK_PIN Pin out
  GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
  GPIO_InitStruct.Pull = LL_GPIO_OUTPUT_PUSHPULL;
  LL_GPIO_Init(ACK_PORT, &GPIO_InitStruct);
  GPIO_InitStruct.Pin = LL_GPIO_PIN_7 ;                                //485DE Pin out
  GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
  GPIO_InitStruct.Pull = LL_GPIO_OUTPUT_PUSHPULL;
  LL_GPIO_Init(GPIOF, &GPIO_InitStruct);
    GPIO_InitStruct.Pin = OE_PIN ;                            // OE Pin in
  GPIO_InitStruct.Mode = LL_GPIO_MODE_INPUT;
  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
  GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
  LL_GPIO_Init(OE_PORT, &GPIO_InitStruct);
#elif (BOARD_TYPE == 13)
  GPIO_InitStruct.Pin = LL_GPIO_PIN_15 ;
  GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
  GPIO_InitStruct.Pull = LL_GPIO_OUTPUT_PUSHPULL;
  LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
#endif
}
Src/GlobalDef.c
@@ -36,6 +36,7 @@
volatile int SysConfigs;
/*
int GetBoardType(void )
{
    int BoardType=0;
@@ -47,7 +48,7 @@
    BoardType = BOARD_TYPE;
    return BoardType;
}
*/
/*
int sintab[256]={
     0,    1,   3,   4,   6,   7,   9,  10,  12,  14,  15,  17,  18,  20,  21,  23, 
Src/KBus.c
@@ -7,8 +7,9 @@
#include "KBus.h"
#include "functions.h"
#include "string.h"
#include "stm32f0xx.h"
int bMaster=0,bSlave=0;
unsigned char bMaster=0,bSlave=0,bRepeater=0;;
unsigned char PacketBuf1[128];
unsigned char PacketBuf2[128];
@@ -16,25 +17,35 @@
unsigned char BufferIn[16]={0};
unsigned char BufferOut[16]={0};
stChnStat ChnStats[8];
stChnStat ChnStats[9];
unsigned char nAddr=0;
unsigned char nChilds;
int ChildStat[16];
unsigned char nCurPollId=0;
unsigned char nSeq=0;
volatile int MasterRecved=1;
volatile int MasterRecvOK=1;
volatile unsigned char MasterRecved=1;
volatile unsigned char MasterRecvOK=1;
volatile int SlaveRecved=1;
volatile unsigned char SlaveRecved=1;
unsigned int SendTimeuS=0;
volatile int RecvTimeuS=0;
int DelayuS=0;
int MaxDelayuS=0;
int ThisuS;
volatile unsigned int nSlaveTick=0;
int Clk3=0;
int SendTime,Latancy,LatancyClk,SendClk;
volatile int nCount2=0;
int TimeOutCount=0;
int LastCircleStartTime=0;
int CircleTime=0;
unsigned char Datas[128];
volatile int PacketLength = 0;
unsigned char BCC(void * pData, int nSize)
{
@@ -46,6 +57,137 @@
    }
    return k;    
}
int RepeaterFunc(int nChn)
{
        KMem.WY[0]=KMem.WX[0];
        if ((KMem.nRunCount &0x7f) == 88)
        {
            nCount2++;
            ToggleRunLed();
//        int len1=sprintf(str1,"%d %d Cfg %02X  Input %02X  \r\n",nCount,nCount2,EffJumperSW,MyKeyStat1);
//        PutStr(str1,len1);
        }
    return 0;
}
int MasterFunc(int nChn)
{
        uint32_t tick1=HAL_GetTick();
        uint32_t thisuS=GetuS();
            int len1=0;
            if ((MasterRecved && MasterRecvOK && thisuS-SendTimeuS>50) || thisuS-SendTimeuS>1500u)
            {
                if (!MasterRecvOK)
                {
                    TimeOutCount++;
                    Uart2Stat.TimeOutErr++;
                    ChnStats[nCurPollId].LostPackets++;
                    ChnStats[nCurPollId].CtnLstPkts++;
                    if (!MasterRecved) {ChnStats[nCurPollId].TimeOutErr++;}
                    if (ChnStats[nCurPollId].CtnLstPkts>ChnStats[nCurPollId].MaxCtnLstPkts)
                    {ChnStats[nCurPollId].MaxCtnLstPkts=ChnStats[nCurPollId].CtnLstPkts;}
                    if (ChnStats[nCurPollId].CtnLstPkts>3)
                    {
                        ChnStats[nCurPollId].Stat=0;
                        KMem.ErrStat=200;
                        {BufferIn[nCurPollId]=0;}
                    }
                //    LL_GPIO_SetOutputPin(GPIOA,LL_GPIO_PIN_7);
                }else
                {
                    ChnStats[nCurPollId].Stat=1;
                    KMem.RunStat=100;
                }
                nCurPollId ++;
                if (nCurPollId > nChilds)
                {
                    CircleTime=thisuS-LastCircleStartTime;
                    LastCircleStartTime=thisuS;
                    nSeq++;
                    nCurPollId=1;
                }
#if (BOARD_TYPE == 12)
                if (KMRunStat.WorkMode==0)
                {
                //    KMem.WX[0]= GetInput();
                //    KMem.WY[1]=KMem.WX[0]&0xff;
                //    KMem.WY[2]=(KMem.WX[0]>>8)&0xff;
                }
            //    BufferOut[1]=KMem.WY[1];
            //    BufferOut[2]=KMem.WY[2];
#else
                if (KMRunStat.WorkMode==0)
                {
                    KMem.WX[0]= GetInput();
                    KMem.WY[1]=KMem.WX[0]&0xff;
                    KMem.WY[2]=(KMem.WX[0]>>8)&0xff;
                }
                BufferOut[1]=KMem.WY[1];
                BufferOut[2]=KMem.WY[2];
#endif
                Datas[0]=BufferOut[nCurPollId];
                Datas[1]=BufferOut[nCurPollId+1];;
                Datas[2]=ChnStats[nCurPollId].Stat;
                Datas[3]=0;
                Datas[4]=tick1&0xff;
                Datas[5]=(tick1>>8)&0xff;
                Datas[6]=(tick1>>16)&0xff;
                Datas[7]=(tick1>>24)&0xff;
                SendTimeuS=thisuS;
                len1=MakePacket((pPacket)PacketBuf1,0,nCurPollId,cmdExChgData,nSeq,8,Datas);
                SendPacket(nChn, (pPacket)PacketBuf1, len1);
                ChnStats[nCurPollId].SendPackets++;
                ChnStats[nCurPollId].SendTimeInterval=SendTimeuS-ChnStats[nCurPollId].LastSentTimeuS;
                ChnStats[nCurPollId].LastSentTimeuS=SendTimeuS;
                PacketLength = len1;
                SendTime=tick1;
                MasterRecved=0;
                MasterRecvOK=0;
            //    LL_GPIO_TogglePin(GPIOA,LL_GPIO_PIN_5);
                //ToggleErrLed();
//                ToggleOut8();
            }
            Clk3=SysTick->VAL;
        //    LL_GPIO_TogglePin(GPIOA,LL_GPIO_PIN_4);
    //    HAL_Delay(1);
    return 0;
}
int SlaveFunc(int nChn)
{
        int ThisuS=GetuS();
        int thisRecvTime=RecvTimeuS;
        if (SlaveRecved)
        {
            KMem.RunStat=8000;
            SlaveRecved=0;
        }else if ((ThisuS - thisRecvTime) >12000u)
        {
            KMem.ErrStat=8000;
            KMem.SDD[17]=1;
            KMem.SDD[18]=ThisuS;
            KMem.SDD[19]=RecvTimeuS;
        }else if ( ThisuS > (thisRecvTime + 12000u))
        {
            KMem.ErrStat=8000;
            KMem.SDD[17]=2;
            KMem.SDD[18]=ThisuS;
            KMem.SDD[19]=RecvTimeuS;
        }
    return 0;
}
int MakePacket(pPacket p1,unsigned char src, uchar dst, uchar nType,unsigned char nSEQ, unsigned char DataLen,void * pData )
{
    p1->Sign=StartSign;
@@ -152,7 +294,7 @@
    return PacketLenth;
}
int CheckPacket(pPacket p1,int nLen1)
int CheckPacket(int nChn, pPacket p1, int nLen1)
{
    if (p1->Sign != StartSign)
    {
@@ -191,7 +333,7 @@
    return 0;
}
int SlaveCheckPacket(pPacket p1,int nLen1)
int SlaveCheckPacket(int nChn, pPacket p1, int nLen1)
{
    if (p1->Sign != StartSign)
    {
@@ -230,7 +372,7 @@
    return 0;
}
int MasterParsePacket(pPacket p1,int Len1)
int MasterParsePacket(int nChn, pPacket p1, int Len1)
{
        int DataLen=p1->PacketLen;
@@ -248,7 +390,7 @@
            case cmdPing:
                BufferIn[ChildId]=p1->data[0];
                PacketLen=MakePacket(p2,0,nCurPollId,cmdPingReply,p1->nSEQ,DataLen,p1->data);
                SendPacket2(p2,PacketLen);
                SendPacket(nChn, p2, PacketLen);
                break;
            case cmdPingReply:
                DelayuS=ThisuS-SendTimeuS;
@@ -283,18 +425,28 @@
                //memcpy(DispBuf,p1->data+2,8);
                p1->data[0]=BufferOut[0];
                PacketLen=MakePacket(p2,nAddr,0,cmdExChgDataReply,p1->nSEQ,DataLen,p1->data);
                SendPacket2(p2,PacketLen);
                SendPacket(nChn, p2, PacketLen);
                break;
            case cmdExChgDataReply:
                DelayuS=ThisuS-SendTimeuS;
                if (DelayuS > MaxDelayuS) MaxDelayuS = DelayuS;
#if (BOARD_TYPE==12)
                BufferIn[ChildId]=p1->data[0];
                KMem.WXB[ChildId-1]=BufferIn[ChildId];
                if (KMRunStat.WorkMode==0) {
                //    KMem.WY[0]= KMem.WX[1]+(KMem.WX[2]<<8)    ;
                //    PutOutput (KMem.WY[0]);
                }
#else
                BufferIn[ChildId]=p1->data[0];
                KMem.WX[ChildId]=BufferIn[ChildId];
                if (KMRunStat.WorkMode==0) {    
                    KMem.WY[0]= KMem.WX[1]+(KMem.WX[2]<<8)    ;
                    PutOutput (KMem.WY[0]);
                }
#endif
                //RunStat=100;
                ChnStats[nCurPollId].CtnLstPkts=0;
                ChnStats[nCurPollId].Delay=DelayuS;
@@ -321,7 +473,7 @@
    return 0;
}
unsigned char nClientDataIndex=0;
int SlaveParsePacket(pPacket p1,int Len1)
int SlaveParsePacket(int nChn, pPacket p1, int Len1)
{
    Uart2Stat.OKPacket++;                
    int DataLen=p1->PacketLen;    
@@ -355,7 +507,7 @@
                RecvTimeuS=ThisuS;
                PacketLen=MakePacket(p2,nAddr,0,cmdPingReply,p1->nSEQ,DataLen,p1->data);
                ChnStats[0].ClientSendPkts++;
                SendPacket2(p2,PacketLen);
                SendPacket(nChn, p2, PacketLen);
                break;
            case cmdPingReply:
                break;
@@ -367,7 +519,7 @@
                //memcpy(DispBuf,p1->data,DataLen);
                PacketLen=MakePacket(p2,1,0,cmdWriteReply,p1->nSEQ,0,0);
                ChnStats[0].ClientSendPkts++;
                SendPacket2(p2,PacketLen);
                SendPacket(nChn, p2, PacketLen);
                break;
            case cmdWriteReply:
                break;
@@ -377,21 +529,24 @@
                break;
            case cmdExChgData:
                BufferIn[0]=p1->data[0];
                PutOutput(BufferIn[0]);
                PutOutput(BufferIn[0]);
                nSlaveTick=p1->data[4]+(p1->data[5]<<8);//+(p1->data[6]<<16)+(p1->data[7]<<24);
#if (BOARD_TYPE == 12)
            //    PutOutput(BufferIn[0]);
                //PutOutput(outputvalue);
                //memcpy(DispBuf,p1->data+2,8);
                nIndex=nClientDataIndex;
        //        ChnStats[0].ClientDatas[7]++;
//                BufferOut[0]=GetInput();
//                BufferOut[0]=GetInput();
//                BufferOut[0]=GetInput();
//                BufferOut[0]=GetInput();
        //        BufferOut[0]=GetInput();
#else
                PutOutput(BufferIn[0]);
                //PutOutput(outputvalue);
                //memcpy(DispBuf,p1->data+2,8);
                nIndex=nClientDataIndex;
        //        ChnStats[0].ClientDatas[7]++;
//                BufferOut[0]=GetInput();
                BufferOut[0]=GetInput();
#endif
                p1->data[0]=BufferOut[0];
                p1->data[3]=nIndex;
                p1->data[4]=ChnStats[0].ClientDatas[nIndex];
@@ -402,7 +557,7 @@
                if (nClientDataIndex >= 10) { nClientDataIndex=0;}
                PacketLen=MakePacket(p2,nAddr,0,cmdExChgDataReply,p1->nSEQ,DataLen,p1->data);
                ChnStats[0].ClientSendPkts++;
                SendPacket2(p2,PacketLen);
                SendPacket(nChn, p2, PacketLen);
                break;
            case cmdExChgDataReply:
                break;
@@ -423,32 +578,32 @@
    }    
    return 0;
}
int ParsePacket(pPacket p1,int Len1)
int ParsePacket(int nChn, pPacket p1, int Len1)
{
    ThisuS=GetuS();
    int Result=0;
    if (bMaster)
    {
            MasterRecved=1;
            Result=CheckPacket(p1,Len1);
            Result=CheckPacket(nChn, p1, Len1);
            if (Result != S_OK)
            {
                return Result;
            }
            MasterRecvOK=1;
            Result=MasterParsePacket(p1,Len1);
            Result=MasterParsePacket(nChn, p1, Len1);
            return Result;
    }
    if (bSlave)
    {
            ChnStats[0].ClientRecvPkts++;
            Result=SlaveCheckPacket(p1,Len1);
            Result=SlaveCheckPacket(nChn, p1, Len1);
            if (Result != S_OK)
            {
                return Result;
            }
            ChnStats[0].ClientTimeOutErr=KMem.RunStat;
            Result=SlaveParsePacket(p1,Len1);
            Result=SlaveParsePacket(nChn, p1, Len1);
            return Result;
    }
    //int len1=p1->PacketLen;
Src/KLink.c
@@ -76,7 +76,7 @@
    return PacketLenth;
}
int KLCheckPacket(void * pBuf,int nLen1)
int KLCheckPacket(int nChn, void * pBuf, int nLen1)
{
    pKLReqPktHdr p1 = (pKLReqPktHdr) pBuf;
    if (p1->ReqStSgn != KLSignStart)
@@ -125,7 +125,7 @@
    else {ResetBit(pW, bitAddr);}
}
int KLParseReqPacket(void * pBuf,int Len1)
int KLParseReqPacket(int nChn, void * pBuf, int Len1)
{
    pKLReqPktHdr p1 = (pKLReqPktHdr)pBuf;
@@ -155,7 +155,7 @@
//                KLBufferIn[0]=p1->Params[0];
//                p1->Params[0]=KLBufferOut[0];
                PacketLen=KLMakeRplyPacket(p2,nDstHost,nKLStatus.StatByte,KLCmdPing,DataLen,p1->Params);
                SendPacket1(p2,PacketLen);
                SendPacket(nChn, p2, PacketLen);
                break;
//            case KLCmdPingReply:
//                break;
@@ -163,24 +163,24 @@
                //if (nDataType == KLDataTypeDT)
                DataLen= sizeof(KMInfoBlock);
                PacketLen=KLMakeRplyPacket(p2,nDstHost,nKLStatus.StatByte,p1->nCMD,DataLen,&KMInfoBlock);
                SendPacket1(p2,PacketLen);
                SendPacket(nChn, p2, PacketLen);
                break;
            case KLCmdGetUid:
                //if (nDataType == KLDataTypeDT)
                DataLen= 12;
                PacketLen=KLMakeRplyPacket(p2,nDstHost,nKLStatus.StatByte,p1->nCMD,DataLen,(uint32_t *)UID_BASE);
                SendPacket1(p2,PacketLen);
                SendPacket(nChn, p2, PacketLen);
                break;
            case KLCmdGetSN:
                //if (nDataType == KLDataTypeDT)
                DataLen= 4;
                PacketLen=KLMakeRplyPacket(p2,nDstHost,nKLStatus.StatByte,p1->nCMD,DataLen,&((pFactoryData)FACTORY_DATA_BASE)->SN1);
                SendPacket1(p2,PacketLen);
                SendPacket(nChn, p2, PacketLen);
                break;
            case KLCmdGetFactoryData:
                DataLen= sizeof(stFactoryData);
                PacketLen=KLMakeRplyPacket(p2,nDstHost,nKLStatus.StatByte,p1->nCMD,DataLen,(pFactoryData)FACTORY_DATA_BASE);
                SendPacket1(p2,PacketLen);
                SendPacket(nChn, p2, PacketLen);
                break;
            case KLCmdWriteFactoryData:
                nAddr=p1->Params[0]+ (p1->Params[1]<<8);
@@ -190,7 +190,7 @@
                {KLPacketBuf2[i]=p1->Params[4+i];}
                WriteFactoryData(KLPacketBuf2, DataLen);
                PacketLen=KLMakeRplyPacket(p2,nDstHost,nKLStatus.StatByte,p1->nCMD,0,0);
                SendPacket1(p2,PacketLen);
                SendPacket(nChn, p2, PacketLen);
                break;
            
            case KLCmdRead:
@@ -214,7 +214,7 @@
                else                {                    pData=KLBufferOut+nAddr;                }
                
                PacketLen=KLMakeRplyPacket(p2,nDstHost,nKLStatus.StatByte,p1->nCMD,DataLen,pData);
                SendPacket1(p2,PacketLen);
                SendPacket(nChn, p2, PacketLen);
                
                break;
//            case KLCmdReadReply:
@@ -243,7 +243,7 @@
                        
                memcpy(pData,p1->Params+4,DataLen);                    
                PacketLen=KLMakeRplyPacket(p2,nDstHost,nKLStatus.StatByte,p1->nCMD,0,0);
                SendPacket1(p2,PacketLen);
                SendPacket(nChn, p2, PacketLen);
                break;
//            case KLCmdWriteReply:
//                break;
@@ -263,7 +263,7 @@
                else if (nDataType == KLCoilTypeLR) { rData[0] = 0;}
                else {rData[0]=0;}
                PacketLen=KLMakeRplyPacket(p2,nDstHost,nKLStatus.StatByte,KLCmdRead1Bit,DataLen,rData);
                SendPacket1(p2,PacketLen);
                SendPacket(nChn, p2, PacketLen);
                break;
            case KLCmdWrite1Bit:
                nAddr=p1->Params[0]+ (p1->Params[1]<<8);
@@ -279,7 +279,7 @@
                else {rData[0]=0;}
                DataLen=0;
                PacketLen=KLMakeRplyPacket(p2,nDstHost,nKLStatus.StatByte,KLCmdWrite1Bit,DataLen,rData);
                SendPacket1(p2,PacketLen);
                SendPacket(nChn, p2, PacketLen);
                break;
            case KLCmdReadBits:
                break;
@@ -301,7 +301,7 @@
                        pData = (unsigned short *)ALT_PRG_BASE + nAddr;
                 }
                PacketLen=KLMakeRplyPacket(p2,nDstHost,nKLStatus.StatByte,p1->nCMD,DataLen,pData);
                SendPacket1(p2,PacketLen);
                SendPacket(nChn, p2, PacketLen);
                
                break;
            case KLCmdStartProgram:
@@ -311,7 +311,7 @@
                if (PLCMem.bPLCRunning) PLCMem.bPLCRunning=0;
            
                PacketLen=KLMakeRplyPacket(p2,nDstHost,nKLStatus.StatByte,KLCmdStartProgram,0,0);
                SendPacket1(p2,PacketLen);
                SendPacket(nChn, p2, PacketLen);
                
                break;
            case KLCmdWriteProgram:
@@ -326,7 +326,7 @@
                DataLen=4;
                *((int *)(&rData[0]))=(long)(p1->Params+4);
                PacketLen=KLMakeRplyPacket(p2,nDstHost,nKLStatus.StatByte,KLCmdWriteProgram,0,0);
                SendPacket1(p2,PacketLen);
                SendPacket(nChn, p2, PacketLen);
                break;
            case KLCmdFinishProgram:
                nAddr=p1->Params[0]+ (p1->Params[1]<<8);        //Program Size;
@@ -339,75 +339,75 @@
//                KLBufferIn[0]=p1->Params[0];
//                p1->Params[0]=KLBufferOut[0];
                PacketLen=KLMakeRplyPacket(p2,nDstHost,nKLStatus.StatByte,KLCmdFinishProgram,0,0);
                SendPacket1(p2,PacketLen);
                SendPacket(nChn, p2, PacketLen);
                break;
            case KLCmdReadRunStat:
                DataLen= sizeof(stRunStat);
                pData=&KMRunStat;
                PacketLen=KLMakeRplyPacket(p2,nDstHost,nKLStatus.StatByte,p1->nCMD,DataLen,pData);
                SendPacket1(p2,PacketLen);
                SendPacket(nChn, p2, PacketLen);
                break;
            case KLCmdSaveSysCfg:
                WriteSysCfgToFlash(&KMSysCfg);
                PacketLen=KLMakeRplyPacket(p2,nDstHost,nKLStatus.StatByte,KLCmdSaveSysCfg,0,0);
                SendPacket1(p2,PacketLen);
                SendPacket(nChn, p2, PacketLen);
                break;
            case     KLCmdSaveRunStat:
                SaveRunStat(&KMRunStat);
                PacketLen=KLMakeRplyPacket(p2,nDstHost,nKLStatus.StatByte,KLCmdSaveRunStat,0,0);
                SendPacket1(p2,PacketLen);
                SendPacket(nChn, p2, PacketLen);
                break;
            case KLCmdGetEventLogCount:
                DataLen= 4;
                pData=&KMem.nEventCount;
                PacketLen=KLMakeRplyPacket(p2,nDstHost,nKLStatus.StatByte,p1->nCMD,DataLen,pData);
                SendPacket1(p2,PacketLen);
                SendPacket(nChn, p2, PacketLen);
                break;
            case KLCmdGetEventLog:
                nAddr=p1->Params[0]+ (p1->Params[1]<<8);
                DataLen= p1->Params[2] * sizeof(stEventLog);
                pData=GetEventLogAddr(nAddr);
                PacketLen=KLMakeRplyPacket(p2,nDstHost,nKLStatus.StatByte,p1->nCMD,DataLen,pData);
                SendPacket1(p2,PacketLen);
                SendPacket(nChn, p2, PacketLen);
                break;
            case KLCmdClearEventLog:
                ClearEventLog();
                PacketLen=KLMakeRplyPacket(p2,nDstHost,nKLStatus.StatByte,KLCmdClearEventLog,0,0);
                SendPacket1(p2,PacketLen);
                SendPacket(nChn, p2, PacketLen);
                break;            
            default:
            DataLen=1;
            rData[0]=KL_UNKNOWN;
            PacketLen=KLMakeRplyPacket(p2,nKLAddr,nKLStatus.StatByte,KLCmdErrRply,DataLen,rData);
            SendPacket1(p2,PacketLen);
            SendPacket(nChn, p2, PacketLen);
                break;        
        }
    }    
    return 0;
}
int KLParsePacket(void * pBuf,int Len1)
int KLParsePacket(int nChn, void * pBuf, int Len1)
{
    pKLReqPktHdr p1 = (pKLReqPktHdr)pBuf;
    KLThisuS=GetuS();
    pKLRplyPktHdr p2=(pKLRplyPktHdr)KLPacketBuf2;
//    pKLReqPktHdr p1 = (pKLReqPktHdr)pBuf;
//    KLThisuS=GetuS();
//    pKLRplyPktHdr p2=(pKLRplyPktHdr)KLPacketBuf2;
    int PacketLen=Len1;
    int Result=KLCheckPacket(p1,Len1);
    int Result=KLCheckPacket(nChn, pBuf, Len1);
    if (Result != KL_OK)
    {
        int DataLen=4;
        char rData[4];
        rData[0]=Result;
        
        PacketLen=KLMakeRplyPacket(p2,nKLAddr,nKLStatus.StatByte,KLCmdErrRply,DataLen,rData);
        PacketLen=KLMakeRplyPacket(KLPacketBuf2,nKLAddr,nKLStatus.StatByte,KLCmdErrRply,DataLen,rData);
//        PacketLen=KLMakePacket(p2,0,nAddr,cmdKLPing,p1->nSEQ,DataLen,rData);
        SendPacket1(p2,PacketLen);
        SendPacket(nChn, KLPacketBuf2, PacketLen);
        return Result;
    }
//    if (bMaster) Result=ParseMasterPacket(p1,Len1);
//    memcpy(KLPacketBuf2,pBuf,Len1);
//    SendPacket1(p2,PacketLen);
//    SendPacket(nChn, KLPacketBuf2, PacketLen);
    
    Result=KLParseReqPacket(p1,Len1);
    Result=KLParseReqPacket(nChn, pBuf, Len1);
    
    //int len1=p1->PacketLen;
//    if (p1->DstHost!=255&&p1->DstHost!=2) return -3;
Src/KMachine.c
@@ -472,6 +472,11 @@
unsigned int nEventMaxSeq=0;
int nEventNextSpace;
int nMaxCurTime=0;
volatile int PowerDownEvent=0;
volatile int OldPowerDownEvent=0;
volatile int OldPowerDownEventTime=0;
int CheckEventLog()
{
    unsigned int nMinEventSeq=999999999;
Src/ModbusRTU.c
@@ -66,7 +66,7 @@
    0xA001, 0x6C00, 0x7800, 0xB401, 0x5000, 0x9C01, 0x8801, 0x4400 
};
uint16_t crc16tablefast(uint8_t *ptr, uint16_t len)
uint16_t crc16tablefast(const uint8_t *ptr, uint16_t len)
{
    uint16_t crc = 0xffff; 
    uint16_t i;
@@ -84,7 +84,7 @@
//**********************************************************************
//******************  Modbus slave  ************************************
int ModBusSlaveCheckPkg(void *ptr, uint16_t len1)
int ModBusSlaveCheckPkg(int nChn, void *ptr, uint16_t len1)
{
    if (len1 <=4) return -1;        //包长
    pModBusRTUReqPkg pPkg = (pModBusRTUReqPkg) ptr;
@@ -133,10 +133,10 @@
uint8_t Pkgbuf[128];
int ModBusSlaveParsePkg( void *ptr, uint16_t len)
int ModBusSlaveParsePkg(int nChn, void *ptr, uint16_t len)
{
    uchar * bptr = (uchar *) ptr;
    int err=ModBusSlaveCheckPkg(ptr,len);
    int err=ModBusSlaveCheckPkg(nChn, ptr, len);
    if (err) return -1;
    pModBusRTUReqPkg pPkg = (pModBusRTUReqPkg) ptr;
    uint8_t DstHost=pPkg->Dst;
@@ -170,7 +170,7 @@
                {
                    Addr1=(Addr&0xff0)>>4;
                    bitAddr=Addr&0xf;
                    if (GetBitValue( KMem.WR[Addr1],bitAddr))
                    if (GetBitValue( KMem.WY[Addr1],bitAddr))
                    {
                        thisValue|=bitmask;
                    }
@@ -181,7 +181,7 @@
            }
            len2+=1+nByteCount;
            break;
        case ReadInputs:    //2  bits
        case ReadInputs:    //2 , bits
        // Fetch Datas;
            nByteCount=(nCount+7)/8;
            Pkgbuf[2]=nByteCount;
@@ -229,12 +229,12 @@
        case WriteCoil:    //5  bit
        //Store Datas;
            //SetBitValue(&KMem.WR[Addr1],bitAddr,pPkg->nCount);    
            if (nCount == 0)
            if (nCount == 0)        // set to 0
            {
                ResetBit(&KMem.WR[Addr1],bitAddr);
            }else if (nCount == 0xFF00)
                ResetBit(&KMem.WY[Addr1],bitAddr);
            }else if (nCount == 0xFF00)    // set to 1
            {
                SetAddrBit(&KMem.WR[Addr1],bitAddr);
                SetAddrBit(&KMem.WY[Addr1],bitAddr);
            }else
            {
                //error
@@ -263,7 +263,7 @@
                    Addr1=(Addr&0xff0)>>4;
                    bitAddr=Addr&0xf;
                    
                    SetBitValue( &KMem.WR[Addr1],bitAddr,bitmask&thisValue);
                    SetBitValue( &KMem.WY[Addr1],bitAddr,bitmask&thisValue);
                    bitmask<<=1;
                    Addr++;
                }
@@ -303,7 +303,7 @@
            len2+=2;
    }
            //SendPkg(Pkgbuf,len2);
            SendPacket1(Pkgbuf,len2);
            SendPacket(nChn, Pkgbuf, len2);
}    
    
    return 0;
Src/ModbusRTU.h
File was deleted
Src/functions.c
@@ -8,6 +8,9 @@
#include "functions.h"
#include "string.h"
#include "stm32f0xx_hal.h"
#if (BOARD_TYPE == 12)
#include "fp0.h"
#endif
extern __IO uint32_t uwTick;
//#include "Myprotocol.h"
int TickFreq=10000;
@@ -89,10 +92,10 @@
unsigned short crc_check(const unsigned char * data, unsigned int  length)
{
unsigned short crc_reg = 0xFFFF;
while (length--)
{
crc_reg = (crc_reg >> 8) ^ crc16_table[(crc_reg ^ *data++) & 0xff];
}
    while (length--)
    {
    crc_reg = (crc_reg >> 8) ^ crc16_table[(crc_reg ^ *data++) & 0xff];
    }
return (~crc_reg) & 0xFFFF;
}
@@ -266,14 +269,82 @@
void PendSvCallBack()
{
#if (BOARD_TYPE == 12)
///*
        if (bSPI1RecvDone)
        {
            bSPI1RecvDone=0;
            ParseFP0Pkg(SPI1RecvBuf,nSPI1RecvLenInBuf);
        }
//*/
#endif
    if (Uart2Stat.bPacketRecved)
    {
        ParsePacket((pPacket)Uart2RecvBuf1,Uart2RecvBuf1DataLen);
        ParsePacket(2, (pPacket)Uart2RecvBuf1, Uart2RecvBuf1DataLen);
        Uart2RecvBuf1DataLen=0;
        Uart2Stat.bPacketRecved=0;
        Uart2RecvDMA(Uart2RecvBuf1,sizeof(Uart2RecvBuf1));        
    }
}
void SPI1_IRQ_CallBack()
{
        uint8_t value;
//    LL_GPIO_TogglePin(GPIOB,LL_GPIO_PIN_7);
     if (LL_SPI_IsActiveFlag_RXNE(SPI1))
     {
             value = LL_SPI_ReceiveData8( SPI1);
#if (BOARD_TYPE == 12)
            KMem.SDD[62]++;
            KMem.SDT[122]++;
         if (!bSPI1Sending)
         {
              KMem.SDB[128+KMem.SDT[123]] = value;
             KMem.SDT[123]++;      if (KMem.SDT[123]>=100) {KMem.SDT[123]=81;}
         }
         if (!bSPI1Sending && (1 || bSPI1Recving))
         {
             SPI1RecvBuf[nSPI1RecvPos]=value;
             nSPI1RecvPos++;
             if (value==0x0d)
             {
              KMem.SDB[128+KMem.SDT[123]] = nSPI1RecvPos;
             KMem.SDT[123]++;      if (KMem.SDT[123]>=100) {KMem.SDT[123]=81;}
                 nSPI1RecvLenInBuf=nSPI1RecvPos;
                 bSPI1RecvDone=1;
                 nSPI1RecvPos=0;
                 bSPI1Recving=0;
                 TriggerPendSV();
             }
         }
         if (bSPI1Sending)
         {
                 nSPI1SentLen++;
                 KMem.SDD[63]++;
             if (nSPI1SentLen >= nSPI1ToSendLen) {
                 SetACKPin_1();
                 bSPI1Sending=0;
                 bSPI1SendDone=1;
                 bSPI1Recving=1;
                 nSPI1RecvPos=0;
                 SetFP0DEPin_0();
             }
             else {
                 value = SPI1SendBuf[nSPI1SentLen];
                 LL_SPI_TransmitData8(SPI1,value);
                 KMem.SDB[128+KMem.SDT[123]] = value;
                 KMem.SDT[123]++;      if (KMem.SDT[123]>=100) {KMem.SDT[123]=81;}
             }
         }
#endif
     }
}
void Uart1SendDone()
{
    Uart1Stat.TcCount++;
@@ -312,10 +383,10 @@
int PutStr(char * str1, int len1)
{
//    Uart1SendDMA(str1,len1);
    //PushIn(&Uart1Stat.QTx,str1,len1);
    PushIn(&Uart1Stat.QTx,str1,len1);
//    LL_USART_EnableIT_TXE(USART1);   
//    LL_USART_EnableIT_TC(USART1);     
    //Uart1TriggerSendDMA();
    Uart1TriggerSendDMA();
    return len1;
}
int PutStr1(char * str1, int len1)
@@ -337,21 +408,22 @@
    return len1;
}
void clearscreen()
int SendPacket(int nChn, void * pBuf,int len1)
{
    PutStr("\33[2J\33[0;0H",10);
    return;
    if (nChn==1)     {
        PutStr1((char *)pBuf,len1);
//    PushIn(&Uart1Stat.QTx,p1,len1);
//    Uart1TriggerSendDMA();
        Uart1Stat.SentPacket++;
    }else if (nChn==2){
        PutStr2((char *)pBuf,len1);
//    PushIn(&Uart2Stat.QTx,p1,len1);
//    Uart2TriggerSendDMA();
        Uart2Stat.SentPacket++;
    }
        return len1;
}
void Locate(int y,int x)
{
        char str[16];
        int len;
        len=sprintf(str," \33[%d;%dH",y,x);
        PutStr(str,len);
        return;
}
/*
int SendPacket1(void * pBuf,int len1)
{
        PutStr1((char *)pBuf,len1);
@@ -368,9 +440,18 @@
        Uart2Stat.SentPacket++;
    return len1;
}
*/
void ToggleRunLed() {    LL_GPIO_TogglePin(GPIOC,LL_GPIO_PIN_13);}
void ToggleErrLed() {    LL_GPIO_TogglePin(GPIOC,LL_GPIO_PIN_14);}
#if (BOARD_TYPE == 12)
void ToggleOutStat() {    LL_GPIO_TogglePin(GPIOC,LL_GPIO_PIN_15);}
void SetOutStat(uchar bOn)
{
    if (bOn) {LL_GPIO_SetOutputPin(GPIOC,LL_GPIO_PIN_15);}
    else {LL_GPIO_ResetOutputPin(GPIOC,LL_GPIO_PIN_15);}
}
#else
void ToggleOutStat() {    LL_GPIO_TogglePin(GPIOA,LL_GPIO_PIN_11);}
void SetOutStat(uchar bOn)
@@ -378,6 +459,7 @@
    if (bOn) {LL_GPIO_SetOutputPin(GPIOA,LL_GPIO_PIN_11);}
    else {LL_GPIO_ResetOutputPin(GPIOA,LL_GPIO_PIN_11);}    
}
#endif
void SetRunLed(uchar bOn)
{
@@ -529,6 +611,8 @@
                        return Input165_R(8);
        case 11:
                        return Input165_R(8);
        case 12:
                     return 0;    //FP0
        default:
            break;
    }
@@ -615,6 +699,10 @@
                     return ReadConfig_5();    //New Slave 8 in 8 o
        case 11:
                     return ReadConfig_11(); //Mini Board
        case 12:
                     return (~(LL_GPIO_ReadInputPort(GPIOA)>>4))&0x0f;    //FP0
        case 13:
                     return ReadConfig_5();
        default:
            
                     return 0;
@@ -685,6 +773,7 @@
    __enable_irq();
}
/*
#define STRCLK12_0() LL_GPIO_ResetOutputPin(GPIOB,LL_GPIO_PIN_7)
#define STRCLK12_1() LL_GPIO_SetOutputPin(GPIOB,LL_GPIO_PIN_7)
@@ -715,10 +804,11 @@
    }        
    KMem.SDD[30]=i;
        STRCLK12_0();
        STRCLK12_1();
    __enable_irq();
        __nop();
        STRCLK12_1();
        __enable_irq();
}
*/
void PutOutputSPI2(unsigned int Y)
{
@@ -747,12 +837,15 @@
    }        
    KMem.SDD[30]=i;
        STRCLK2_0();
        STRCLK2_1();
        STRCLK2_1();
    __enable_irq();
}
void PutOutput(unsigned int Y)        
{    
#if (BOARD_TYPE==12)
    return ;
#endif
    PutOutputSPI2(Y);
    //Output595_16(Y);
}
Src/main.c
@@ -42,6 +42,7 @@
/* USER CODE BEGIN Includes */
#include "Globaldef.h"
#include "debug.h"
#include "Functions.h"
#include "KMachine.h"
#include "PLCfunctions.h"
@@ -50,11 +51,18 @@
#include "string.h"
#include "BSP.h"
#include "ModbusRTU.h"
#if (BOARD_TYPE == 12)
#include "FP0.h"
#elif (BOARD_TYPE == 13)
#include "w5500_port.h"
#include "../src/Ethernet/socket.h"
#include "../src/Ethernet/loopback.h"
#endif
/* USER CODE END Includes */
/* Private variables ---------------------------------------------------------*/
#define ADCrefAddr 0x1FFFF7BA
/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
@@ -67,42 +75,14 @@
unsigned char Uart2RxBuf[RX2BUFSIZE];
unsigned char Uart2TxBuf[TX2BUFSIZE];
//unsigned char buf1[128];
unsigned char Datas[128];
unsigned int SlowFlicker=0;
unsigned int FastFlicker=0;
volatile int PacketLength = 0;
char str1[256];
int TimeOutCount=0;
int Clk3=0;
int ContinueSend=0;
int Uart1baudval=0;
int Uart2baudval=0;
int repeater=0;
int SendTime,Latancy,LatancyClk,SendClk;
int LineCount=0;
int LastCircleStartTime=0;
int CircleTime=0;
stBinProg1 * pProgs = (stBinProg1 *)STORE_PRG_BASE;
//volatile unsigned int nRunCount=0;
volatile int nCount2=0;
uint32_t us1,us2,us3,us4,us5,us6;
const unsigned char buf1[16]={0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff,0x00};
volatile int PowerDownEvent=0;
volatile int OldPowerDownEvent=0;
volatile int OldPowerDownEventTime=0;
/* USER CODE END PV */
@@ -121,11 +101,6 @@
/* USER CODE END PFP */
/* USER CODE BEGIN 0 */
__asm int add1(int a,int b)
{
    add r0,r1,r0
    BLX    lr
}
int HexToInt(char ch)
{
@@ -152,373 +127,6 @@
    return;
}
int FormatHex(char * buf1,uchar * data,int n)
{
    int len1=0;
        for (int i=0;i<n;i++)
        {len1+=sprintf(buf1+len1,"%02X ",data[i]);}
        len1+=sprintf(buf1+len1,"\r\n");
    return len1;
}
int RepeaterFunc()
{
        KMem.WY[0]=KMem.WX[0];
        if ((KMem.nRunCount &0x7f) == 88)
        {
            nCount2++;
            ToggleRunLed();
//        int len1=sprintf(str1,"%d %d Cfg %02X  Input %02X  \r\n",nCount,nCount2,EffJumperSW,MyKeyStat1);
//        PutStr(str1,len1);
        }
    return 0;
}
int ShowInitInfo()
{
    int len1=0;
    clearscreen();
//    Locate(1,1);
/*
    LoadFlashDatas();
    LoadAndUpdateStoreCfg();
    HAL_StatusTypeDef res;
    stStoreCfg * pFCfg = (stStoreCfg *) GetCurStoreCfgAddr();
    stStoreCfg * pFCfg2 = GetNextStoreCfgAddr(pFCfg);
int t11=GetuS();
    for (int i=0;i<20;i++)
    {
        tims[i]=GetuS();
    }
    clearscreen();
    len1+=sprintf(str1+len1," Ver 001 \r\n");
    len1+=sprintf(str1+len1," Uart1Baud %d Uart2Baud %d  UID  %08x %08x %08x \r\n",Uart1Baud,Uart2Baud,pUID[0],pUID[1],pUID[2]);
    len1+=sprintf(str1+len1," Flash = %d %d %d %d  res = %d   ",FlashDatas[0],FlashDatas[1],FlashDatas[2],FlashDatas[3],res);
    len1+=sprintf(str1+len1,"flash operation = %u %u %u\r\n",t11-t10,t10,t11);
    PutStr(str1,len1);
    len1=0;
    len1+=sprintf(str1+len1,"%08X  %X %X , PowerOn %X  UpTime %X %X %X %X \r\n",
    (uint32_t)pFCfg,pFCfg[0].Sign1,pFCfg[0].SN1,pFCfg[0].PowerCount,pFCfg[0].UpTime,pFCfg[0].UserData1,pFCfg[0].CRC1,pFCfg[0].EndSign1);
    len1+=sprintf(str1+len1,"%08X  %X %X , PowerOn %X  UpTime %X %X %X %X \r\n",
    (uint32_t)pFCfg2,Cfg2.Sign1,Cfg2.SN1,Cfg2.PowerCount,Cfg2.UpTime,Cfg2.UserData1,Cfg2.CRC1,Cfg2.EndSign1);
    PutStr(str1,len1);
*/
    len1=0;
/*
    for (int i=0;i<8;i++)
    {
        len1=0;
        len1+=sprintf(str1+len1,"%02X:",i*32);
        for (int j=0;j<8;j++)
        {
                len1+=sprintf(str1+len1," %02X",pFlash1[i*32+j]);
        }
                len1+=sprintf(str1+len1,"  %02X",pFlash1[i*32+8]);
        for (int j=9;j<16;j++)
        {
                len1+=sprintf(str1+len1," %02X",pFlash1[i*32+j]);
        }
                len1+=sprintf(str1+len1," | %02X",pFlash1[i*32+16]);
        for (int j=17;j<24;j++)
        {
                len1+=sprintf(str1+len1," %02X",pFlash1[i*32+j]);
        }
                len1+=sprintf(str1+len1,"  %02X",pFlash1[i*32+24]);
        for (int j=25;j<32;j++)
        {
                len1+=sprintf(str1+len1," %02X",pFlash1[i*32+j]);
        }
        len1+=sprintf(str1+len1,"\r\n");
        PutStr(str1,len1);
    }
*/
    us1=GetuS();
    int crc1 = crc_check(buf1,16);
    us2=GetuS();
    int crc2 = crc16bitbybit(buf1,16);
    us3=GetuS();
    int crc3 = crc16table(buf1, 16);
    us4=GetuS();
  int crc4 = crc16tablefast(buf1, 16);
    us5=GetuS();
    LL_CRC_ResetCRCCalculationUnit(CRC);
    LL_CRC_SetInitialData(CRC,0xFFFFFFFF);
    LL_CRC_SetInitialData(CRC,0xA001);
    for (int i=0;i<16;i++)
    {
        LL_CRC_FeedData8(CRC,buf1[i]);
    }
    int crc5 = LL_CRC_ReadData32(CRC);
    us6=GetuS();
        len1+=sprintf(str1+len1,"CRC  %04X  %04X  %04X  %04X  %04X\r\n",crc1,crc2,crc3,crc4,crc5);
        len1+=sprintf(str1+len1,"time %04d  %04d  %04d  %04d  %04d\r\n",us2-us1,us3-us2,us4-us3,us5-us4,us6-us5);
        PutStr(str1,len1);
//    InitTimer(0,0);
//    InitTimer(1,1);
//    InitTimer(2,2);
//    InitTimer(3,3);
//    RunTimer(0,1000);
//    StartTimer(2,1000);
    Locate(13,1);LineCount=3;
    return 0;
}
int sprintftime = 0;
int putstrtime = 0;
int ADCProcess()
{
    // ADC channels
    //  0 -- 24V  --> 0
    //  1 -- 5V   --> 2
    //    2 --
    //  3 --
    //  4 --
    //  5 --
    //  6 --
    //  7 --
    //  8 --
    //                         --> 5
    // 16 -- Temp  --> 6
    // 17 -- Vref  --> 7
    uint16_t ADC_ConvertedValue=0;
static int CurChannel=LL_ADC_CHANNEL_0;
//static int waitcount = 0;
                if (!LL_ADC_REG_IsConversionOngoing(ADC1))
                {
                    //waitcount++;
                    //if (waitcount<2) return 0;
                    //waitcount=0;
                    ADC_ConvertedValue = LL_ADC_REG_ReadConversionData12(ADC1);
        //            ADC_RegularChannelConfig(LL_ADC_CHANNEL_17,);
                    int channels = CurChannel ;//LL_ADC_REG_GetSequencerChannels(ADC1);
                    int nextchannel = LL_ADC_CHANNEL_0;
                    if ((channels & LL_ADC_CHANNEL_0) == LL_ADC_CHANNEL_0)
                    {
                        KMem.ADCValues[0] = ADC_ConvertedValue;
                        nextchannel = LL_ADC_CHANNEL_8;
                    }else if ((channels & LL_ADC_CHANNEL_8) == LL_ADC_CHANNEL_8)
                    {
                        KMem.ADCValues[2] = ADC_ConvertedValue;
                        nextchannel = LL_ADC_CHANNEL_TEMPSENSOR;
                        if (KMem.ADCValues[2] < 2200)
                        {
                            PowerDownEvent=1;
                        }else
                        {
                            PowerDownEvent=0;
                        }
                    }else if ((channels & LL_ADC_CHANNEL_16) == LL_ADC_CHANNEL_16)
                    {
                        KMem.ADCValues[6] = ADC_ConvertedValue;
                            nextchannel = LL_ADC_CHANNEL_VREFINT;
                    }else if ((channels & LL_ADC_CHANNEL_17) == LL_ADC_CHANNEL_17)
                    {
                        KMem.ADCValues[7] = ADC_ConvertedValue;
                        KMem.ADCValues[5] = *((unsigned short *)ADCrefAddr);
                        nextchannel = LL_ADC_CHANNEL_0;
                    }else
                    {
                        //ADCValues[0] = ADC_ConvertedValue;
                    }
                    //nextchannel = LL_ADC_CHANNEL_VREFINT;
                    LL_ADC_REG_SetSequencerChannels(ADC1,nextchannel);
                    LL_ADC_REG_StartConversion(ADC1);
                    CurChannel = nextchannel;
                }
    return 0;
}
int PowerDownProcess(void )
{
    AddEventLog(KMem.CurTimeSec,EventTypePowerDown,1,12345);
    SaveRunStat(&KMRunStat);
    KMem.PwrFailCount++;
    KMem.LastPwrFailTime = KMem.CurTimeSec;
    return 0;
}
int PowerRecoverProcess(void)
{
    KMem.PwrFailCount++;
    return 0;
}
int ShowRunningInfo()
{
            int Clk1=SysTick->VAL;
            if (Uart1BaudFirstGot)
            {
                Uart1baudval = HAL_RCC_GetPCLK1Freq() / USART1->BRR;
                Uart1BaudFirstGot=0;
            }
            if (Uart2BaudFirstGot)
            {
                Uart2baudval = HAL_RCC_GetPCLK1Freq() / USART2->BRR;
                Uart2BaudFirstGot=0;
            }
            int Reload=SysTick->LOAD;
            int Clk2=SysTick->VAL;
            //int us2=GetuS();
            int haltick=HAL_GetTick();
            int len1=0;
            uint32_t theUs = GetuS();
            int nRunCount2=KMem.nRunCount;
            if (!Uart1Stat.QTx.bEmpty) return 0;
            if ( (nRunCount2 & 0xff) == 0x03)
            {
                Locate(13,1);LineCount=3;
            } else    if ((nRunCount2 & 0xff) == 0x0f)
            {
                int timeus1;
                int timeus2;
                len1=sprintf((char *)str1," N %8d Tk %8d %9u CFG %02X R %d M %d S %d %4d IN %04X OUT %04X  \r\n",
                    KMem.nRunCount, haltick, theUs, KMem.EffJumperSW, repeater, bMaster, bSlave, Clk2, KMem.WX[0],KMem.WY[0]);
                //len1=sprintf((char *)str1,"U%02X%02XA",x2,x2);
                // Locate(10,1);
                timeus1=GetuS();
                PutStr(str1,len1);
                timeus2=GetuS();
                sprintftime = timeus1 - theUs;
                putstrtime = timeus2 - timeus1;
                if (IsTimerOn(0)) {RunTimer(1,1000);StopTimer(3);}
                if (IsTimerOn(1)) {RunTimer(2,100);StopTimer(0);}
                if (IsTimerOn(2)) {RunTimer(3,10);StopTimer(1);}
                if (IsTimerOn(3)) {RunTimer(0,10000);StopTimer(2);}
          }
            if ((nRunCount2 & 0xff) == 0x2f && 0)
            {
          }
            if ((nRunCount2 & 0xff) == 0x0af)
            {
          }
            return 0;
}
int MasterFunc()
{
        uint32_t tick1=HAL_GetTick();
        uint32_t thisuS=GetuS();
            int len1=0;
            if ((MasterRecved && MasterRecvOK && thisuS-SendTimeuS>50) || thisuS-SendTimeuS>1000u)
            {
                if (!MasterRecvOK)
                {
                    TimeOutCount++;
                    Uart2Stat.TimeOutErr++;
                    ChnStats[nCurPollId].LostPackets++;
                    ChnStats[nCurPollId].CtnLstPkts++;
                    if (!MasterRecved) {ChnStats[nCurPollId].TimeOutErr++;}
                    if (ChnStats[nCurPollId].CtnLstPkts>ChnStats[nCurPollId].MaxCtnLstPkts)
                    {ChnStats[nCurPollId].MaxCtnLstPkts=ChnStats[nCurPollId].CtnLstPkts;}
                    if (ChnStats[nCurPollId].CtnLstPkts>3)
                    {
                        ChnStats[nCurPollId].Stat=0;
                        KMem.ErrStat=200;
                        {BufferIn[nCurPollId]=0;}
                    }
                //    LL_GPIO_SetOutputPin(GPIOA,LL_GPIO_PIN_7);
                }else
                {
                    ChnStats[nCurPollId].Stat=1;
                    KMem.RunStat=100;
                }
                nCurPollId ++;
                if (nCurPollId > nChilds)
                {
                    CircleTime=thisuS-LastCircleStartTime;
                    LastCircleStartTime=thisuS;
                    nSeq++;
                    nCurPollId=1;
                }
                if (KMRunStat.WorkMode==0)
                {
                    KMem.WX[0]= GetInput();
                    KMem.WY[1]=KMem.WX[0]&0xff;
                    KMem.WY[2]=(KMem.WX[0]>>8)&0xff;
                }
                BufferOut[1]=KMem.WY[1];
                BufferOut[2]=KMem.WY[2];
                Datas[0]=BufferOut[nCurPollId];
                Datas[1]=BufferOut[nCurPollId+1];;
                Datas[2]=ChnStats[nCurPollId].Stat;
                Datas[3]=0;
                Datas[4]=tick1&0xff;
                Datas[5]=(tick1>>8)&0xff;
                Datas[6]=(tick1>>16)&0xff;
                Datas[7]=(tick1>>24)&0xff;
                SendTimeuS=thisuS;
                len1=MakePacket((pPacket)PacketBuf1,0,nCurPollId,cmdExChgData,nSeq,8,Datas);
                SendPacket2((pPacket)PacketBuf1,len1);
                ChnStats[nCurPollId].SendPackets++;
                ChnStats[nCurPollId].SendTimeInterval=SendTimeuS-ChnStats[nCurPollId].LastSentTimeuS;
                ChnStats[nCurPollId].LastSentTimeuS=SendTimeuS;
                PacketLength = len1;
                SendTime=tick1;
                MasterRecved=0;
                MasterRecvOK=0;
            //    LL_GPIO_TogglePin(GPIOA,LL_GPIO_PIN_5);
                //ToggleErrLed();
//                ToggleOut8();
            }
            Clk3=SysTick->VAL;
        //    LL_GPIO_TogglePin(GPIOA,LL_GPIO_PIN_4);
    //    HAL_Delay(1);
    return 0;
}
int SlaveFunc()
{
        int ThisuS=GetuS();
        int thisRecvTime=RecvTimeuS;
        if (SlaveRecved)
        {
            KMem.RunStat=8000;
            SlaveRecved=0;
        }else if ((ThisuS - thisRecvTime) >12000u)
        {
            KMem.ErrStat=8000;
            KMem.SDD[17]=1;
            KMem.SDD[18]=ThisuS;
            KMem.SDD[19]=RecvTimeuS;
        }else if ( ThisuS > (thisRecvTime + 12000u))
        {
            KMem.ErrStat=8000;
            KMem.SDD[17]=2;
            KMem.SDD[18]=ThisuS;
            KMem.SDD[19]=RecvTimeuS;
        }
    return 0;
}
/* USER CODE END 0 */
/**
@@ -541,7 +149,7 @@
  /* USER CODE BEGIN Init */
    for (int i=0;i<16;i++)
    for (int i=0;i<9;i++)
    {
//        memset(ChnStats[i],0,0);        
        ChnStats[i].SendPackets=0;
@@ -592,20 +200,41 @@
    ReadSysCfgFromFlash(&KMSysCfg);
    
    KMem.EffJumperSW=ReadJumperSW();
#if (BOARD_TYPE == 12)
    KMem.EffJumperSW|=0x10;
    nAddr=KMem.EffJumperSW&0x0f;
  if ((KMem.EffJumperSW&0x10)!=0) {bMaster=1;bSlave=0;}
    else{bMaster=0;bSlave=1;}
    nChilds=nAddr;
    FP0_Init();
#else
    nAddr=KMem.EffJumperSW&0x7;
    if (KMem.EffJumperSW == 0x0f) {repeater=1;bMaster=1;bSlave=0;}
    if (KMem.EffJumperSW == 0x0f) {bRepeater=1;bMaster=1;bSlave=0;}
  else if ((KMem.EffJumperSW&0x08)!=0) {bMaster=1;bSlave=0;}
    else{bMaster=0;bSlave=1;}
    else{bMaster=0;bSlave=1;}
#endif
    nChilds=nAddr;
    nCurPollId=1;
    if (KMem.EffJumperSW == 0x00) Uart1Baud = DefaultUart1Baud;
    //if (KMem.EffJumperSW == 0x00)
        Uart1Baud = DefaultUart1Baud;
  MX_USART1_UART_Init();
  MX_USART2_UART_Init();
    MX_SPI1_Init();
    LL_SPI_EnableIT_RXNE(SPI1);
#if (BOARD_TYPE == 12)
//    MX_SPI2_Init();
//  MX_ADC_Init();
#else
    MX_SPI2_Init();
  MX_ADC_Init();
#endif
    MX_IWDG_Init();
    MX_TIM6_Init();
    LL_TIM_EnableCounter(TIM6);
    
  /* USER CODE BEGIN 2 */
    LL_USART_EnableIT_RXNE(USART1);
@@ -616,7 +245,16 @@
    Uart2RecvDMA(Uart2RecvBuf1,sizeof(Uart2RecvBuf1));    
    LL_USART_EnableIT_IDLE(USART2);
    LL_USART_EnableIT_TC(USART2);
#if (BOARD_TYPE == 13)
    int res;
    res = w5500_init();
    KMem.SDD[28]=res;
    
//    res=socket(0,Sn_MR_TCP,5000,0);
    KMem.SDD[29]=res;
//    res = listen(0);
#endif
//    if (bSlave)
    {
    //    LL_USART_EnableAutoBaudRate(USART1);
@@ -634,8 +272,15 @@
    HAL_Delay(10);                
    SetRunLed(1);                //Turn On Run Led
    SetErrLed(0);                //Turn Off Err Led
#if (BOARD_TYPE == 12)
//    PutOutput (0);                    //Clear all Output
//    Enable595(1);                        //Enable 595 Output
#else
    PutOutput (0);                    //Clear all Output
    Enable595(1);                        //Enable 595 Output 
#endif
        if (GetBoardType() == 7 || GetBoardType() ==8 
            || GetBoardType() == 9 || GetBoardType() ==10 ) 
        {
@@ -645,38 +290,21 @@
    SetOutStat(0);            //OK Good, signal
    ShowInitInfo();
    KMem.LastScanTime = GetuS();
/*
    int time1=GetuS();
    PutOutput(0x01);
    int x;
    while (1)
    {
        x = GetInput();
        if (x&0x1) break;
    KMRunStat.WorkMode=0;
    if (KMRunStat.WorkMode == 1){
        InitPLC();
        StartPLC();
    }
    int time2=GetuS();
    KMem.SDD[17]=time2-time1;
    PutOutput(0x00);
    while (1)
    {
        x = GetInput();
        if ((x&0x1) == 0) break;
    }
    int time3=GetuS();
    KMem.SDD[18]=time3-time2;
*/
    InitPLC();
    StartPLC();
    KMRunStat.WorkMode=1;
    KMem.WX[5]=0x5a;
    KMem.WX[7]=0x5a;
  while (1)
  {
        //int MyKeyStat1,MyKeyStat2;
        //MyKeyStat1=GetInput();
#if (BOARD_TYPE == 12)
        FP0_Proc();
#endif
        //*((unsigned int *)&(PLCMem.SDT[10]))=nRunCount;
    //    KMem.nRunCount=nRunCount;
        SlowFlicker=0;
@@ -694,7 +322,11 @@
//        KMem.SDD[13]=PendSvCount;
//        KMem.SDD[14]=RCC->CSR;        
#if (BOARD_TYPE == 12)
//        KMem.WX[0]= GetInput();
#else
        KMem.WX[0]= GetInput();        
#endif
        
        if (GetBoardType() == 7 || GetBoardType() ==8 
            || GetBoardType() == 9 || GetBoardType() ==10 ) 
@@ -705,18 +337,19 @@
        
        
//        pProgs = (stBinProg1 *) STORE_PRG_BASE;
        if (    KMRunStat.WorkMode==1)
        {
            if (KMRunStat.nBinProgBank == 0){
                pProgs=(stBinProg1 *)STORE_PRG_BASE;
            }else {
                pProgs=(stBinProg1 *)ALT_PRG_BASE;
            }
            nSizeProg1=KMRunStat.nBinProgSize;
            
        if (KMRunStat.nBinProgBank == 0){
            pProgs=(stBinProg1 *)STORE_PRG_BASE;
        }else {
            pProgs=(stBinProg1 *)ALT_PRG_BASE;
            ProcessPLCBinProg(pProgs, nSizeProg1);
        }
        nSizeProg1=KMRunStat.nBinProgSize;
        ProcessPLCBinProg(pProgs, nSizeProg1);
        }
        KMem.ScanTimeuS=us2-KMem.LastScanTime;
        KMem.LastScanTime = us2;
        if (KMem.ScanTimeuS < KMem.MinScanTimeuS) {KMem.MinScanTimeuS = KMem.ScanTimeuS;}
@@ -724,6 +357,7 @@
//        if (repeater)        {    RepeaterFunc();    }
        us3=GetuS();
        if ((KMem.nRunCount &0x1f) == 0x02)
        {
            ADCProcess();
@@ -745,24 +379,34 @@
                }
            }
        }
        if (bMaster)        
        {
#if (BOARD_TYPE == 12)
            for (int i=0;i<nOutputBytes;i++)
            {BufferOut[i+1]=KMem.WYB[i];}
#else
//            BufferOut[1]=KMem.WX[0]&0xff;
//            BufferOut[2]=(KMem.WX[0]>>8)&0xff;
            MasterFunc();
//            KMem.WY[0]=BufferIn[1]+(BufferIn[2]<<8);
#endif
            if (nChilds>0) {        MasterFunc(2); }
#if (BOARD_TYPE == 12)
//            KMem.WX[0]=BufferIn[1]+(BufferIn[2]<<8);
#else
//            KMem.WY[0]=BufferIn[1]+(BufferIn[2]<<8);
#endif
        }
            if (haltick&0x00002000) SlowFlicker=1;
            else SlowFlicker=0;
            if (haltick&0x00000800) FastFlicker=1;
            else FastFlicker=0;    
        }
        if (bSlave)        
        {
//            BufferOut[0]=KMem.WX[0];
            SlaveFunc();
            SlaveFunc(2);
            if (! KMem.RunStat) {BufferIn[0]=0;}
            KMem.WY[0]=BufferIn[0];
            
@@ -772,10 +416,11 @@
            else FastFlicker=0;            
        }
//        KMem.WY[0]=nCount2>>5;
        if (KMem.RunStat) {KMem.RunStat--;}
        if (KMem.ErrStat) {KMem.ErrStat--;}
        if (!KMem.RunStat) SetRunLed(SlowFlicker);
        else SetRunLed(FastFlicker);
        
@@ -797,7 +442,11 @@
        us4=GetuS();
//        EffJumperSW = GetInput(20)&0xff;
#if (BOARD_TYPE == 12)
        PutOutput (KMem.WY[0]);
#else
//        PutOutput (KMem.WY[0]);
#endif
        //PutOutput (KMem.nRunCount>>8);
        //PutOutput(0x0f70);
        
@@ -811,18 +460,18 @@
//            ProcessTimer(i);
        }
        KMem.nRunCount++;
        int nSize=sizeof(stChnStat);
        memcpy(&KMem.SDT[64],&ChnStats[1],nSize);
        memcpy(&KMem.SDT[64+nSize/2],&ChnStats[2],nSize);
//        int nSize=sizeof(stChnStat);
//        memcpy(&KMem.SDT[64],&ChnStats[1],nSize);
//        memcpy(&KMem.SDT[64+nSize/2],&ChnStats[2],nSize);
//        for (int i=0;i<128;i++)    {        SDT[i]=i;    }
//        SDT[48]=55;
        if (Uart1RecvBuf1DataLen >0 && Uart1Stat.bPacketRecved)
        {
            int res1 = -1;
            res1 = ModBusSlaveParsePkg(Uart1RecvBuf1,Uart1RecvBuf1DataLen);
            res1 = ModBusSlaveParsePkg(1, Uart1RecvBuf1, Uart1RecvBuf1DataLen);
            if (res1 !=0)
            {
                KLParsePacket(Uart1RecvBuf1,Uart1RecvBuf1DataLen);
                KLParsePacket(1, Uart1RecvBuf1, Uart1RecvBuf1DataLen);
            }
            Uart1RecvBuf1DataLen=0;
            Uart1Stat.bPacketRecved=0;
@@ -837,7 +486,30 @@
                clearscreen();
            }
        }
*/
*/
#if (BOARD_TYPE == 12)
        //process 6 output
        {
                // mapping bits.
            if (KMem.WXB[0]&0x1){ LL_GPIO_SetOutputPin(GPIOB,LL_GPIO_PIN_12);}
            else {LL_GPIO_ResetOutputPin(GPIOB,LL_GPIO_PIN_12);}
            if (KMem.WXB[1]&0x1){ LL_GPIO_SetOutputPin(GPIOB,LL_GPIO_PIN_13);}
            else {LL_GPIO_ResetOutputPin(GPIOB,LL_GPIO_PIN_13);}
            if (KMem.WXB[2]&0x1){ LL_GPIO_SetOutputPin(GPIOB,LL_GPIO_PIN_14);}
            else {LL_GPIO_ResetOutputPin(GPIOB,LL_GPIO_PIN_14);}
            if (KMem.WXB[3]&0x1){ LL_GPIO_SetOutputPin(GPIOB,LL_GPIO_PIN_15);}
            else {LL_GPIO_ResetOutputPin(GPIOB,LL_GPIO_PIN_15);}
            if (KMem.WXB[4]&0x1){ LL_GPIO_SetOutputPin(GPIOB,LL_GPIO_PIN_0);}
            else {LL_GPIO_ResetOutputPin(GPIOB,LL_GPIO_PIN_0);}
            if (KMem.WXB[5]&0x1){ LL_GPIO_SetOutputPin(GPIOB,LL_GPIO_PIN_1);}
            else {LL_GPIO_ResetOutputPin(GPIOB,LL_GPIO_PIN_1);}
            if (KMem.WXB[5]&0x1){ LL_GPIO_SetOutputPin(GPIOB,LL_GPIO_PIN_2);}
            else {LL_GPIO_ResetOutputPin(GPIOB,LL_GPIO_PIN_2);}
        }
#endif
        {
        unsigned char pos,seg;
        unsigned short val;
        pos=((KMem.nRunCount)&0x3);
@@ -853,7 +525,14 @@
        //pos=1;
        //seg=2;
        seg=~seg;
        PutOutputSPI1(pos|(seg<<8));
        //    PutOutputSPI1(pos|(seg<<8));
    }
#if (BOARD_TYPE == 13)
     w5500_network_info_show();
//     loopback_tcps(0,str1,5000);
#endif
     LL_IWDG_ReloadCounter(IWDG);
        
  }    //while (1) ;
Src/stm32f0xx_it.c
@@ -127,6 +127,21 @@
/* For the available peripheral interrupt handler names,                      */
/* please refer to the startup file (startup_stm32f0xx.s).                    */
/******************************************************************************/
/**
  * @brief This function handles TIM6 global interrupt.
  */
void TIM6_IRQHandler(void)
{
  /* USER CODE BEGIN TIM6_IRQn 0 */
    if (LL_TIM_IsActiveFlag_UPDATE(TIM6)) {    LL_TIM_ClearFlag_UPDATE(TIM6);}
//        KMem.SDD[46]+=1000;
//      KMem.SDT[93] = LL_TIM_GetCounter(TIM6);
  /* USER CODE END TIM6_IRQn 0 */
  /* USER CODE BEGIN TIM6_IRQn 1 */
  /* USER CODE END TIM6_IRQn 1 */
}
/**
* @brief This function handles DMA1 channel 2 and 3 interrupts.
@@ -211,6 +226,17 @@
    }
  /* USER CODE END DMA1_Channel4_5_IRQn 1 */
}
void SPI1_IRQHandler(void)
{
  /* USER CODE BEGIN SPI1_IRQn 0 */
    SPI1_IRQ_CallBack();
  /* USER CODE END SPI1_IRQn 0 */
  /* USER CODE BEGIN SPI1_IRQn 1 */
  /* USER CODE END SPI1_IRQn 1 */
}
/**
* @brief This function handles USART1 global interrupt.
*/