📄 islave.c
字号:
#define ARM_SLAVE_GLOBALS#include "cfg_ISlave.h"int SlaveSampleOneIdData(MpComProperty *mpProperty, INT16U id, INT8U *pbuf, INT16U bufsize, INT16U *psize);int SlaveGetSampleIDTab(INT8U protocol, const SampleIdType **pSampleIdTab, INT16U *pIdNum);int SlaveInitMPPort(MpComProperty *mpProperty){ INT8U uart; INT32U baud; INT8U databits; char parity; INT8U stopbits; #if SLAVE_DEBUG_EN > 0 printf("\n SlaveInitMPPort\n");#endif stopbits = mpProperty->nStopBit; parity = mpProperty->parity; uart = mpProperty->nComPort; databits = mpProperty->nDataBit; baud = mpProperty->nBPS; if(baud > 19200 || baud < 300) baud = 1200; if(databits > 8 || databits < 6) databits = 8; #if SLAVE_DEBUG_EN > 0 printf("\n API_SetUartAttr uart %d, baud %d", uart, baud); printf("\n databits %d, stopbits %d, parity %d\n", databits, stopbits, parity);#endif switch(mpProperty->nProtocol) { case SLAVE_645: return Init645Com(uart,baud,databits,parity,stopbits); break; case SLAVE_SIEMENS_B: case SLAVE_SIEMENS_D: return InitSimensCom(uart,baud,databits,parity,stopbits); } return E_PROTOCOL_NOEXIST;}int SlaveReadData(MpComProperty *mpProperty, INT16U id, INT8U *pbuf, INT16U bufsize, INT16U *psize){ switch(mpProperty->nProtocol) { case SLAVE_645: return Slave645ReadData(mpProperty, id, pbuf, bufsize, psize); break; case SLAVE_SIEMENS_D: case SLAVE_SIEMENS_B: return SlaveSiemensReadData(mpProperty, id, pbuf, bufsize, psize); break; default: break; } #if SLAVE_DEBUG_EN > 0 printf("\n SlaveReadData end\n"); #endif return E_PROTOCOL_NOEXIST;}int SlaveSendFrame(int fd, INT8U *pbuf, INT16U bufsize,INT32U nWaitmScnd){ if(fd > 0) { if(ComSend (fd,pbuf, bufsize, nWaitmScnd) == bufsize) return SUCCESS; else return E_COM_SEND; } return E_COM_OTHER;}int SlaveRecvFrame(int fd, INT8U *pbuf, INT16U bufsize, INT16U *psize,INT32U nWaitmScnd){ if(fd > 0) { *psize = ComRecv ( fd,pbuf, bufsize, nWaitmScnd); if(*psize > 0) {#if SLAVE_DEBUG_EN > 0 mPrintfHex(pbuf,*psize);#endif } return SUCCESS; } return E_COM_OTHER;}int SlaveSampleData(MpComProperty *mpProperty, INT8U *pbuf,INT16U bufsize,INT16U *psize){ const SampleIdType *pSampleIdTab; INT16U idNum; INT16U i; INT16U size; INT16U id; INT8U iddata[SLAVE_ONEID_DATA_SIZE];#if SLAVE_DEBUG_EN > 0 printf("\n SlaveSampleData\n");#endif#if SLAVE_DEBUG_EN > 0 printf("state is 1\n");#endif if(SlaveGetSampleIDTab(mpProperty->nProtocol, &pSampleIdTab, &idNum) == SUCCESS) {#if SLAVE_DEBUG_EN > 0 printf("SampleIDTab OK\n");#endif for(i = 0; i < idNum; i++) { id = pSampleIdTab->id;#if SLAVE_DEBUG_EN > 0 printf("id is %x\n", id);#endif if(SlaveSampleOneIdData(mpProperty, id, iddata, SLAVE_ONEID_DATA_SIZE, &size) != SUCCESS) { if(i == 0) {#if SLAVE_DEBUG_EN > 0 printf("SlaveSampleOneIdData %x ERROR\n", id);#endif break; } else { memset(iddata, 0xff, pSampleIdTab->size); } }#if SLAVE_DEBUG_EN > 0 printf("IdData %x OK\n", id);#endif memcpy(pbuf + pSampleIdTab->offset, iddata, pSampleIdTab->size); pSampleIdTab ++; } if(i >= idNum) {#if SLAVE_DEBUG_EN > 0 printf("\n SlaveSampleData OK\n");#endif return SUCCESS; } } return FAILED;} int SlaveGetSampleIDTab(INT8U protocol, const SampleIdType **pSampleIdTab, INT16U *pIdNum){ switch(protocol) { case SLAVE_645: case SLAVE_WS_645: case SLAVE_HND: case SLAVE_HUALONG: case SLAVE_LONGDIAN: case SLAVE_XUJI: case SLAVE_KELU: case SLAVE_SANXING: case SLAVE_HUALI: case SLAVE_GB645_PARTS: case SLAVE_GB645_SINGLE: *pSampleIdTab = gDL645SampleId; *pIdNum = DL645_SAMPLE_ID_TABLE_SIZE; break; case SLAVE_WS: *pSampleIdTab = gDL645SampleId; *pIdNum = DL645_SAMPLE_ID_TABLE_SIZE; break; default : *pSampleIdTab = gDL645SampleId; *pIdNum = DL645_SAMPLE_ID_TABLE_SIZE; break; } return SUCCESS;}int SlaveSampleOneIdData(MpComProperty *mpProperty, INT16U id, INT8U *pbuf, INT16U bufsize, INT16U *psize){ int retvalue ; int fd;#if SLAVE_DEBUG_EN > 0 printf("\n SlaveSampleOneIdData\n"); printf("\n id %x\n", id);#endif fd = SlaveInitMPPort(mpProperty); retvalue = SlaveReadData(mpProperty, id, pbuf, bufsize, psize); CloseCom(fd); return retvalue;}/***************************************************************************************** 645协议采样数据ID表*****************************************************************************************/const SampleIdType gDL645SampleId[DL645_SAMPLE_ID_TABLE_SIZE] = { {0x901f, SAMPLE_METER_DATA_OFFSET+ 0, 20}, {0x902f, SAMPLE_METER_DATA_OFFSET+ 20, 20},// {0x907f, SAMPLE_METER_DATA_OFFSET+ 40, 12},// {0x908f, SAMPLE_METER_DATA_OFFSET+ 52, 12}, {0x911f, SAMPLE_METER_DATA_OFFSET+64, 20}, {0x912f, SAMPLE_METER_DATA_OFFSET+84, 20}, {0x913f, SAMPLE_METER_DATA_OFFSET+104, 20}, {0x914f, SAMPLE_METER_DATA_OFFSET+124, 20}, {0x915f, SAMPLE_METER_DATA_OFFSET+144, 20}, {0x916f, SAMPLE_METER_DATA_OFFSET+164, 20},// {0x917f, SAMPLE_METER_DATA_OFFSET+ 184, 12},// {0x918f, SAMPLE_METER_DATA_OFFSET+ 196, 12}, {0xa010, SAMPLE_METER_DATA_OFFSET+ 208, 3 }, {0xa020, SAMPLE_METER_DATA_OFFSET+ 211, 3 }, {0xb010, SAMPLE_METER_DATA_OFFSET+ 214, 4 }, {0xb020, SAMPLE_METER_DATA_OFFSET+ 218, 4 }, {0xb210, SAMPLE_METER_DATA_OFFSET+ 222, 4 }, {0xb211, SAMPLE_METER_DATA_OFFSET+ 226, 4 }, {0xb212, SAMPLE_METER_DATA_OFFSET+ 230, 2 }, {0xb213, SAMPLE_METER_DATA_OFFSET+ 232, 2 }, { 0xb61f, SAMPLE_METER_DATA_OFFSET+234, 6 }, { 0xb62f, SAMPLE_METER_DATA_OFFSET+240, 6 }, { 0xb63f, SAMPLE_METER_DATA_OFFSET+246, 12 }, { 0xb64f, SAMPLE_METER_DATA_OFFSET+258, 8 },// { 0xb65f, SAMPLE_METER_DATA_OFFSET+266, 8 }, { 0xc020, SAMPLE_METER_DATA_OFFSET+274, 1}, { 0xc021, SAMPLE_METER_DATA_OFFSET+275, 1}, { 0xc022, SAMPLE_METER_DATA_OFFSET+276, 1}, { 0xc030, SAMPLE_METER_DATA_OFFSET+277, 3 }, { 0xc031, SAMPLE_METER_DATA_OFFSET+280, 3 }, { 0xc117, SAMPLE_METER_DATA_OFFSET+283, 2 }, { 0xc33f, SAMPLE_METER_DATA_OFFSET+285, 24 }};const SampleIdType gSlaveSampleExtId[SLAVE_SAMPLE_EXT_ID_TABLE_SIZE] = { {0x9410, 0, 4}, {0x9420, 4, 4}, {0x9530, 8, 4}, {0x9540, 12, 4}, {0x9550, 16, 4}, {0x9560, 20, 4}, {0xa410, 24, 3 }, {0xa420, 27, 3 }, {0xb410, 30, 4 }, {0xb420, 34, 4 }};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -