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

📄 abplc5_protected_read_3.cpp

📁 在LINUX环境下
💻 CPP
字号:



#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <sys/un.h>
#include <unistd.h>
#include <ctype.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include <netdb.h>


#include "libabplc5.h"

#include "dbTypes.H"
#include "sesDbg.H"
#include "sesLogErr.H"


//int x,l,junk;

//char dataaddr[32];

extern sesDbg	  *g_pDbg;


 struct _data protread3 (struct _comm comm1, char *addr, int count, int plctype, int debug)
{

	char _sFunName[]="protread3";
	
	struct ethernet_header header,rcvd;
	struct pccc_data df1_1;
	struct namedata name;
	struct _data data;
	struct custom_pccc custom;
	int place,index,hlen;
	
	bzero (&header,sizeof(header));
	bzero (&rcvd, sizeof(rcvd));
	bzero (&custom, sizeof(custom));
	bzero (&data, sizeof(data));

	if (plctype != SLC)
		return data;

	header.mode = 1;
	header.submode = PCCC_CMD;
	header.conn = htonl(comm1.commid);
	custom.request_id = htonl(0x7377e8);
	memcpy (&header.custom, &custom, _CUSTOM_LEN);

	df1_1.src=0;
	df1_1.control=5;
	df1_1.dst=0;	
	df1_1.lsap=0;
	df1_1.cmd=0x0f;
	df1_1.sts=0;
	df1_1.tns=htons(comm1.tns);
	df1_1.fnc=0xa2;
	
	name = nameconv5(addr,plctype,debug);
	data.name = name;
	place=0;
	df1_1.data[place++] = name.typelen * count;
	if (name.file > 254)
	{
		df1_1.data[place++] = 0xff;
		df1_1.data[place++] = (name.file & 255);
		df1_1.data[place++] = (name.file / 256);
	}
	if (name.file < 255)
		df1_1.data[place++] = name.file;
	df1_1.data[place++] = name.type;

	if (name.element > 254)
	{
		df1_1.data[place++] = 0xff;
		df1_1.data[place++] = (name.element & 255);
		df1_1.data[place++] = (name.element / 256);
	}
	if (name.element < 255)
		df1_1.data[place++] = name.element;
	df1_1.data[place++] = name.subelement;

	if((g_pDbg!=NULL) && (debug>=6)) 
	{
		char _sTempStr[100];
		for(int ii=0;ii<place;ii++)
		{
			sprintf(_sTempStr,"%02X ",df1_1.data[ii]);
			g_pDbg->logDbg(_sFunName,debug,_sTempStr);
		}
	}
	memcpy (&header.df1_stuff, &df1_1, PCCC_DATA_LEN + place);
	header.pccc_length = htons(PCCC_DATA_LEN + place);
	hlen = _ENET_HEADER_LEN + PCCC_DATA_LEN + place;

	rcvd = senddf1 (comm1, header, hlen, debug);

	if (rcvd.df1_stuff[4] != (df1_1.cmd + 0x40))
	{
		data.len=-1;
		data.data[0]=BADCMDRET;
		data.data[1]=0;
		return data;
	}
	if (rcvd.df1_stuff[5] != 0)
	{
		data.len=-1;
		data.data[0]=rcvd.df1_stuff[5];           //Error Response - STS
		data.data[1]=rcvd.df1_stuff[8];           //Error Response - EXT STS
		return data;
	}
	if (name.floatdata == TRUE)
		count = count * 2;
	data.len = count;

	index = 8;
	for (int x=0;x<count;x++)
	{
		switch (name.typelen)
		{
		case 1:
			data.data[x] = rcvd.df1_stuff[index];
			break;
		case 2:
			data.data[x] = (rcvd.df1_stuff[index+1]*256) + rcvd.df1_stuff[index];
			break;
		case 4:
			data.data[x++] = (rcvd.df1_stuff[index+3]*256) + rcvd.df1_stuff[index+2];
			data.data[x] = (rcvd.df1_stuff[index+1]*256) + rcvd.df1_stuff[index];
			
			if((g_pDbg!=NULL) && (debug>=6)) 
			{
				char _sTempStr[100];
				for(int ii=0;ii<place;ii++)
				{
					sprintf(_sTempStr," recv=%02X %02X %02X %02X ",rcvd.df1_stuff[index],rcvd.df1_stuff[index+1],rcvd.df1_stuff[index+2],rcvd.df1_stuff[index+3]);
					g_pDbg->logDbg(_sFunName,debug,_sTempStr);
				}
			}
		break;
		}			

		index = index+name.typelen;
	}
	return data;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -