⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 islave.c

📁 各种规约电表程序的(包手DL645,威胜,西门子等,的库程序)极大方便远程抄表系统
💻 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 + -