📄 slavesimens.c
字号:
#define ARM_SLAVESIEMENS_GLOBALS
#include "cfg_ISlave.h" // 包含起动配置
#define SIEMENS_MODEC_BAUD_RATE_600 '1'
#define SIEMENS_MODEC_BAUD_RATE_1200 '2'
#define SIEMENS_MODEC_BAUD_RATE_2400 '3'
#define SIEMENS_MODEC_BAUD_RATE_4800 '4'
#define SIEMENS_MODEC_BAUD_RATE_9600 '5'
// SiemensDataType pSiemensData;
INT8U gMeterSendBuf[1024];
BOOL IsSiemensDataValid(INT8U *pMeterModleInfo, INT8U *pRcvData, int len);
//int SiemensReadDataFromMeter(MpComProperty *mpProperty, SiemensDataType *pSiemensData);
//int ReceiveSiemensFrame(int fd, INT8U *pbuf, INT16U bufsize);
typedef struct tagSiemensTableType
{
INT16U id;
INT16U offset;
INT8U itemsize;
}_PACKED_ SiemensTableType;
typedef struct tagIdentifyFrameType
{
INT8U start;
INT8U factory[3];
INT8U baudRate;
INT8U Id[1];
}_PACKED_ IdentifyFrameType;
typedef struct tagAckFrameType
{
INT8U Ack;
INT8U V;
INT8U Z;
INT8U Y;
INT8U cr;
INT8U lf;
}_PACKED_ AckFrameType;
typedef struct tagSiemensMeterInfoType
{
INT8U factoryId[4];
INT8U baudrate;
INT8U model[30];
}_PACKED_ SiemensMeterInfoType;
typedef struct lldataByte
{
INT16U length;
INT8U baudrate;
}_PACKED_ lzgdatatype;
typedef struct tagPowerFactorType
{
INT8U total[2];
INT8U a[2];
INT8U b[2];
INT8U c[2];
}_PACKED_ PowerFactorType;
typedef struct tagSiemensDataType
{
INT8U MeterModelInfo[30]; //字符串//
INT8U E[4]; //正向有功总电能//
RateEType RateE; //正向费率有功总电能//
INT8U NE[4]; //反向有功总电能//
RateEType RateNE; //反向费率有功总电能//
INT8U NoE[4]; //正向无功总电能//
RateEType RateNoE; //正向费率无功总电能//
INT8U NNoE[4]; //反向无功总电能//
RateEType RateNNoE; //反向费率无功总电能//
INT8U Quad1NoE[4];
RateEType Quad1RateNoE;
INT8U LastMonthE[4]; //上月正向有功总电能//
RateEType LastMonthRateE; //上月正向费率有功总电能//
INT8U LastMonthNE[4]; //上月反向有功总电能//
RateEType LastMonthRateNE;//上月反向费率有功总电能//
INT8U LastMonthNoE[4]; //上月正向无功总电能//
RateEType LastMonthRateNoE;//上月正向费率无功总电能//
INT8U LastMonthNNoE[4]; //上月反向无功总电能//
RateEType LastMonthRateNNoE;//上月反向费率无功总电能//
INT8U LastMonthQuad1NoE[4];
RateEType LastMonthQuad1RateNoE;
// 最大需量 //
INT8U MaxRqu[3];
RateMaxRquType RateMaxRqu;
INT8U NMaxRqu[3];
RateMaxRquType NRateMaxRqu;
INT8U QMaxRqu[3];
RateMaxRquType RateQMaxRqu;
INT8U Quad1QMaxRqu[3];
RateMaxRquType Quad1RateQMaxRqu;
// 上月最大需量 //
INT8U LastMonthMaxRqu[3];
RateMaxRquType LastMonthRateMaxRqu;
INT8U LastMonthNMaxRqu[3];
RateMaxRquType LastMonthNRateMaxRqu;
INT8U LastMonthQMaxRqu[3];
RateMaxRquType LastMonthRateQMaxRqu;
INT8U LastMonthQuad1QMaxRqu[3];
RateMaxRquType LastMonthQuad1RateQMaxRqu;
// 最大需量时间 //
INT8U MaxRquT[4];
RateMaxRquTimeType RateMaxRquT;
INT8U NMaxRquT[4];
RateMaxRquTimeType NRateMaxRquT;
INT8U QMaxRquT[4];
RateMaxRquTimeType RateQMaxRquT;
INT8U Quad1QMaxRquT[4];
RateMaxRquTimeType Quad1RateQMaxRquT;
// 上月最大需量时间 //
INT8U LastMonthMaxRquT[4];
RateMaxRquTimeType LastMonthRateMaxRquT;
INT8U LastMonthNMaxRquT[4];
RateMaxRquTimeType LastMonthNRateMaxRquT;
INT8U LastMonthQMaxRquT[4];
RateMaxRquTimeType LastMonthRateQMaxRquT;
INT8U LastMonthQ1QMaxRquT[4];
RateMaxRquTimeType LastMonthQ1RateQMaxRquT;
INT8U LastPorgramTime[4]; // MMDDHHmm
INT8U ProgramTimes[2];
INT8U BatteryUseTime[4]; // minutes;
struct
{
INT8U a[2];
INT8U b[2];
INT8U c[2];
}_PACKED_ V; //实时电压//
struct
{
INT8U a[2];
INT8U b[2];
INT8U c[2];
}_PACKED_ I;
PowerFactorType PowerFactor;
struct
{
INT8U a[2];
INT8U b[2];
INT8U c[2];
}_PACKED_ Vdeg; //实时电压//
struct
{
INT8U a[2];
INT8U b[2];
INT8U c[2];
}_PACKED_ Ideg;
INT8U Date[4]; // 当前日期 //
INT8U Time[3]; // 当前时间 //
INT8U Freq[2];
}_PACKED_ SiemensDataType;
#define CR 0x0d
#define LF 0x0a
#define SOH 0x01
#define STX 0x02
#define ETX 0x03
#define ACK 0x06
#define NAK 0x15
#define tf1 100
#define tf2 200
#define tf3 260
#define tf4 320
#define tf5 400
#define tf6 480
const SiemensTableType SiemensIdTable[]=
{
{ 0x9010, 0, 4 },
{ 0x9011, 4, 4 },
{ 0x9012, 8, 4 },
{ 0x9013, 12, 4 },
{ 0x9014, 16, 4 },
{ 0x901f, 0, 20 },
{ 0x9020, 20, 4 },
{ 0x9021, 24, 4 },
{ 0x9022, 28, 4 },
{ 0x9023, 32, 4 },
{ 0x9024, 36, 4 },
{ 0x902f, 20, 20 }, ///12
{ 0x9110, 40, 4 },
{ 0x9111, 44, 4 },
{ 0x9112, 48, 4 },
{ 0x9113, 52, 4 },
{ 0x9114, 56, 4 },
{ 0x911f, 40, 20 },
{ 0x9120, 60, 4 },
{ 0x9121, 64, 4 },
{ 0x9122, 68, 4 },
{ 0x9123, 72, 4 },
{ 0x9124, 76, 4 },
{ 0x912f, 60, 20 }, ///24
{ 0x9130, 80, 4 },
{ 0x9131, 84, 4 },
{ 0x9132, 88, 4 },
{ 0x9133, 92, 4 },
{ 0x9134, 96, 4 },
{ 0x913f, 80, 20 },
// 上月电量 //
{ 0x9410, tf1+0, 4 },
{ 0x9411, tf1+4, 4 },
{ 0x9412, tf1+8, 4 },
{ 0x9413, tf1+12, 4 },
{ 0x9414, tf1+16, 4 },
{ 0x941f, tf1+0, 20 }, ///36
{ 0x9420, tf1+20, 4 },
{ 0x9421, tf1+24, 4 },
{ 0x9422, tf1+28, 4 },
{ 0x9423, tf1+32, 4 },
{ 0x9424, tf1+36, 4 },
{ 0x942f, tf1+20, 20 },
{ 0x9510, tf1+40, 4 },
{ 0x9511, tf1+44, 4 },
{ 0x9512, tf1+48, 4 },
{ 0x9513, tf1+52, 4 },
{ 0x9514, tf1+56, 4 },
{ 0x951f, tf1+40, 20 }, ///48
{ 0x9520, tf1+60, 4 },
{ 0x9521, tf1+64, 4 },
{ 0x9522, tf1+68, 4 },
{ 0x9523, tf1+72, 4 },
{ 0x9524, tf1+76, 4 },
{ 0x952f, tf1+60, 20 },
{ 0x9530, tf1+80, 4 },
{ 0x9531, tf1+84, 4 },
{ 0x9532, tf1+88, 4 },
{ 0x9533, tf1+92, 4 },
{ 0x9534, tf1+96, 4 },
{ 0x953f, tf1+80, 20 }, ///60
//需量 // 200
{ 0xa010, tf2+0, 3 },
{ 0xa011, tf2+3, 3 },
{ 0xa012, tf2+6, 3 },
{ 0xa013, tf2+9, 3 },
{ 0xa014, tf2+12, 3 },
{ 0xa01f, tf2+0, 15 },
{ 0xa020, tf2+15, 3 },
{ 0xa021, tf2+18, 3 },
{ 0xa022, tf2+21, 3 },
{ 0xa023, tf2+24, 3 },
{ 0xa024, tf2+27, 3 },
{ 0xa02f, tf2+15, 15 }, ///72
{ 0xa110, tf2+30, 3 },
{ 0xa111, tf2+33, 3 },
{ 0xa112, tf2+36, 3 },
{ 0xa113, tf2+39, 3 },
{ 0xa114, tf2+42, 3 },
{ 0xa11f, tf2+30, 15 },
{ 0xa120, tf2+45, 3 },
{ 0xa121, tf2+48, 3 },
{ 0xa122, tf2+51, 3 },
{ 0xa123, tf2+54, 3 },
{ 0xa124, tf2+57, 3 },
{ 0xa12f, tf2+45, 15 },//84
{ 0xa130, tf2+45, 3 },
{ 0xa131, tf2+48, 3 },
{ 0xa132, tf2+51, 3 },
{ 0xa133, tf2+54, 3 },
{ 0xa134, tf2+57, 3 },
{ 0xa13f, tf2+45, 15 },
// 上月需量 // tf3= 260
{ 0xa410, tf3+0, 3 },
{ 0xa411, tf3+3, 3 },
{ 0xa412, tf3+6, 3 },
{ 0xa413, tf3+9, 3 },
{ 0xa414, tf3+12, 3 },
{ 0xa41f, tf3+0, 15 }, ///96
{ 0xa420, tf3+15, 3 },
{ 0xa421, tf3+18, 3 },
{ 0xa422, tf3+21, 3 },
{ 0xa423, tf3+24, 3 },
{ 0xa424, tf3+27, 3 },
{ 0xa42f, tf3+15, 15 },
{ 0xa510, tf3+30, 3 },
{ 0xa511, tf3+33, 3 },
{ 0xa512, tf3+36, 3 },
{ 0xa513, tf3+39, 3 },
{ 0xa514, tf3+42, 3 },
{ 0xa51f, tf3+30, 15 }, ///108
{ 0xa520, tf3+45, 3 },
{ 0xa521, tf3+48, 3 },
{ 0xa522, tf3+51, 3 },
{ 0xa523, tf3+54, 3 },
{ 0xa524, tf3+57, 3 },
{ 0xa52f, tf3+45, 15 },
{ 0xa530, tf3+45, 3 },
{ 0xa531, tf3+48, 3 },
{ 0xa532, tf3+51, 3 },
{ 0xa533, tf3+54, 3 },
{ 0xa534, tf3+57, 3 },
{ 0xa53f, tf3+45, 15 }, ///120
//当前最大需量发生时间 // tf4 =320
{ 0xb010, tf4+0, 4},
{ 0xb011, tf4+4, 4},
{ 0xb012, tf4+8, 4},
{ 0xb013, tf4+12, 4},
{ 0xb014, tf4+16,4 },
{ 0xb01f, tf4+0, 20},
{ 0xb020, tf4+20,4 },
{ 0xb021, tf4+24,4 },
{ 0xb022, tf4+28,4 },
{ 0xb023, tf4+32,4 },
{ 0xb024, tf4+36,4 },
{ 0xb02f, tf4+20,20 }, ///132
{ 0xb110, tf4+40,4 },
{ 0xb111, tf4+42,4 },
{ 0xb112, tf4+48,4 },
{ 0xb113, tf4+52,4 },
{ 0xb114, tf4+56,4 },
{ 0xb11f, tf4+40,20 },
/*
{ 0xb120, tf4+60,4 },
{ 0xb121, tf4+64,4 },
{ 0xb122, tf4+68,4 },
{ 0xb123, tf4+72,4 },
{ 0xb124, tf4+76,4 },
{ 0xb12f, tf4+60,20 }, ///144
*/
{ 0xb130, tf4+60,4 },
{ 0xb131, tf4+64,4 },
{ 0xb132, tf4+68,4 },
{ 0xb133, tf4+72,4 },
{ 0xb134, tf4+76,4 },
{ 0xb13f, tf4+60,20 }, ///144
////tf5=400
//**********************
{ 0xb210, tf6+0, 4 }, //最近一次编程时间 //
{ 0xb212, tf6+4, 2 }, //编程次数 //
{ 0xb214, tf6+6, 4 }, // 电池工作时间 //
//**********************
// 上月最大需量发生时间 //
{ 0xb410, tf5+0, 4},
{ 0xb411, tf5+4, 4},
{ 0xb412, tf5+8, 4},
{ 0xb413, tf5+12, 4},
{ 0xb414, tf5+16,4},
{ 0xb41f, tf5+0, 20},
{ 0xb420, tf5+20,4 }, ///154
{ 0xb421, tf5+24,4 },
{ 0xb422, tf5+28,4 },
{ 0xb423, tf5+32,4 },
{ 0xb424, tf5+36,4 },
{ 0xb42f, tf5+20,20 },
{ 0xb510, tf5+40,4 },
{ 0xb511, tf5+42,4 },
{ 0xb512, tf5+48,4 },
{ 0xb513, tf5+52,4 },
{ 0xb514, tf5+56,4 },
{ 0xb51f, tf5+40,20 }, ///165
/*
{ 0xb520, tf5+60,4 },
{ 0xb521, tf5+64,4 },
{ 0xb522, tf5+68,4 },
{ 0xb523, tf5+72,4 },
{ 0xb524, tf5+76,4 },
{ 0xb52f, tf5+60,20 },
*/
{ 0xb530, tf5+60,4 }, ///166
{ 0xb531, tf5+64,4 },
{ 0xb532, tf5+68,4 },
{ 0xb533, tf5+72,4 },
{ 0xb534, tf5+76,4 },
{ 0xb53f, tf5+60,20 }, ///171
//其它 // tf6 = 480
{ 0xb611, tf6+10, 2},
{ 0xb612, tf6+12, 2},
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -