亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ofxplcdev.cpp.bak

??  ?  plc 與上位機(jī)通信接口 幫助有需要的人
?? BAK
字號(hào):
// OFxPLCDev.cpp: implementation of the COFxPLCDev class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "OFxPLCDev.h"

#include <cmath>
#include <string>
using  namespace  std;

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

COFxPLCDev::COFxPLCDev()
{

}

COFxPLCDev::~COFxPLCDev()
{

}
int COFxPLCDev::check_sum(BYTE *buf, int &buflen, BYTE &chSum)
{
	/*三菱的伺服放大器的檢驗(yàn)和是將準(zhǔn)備好的命令字符串從第一個(gè)開(kāi)始,依次作加法運(yùn)算。最后得到的字節(jié)轉(zhuǎn)換成兩位的字符。
	 *比如:  "00502303203"的檢驗(yàn)和是FC。計(jì)算是這樣進(jìn)行的: 0x30+0x30+0x35+0x30+0x32+0x33+0x32+0x30+0x33 = 0xFC
	 *最后的字符串為:"00502303203FC"
	*/
	//輸入  buf[], buflen
	//輸出 chSum
	//

	char newBuf[128];
	memset(newBuf, 0x00, sizeof (newBuf));

	//將字符串拷貝到臨時(shí)的緩沖區(qū)中。
	memcpy(newBuf, buf, buflen);
	int   l_get = 0;
	for (int i = 0; i<buflen; i++)
	{
		l_get += newBuf[i];
	}
	chSum = l_get;

	return SUCCESS;
}

int COFxPLCDev::SendTo(_retstruct *_ret,BYTE *addr, int adlen, BYTE *buf, int buflen)
{
	//向LCA寄存器發(fā)送數(shù)據(jù)
	/************************************************************************/
	/*相關(guān)函數(shù):check_sum,為數(shù)據(jù)添加檢驗(yàn)和位                                
	 *	        get_response, 取得LCA的響應(yīng)數(shù)據(jù)
	*/
	/************************************************************************/
	/*
	輸入:	addr   寄存器地址
			adlen  寄存器地址長(zhǎng)度
			buf    將要發(fā)送的數(shù)據(jù)
			buflen 發(fā)送數(shù)據(jù)的長(zhǎng)度
	輸出:
	返回:	成功返回success, 否則返回錯(cuò)誤代碼。
	*/
	return SUCCESS;
}

int COFxPLCDev::ReadFrom(_retstruct *_ret,BYTE *addr, int adlen, BYTE *recbuf, int &reclen)
{
	//讀取LCA寄存器數(shù)據(jù)
	/************************************************************************/
	/*相關(guān)函數(shù):check_sum,為數(shù)據(jù)添加檢驗(yàn)和位                                
	 *	        get_response, 取得LCA的響應(yīng)數(shù)據(jù),并返回錯(cuò)誤代碼
	*/
	/************************************************************************/
	/*
	輸入:	addr   寄存器地址
			adlen  寄存器地址長(zhǎng)度
			
	輸出:	recbuf 將要讀取的數(shù)據(jù)緩沖區(qū)
			reclen 讀取數(shù)據(jù)的長(zhǎng)度

	返回:	成功返回success, 否則返回錯(cuò)誤代碼。
	*/
	
	return SUCCESS;
}

int COFxPLCDev::get_response(BYTE *ibuf, int ilen, BYTE *rbuf, int &rlen, _retstruct *_ret)
{
	//讀取返回值
	/*
	輸入:	無(wú)
	輸出:	resbuf   接受的數(shù)據(jù)緩沖區(qū)
			reslen   接受數(shù)據(jù)的長(zhǎng)度
	返回:  成功返回success, 否則返回錯(cuò)誤代碼。
	*/
	char   inputbuf[128];
	memset(inputbuf, 0x00, sizeof(inputbuf));
	for (int i = 0; i<ilen ; i++)
	{
		inputbuf[i] = ibuf[i];		
	}

	if (inputbuf[2] == 'A' || inputbuf[2] == 'a')
	{
		memcpy(rbuf, &inputbuf[3], ilen - 6);
		rlen = ilen - 6;
		_ret->code = SUCCESS;
	}
	else
	{
		_ret->code =FAIL;
		_ret->discription = "響應(yīng)錯(cuò)誤";
		_ret->time = CTime::GetCurrentTime();
	}

	return   _ret->code;
}

int COFxPLCDev::InitDev(CString  strReg, _retstruct *_ret)
{
	/*
		執(zhí)行步驟:
		1、讀取注冊(cè)表strReg中的串口參數(shù)
		2、這些參數(shù)賦值給它的屬性數(shù)據(jù)
		3、調(diào)用InitComm
	*/
	LONG  hr;
	HKEY   hKey = NULL;
	DWORD  cbData;
	DWORD  dwType = REG_DWORD;
	DWORD  dwDisposition;
	
	hr = RegCreateKeyEx(HKEY_LOCAL_MACHINE, strReg, 0, NULL, REG_OPTION_NON_VOLATILE, \
		KEY_WRITE|KEY_READ, NULL, &hKey, &dwDisposition);

	if (ERROR_SUCCESS != hr)
		return FAIL;
	
	if(ERROR_SUCCESS != RegQueryValueEx(hKey, "Port", \
		NULL, &dwType, (BYTE*)&m_iPortID, &cbData) )
	{
		return FAIL;
	}
	if(ERROR_SUCCESS != RegQueryValueEx(hKey, "BaudRate", NULL, &dwType, (BYTE*)&m_iBaudRate, &cbData))
	{
		return FAIL;
	}

	if (ERROR_SUCCESS != RegQueryValueEx(hKey, "ByteSize", NULL, &dwType, (BYTE*)&m_iBytesize, &cbData))
	{
		return FAIL;
	}
	
	if (ERROR_SUCCESS != RegQueryValueEx(hKey, "Parity", NULL, &dwType, (BYTE*)&m_iParity, &cbData))
	{
		return FAIL;
	}

	if (ERROR_SUCCESS != RegQueryValueEx(hKey, "StopBits", NULL, &dwType, (BYTE*)&m_iStopBits, &cbData))
	{
		return FAIL;
	}

	if (SUCCESS!= InitComm())
	{
		_ret->code = FAIL;	
		_ret->discription = _T("注冊(cè)表?yè)p壞,請(qǐng)重新添加注冊(cè)表文件!");
		_ret->time = CTime::GetCurrentTime();
	} 
		
	return _ret->code = SUCCESS;
}

int COFxPLCDev::SendENQ(_retstruct *_ret)
{
	char  chStrRET[2];
	memset(chStrRET, 0x00, sizeof(chStrRET));
	char   chStrENQ[2];
	
	memset(chStrENQ, 0x00, sizeof(chStrENQ));
	chStrENQ[0] = ENQ;
	int   iLen = 0;
	if (SUCCESS != WritePort((BYTE*)chStrENQ, strlen(chStrENQ), 300))
		return  FAIL;
	
	if(SUCCESS == ReadPort((BYTE*)chStrENQ, iLen, 300))
	{
		if(chStrENQ[0] == ACK)
		{
			_ret->code = ACK;
			_ret->time =  CTime::GetCurrentTime();
			_ret->discription = "LCA連接成功。";
		}
		else if(chStrENQ[0] == NAK)
		{
			_ret->code = NAK;
			_ret->time =  CTime::GetCurrentTime();
			_ret->discription = "LCA連接失敗。返回NAK。";
		}
		else
		{
			_ret->code = FAIL;
			_ret->time = CTime::GetCurrentTime();
			_ret->discription = "LCA連接失敗。其他未知錯(cuò)誤。";
			
		}
		return _ret->code;
	}
	else
	{
		_ret->code = FAIL;
		_ret->time =  CTime::GetCurrentTime();
		_ret->discription = "LCA連接失敗。請(qǐng)檢查通信線路是否正常!";
	}
	
	return  _ret->code;
}

int COFxPLCDev::GetSpeed(_retstruct *_ret, int istation, int &Speed)
{
	/*
		執(zhí)行步驟:
		1、組合命令;
		2、將數(shù)據(jù)添加檢驗(yàn)和,并添加命令首部
		3、WritePort
		4、ReadPort
		5、解析返回?cái)?shù)據(jù),并將數(shù)據(jù)送給Speed.
	*/
	
	
	if (0>istation || istation>32)
	{
		_ret->code = FAIL;
		_ret->discription = _T(" 無(wú)效的站點(diǎn)");
		_ret->time = CTime::GetCurrentTime();
	}
	
	//添加站號(hào) istation
	CString station;
	station.Format("%c", istation+0x30);

	//添加指令[0][5]
	CString  cmdstr;
	cmdstr = "\x30\x35";

	//添加參數(shù)[0][9]
	CString  cmdpra;
	cmdpra = "\x30\x39";
	
	//組成命令
	char  chCmd[128];
	memset(chCmd, 0x00, sizeof(chCmd));
	CString strcmd;
	strcmd = station +cmdstr + "\x02"+ cmdpra +"\x03";
	int      strcmdlen = 0;
	strcmdlen = strlen(strcmd);
	memcpy(chCmd, strcmd, strcmdlen);
	BYTE chSum = 0;
	check_sum((BYTE*)chCmd, strcmdlen , chSum);
	CString  schSum;
	schSum.Format("%02X", chSum);
	
	CString   strfin;
	strfin = "\x01" + strcmd +schSum;
	
	int  strfinlen = 0;
	strfinlen = strlen(strfin);

	memset(chCmd, 0x00, sizeof(chCmd));
	memcpy(chCmd, strfin, strfinlen);
	//發(fā)送命令
	if (SUCCESS != WritePort((BYTE*)chCmd, strfinlen, 10))
	{
		_ret->code = FAIL;
		_ret->discription = "寫入數(shù)據(jù)錯(cuò)誤!";
		_ret->time = CTime::GetCurrentTime();
	}
	else
	{
		
		//取得響應(yīng)并解析值
		char   recbuf[128];
		memset(recbuf, 0x00, sizeof(recbuf));
		int ilen = 128;
		if (SUCCESS != ReadPort((BYTE*)recbuf, ilen,90))
		{
			_ret->code = FAIL;
			_ret->discription = "讀取數(shù)據(jù)錯(cuò)誤!";
			_ret->time = CTime::GetCurrentTime();
		}
		else
		{
			
			char   rbuf[128];
			memset(rbuf, 0x00, sizeof(rbuf));
			int rlen = 128;
			if(	SUCCESS == get_response((BYTE *)recbuf, ilen, (BYTE *)rbuf, rlen, _ret))
			{
				Speed = 0;
				for (int i = 1; i<8; i++)
				{
					if (0x40<rbuf[i]&&rbuf[i]<0x47)
						rbuf[i] = rbuf[i] - 7;
					Speed += (rbuf[i]-0x30)*pow(16, 7-i);
				}

				_ret->code = SUCCESS;
			}

		}
	}
	return _ret->code;
}
int COFxPLCDev::SetSpeed(_retstruct *_ret, int istation, int Speed)
{
	/*
		執(zhí)行步驟:
		1、組合命令;
		2、將數(shù)據(jù)添加檢驗(yàn)和,并添加命令首部
		3、WritePort
		4、ReadPort
		5、解析返回?cái)?shù)據(jù),是否設(shè)置成功.
	*/
	
	
	if (0>istation || istation>32)
	{
		_ret->code = FAIL;
		_ret->discription = _T(" 無(wú)效的站點(diǎn)");
		_ret->time = CTime::GetCurrentTime();
	}
	
	//添加站號(hào) istation
	CString station;
	station.Format("%c", istation+0x30);

	//添加指令[0][5]
	CString  cmdstr;
	cmdstr = "\x38\x34";

	//添加參數(shù)[0][9]
	CString  cmdpra;
	cmdpra = "\x30\x39";
	
	//將Speed轉(zhuǎn)換成8個(gè)16進(jìn)制字符
	CString  cmdSpeed;
	cmdSpeed.Format("%08X", Speed);
	//組成命令
	char  chCmd[128];
	memset(chCmd, 0x00, sizeof(chCmd));
	CString strcmd;
	strcmd = station +cmdstr + "\x02"+ cmdpra + cmdSpeed +"\x03";
	int      strcmdlen = 0;
	strcmdlen = strlen(strcmd);
	memcpy(chCmd, strcmd, strcmdlen);
	BYTE chSum = 0;
	check_sum((BYTE*)chCmd, strcmdlen , chSum);
	CString  schSum;
	schSum.Format("%02X", chSum);
	
	CString   strfin;
	strfin = "\x01" + strcmd +schSum;
	
	int  strfinlen = 0;
	strfinlen = strlen(strfin);

	memset(chCmd, 0x00, sizeof(chCmd));
	memcpy(chCmd, strfin, strfinlen);
	//發(fā)送命令
	if (SUCCESS != WritePort((BYTE*)chCmd, strfinlen, 10))
	{
		_ret->code = FAIL;
		_ret->discription = "寫入數(shù)據(jù)錯(cuò)誤!";
		_ret->time = CTime::GetCurrentTime();
	}
	else
	{
		
		//取得響應(yīng)并解析值
		char   recbuf[128];
		memset(recbuf, 0x00, sizeof(recbuf));
		int ilen = 128;
		if (SUCCESS != ReadPort((BYTE*)recbuf, ilen,200))
		{
			_ret->code = FAIL;
			_ret->discription = "讀取數(shù)據(jù)錯(cuò)誤!";
			_ret->time = CTime::GetCurrentTime();
		}
		else
		{
			
			char   rbuf[128];
			memset(rbuf, 0x00, sizeof(rbuf));
			int rlen = 128;
			if(	SUCCESS == get_response((BYTE *)recbuf, ilen, (BYTE *)rbuf, rlen, _ret))
			{
				Speed = 0;
				for (int i = 1; i<8; i++)
				{
					if (0x40<rbuf[i]&&rbuf[i]<0x47)
						rbuf[i] = rbuf[i] - 7;
					Speed += (rbuf[i]-0x30)*pow(16, 7-i);
				}

				_ret->code = SUCCESS;
			}

		}
	}
	return _ret->code;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
97超碰欧美中文字幕| 欧美日韩的一区二区| 亚洲一区二区av电影| xnxx国产精品| 欧美欧美午夜aⅴ在线观看| 国产精品一区二区久久不卡 | 国产女人18水真多18精品一级做| 色综合一个色综合亚洲| 国产精品99久久久久久有的能看| 亚洲国产精品久久久男人的天堂| 国产精品美女久久久久av爽李琼 | 欧美天堂一区二区三区| 国产成人精品亚洲午夜麻豆| 丝袜亚洲精品中文字幕一区| 亚洲女同女同女同女同女同69| 久久综合成人精品亚洲另类欧美| 欧美日韩激情一区二区三区| 99国产精品视频免费观看| 国产精品夜夜嗨| 裸体在线国模精品偷拍| 天天综合网天天综合色| 亚洲区小说区图片区qvod| 国产亚洲视频系列| 精品国产91久久久久久久妲己| 欧美日韩精品久久久| 欧美日韩在线电影| 91丨porny丨蝌蚪视频| 床上的激情91.| 国产成人夜色高潮福利影视| 久久99久国产精品黄毛片色诱| 日欧美一区二区| 五月婷婷色综合| 午夜精品一区二区三区免费视频| 亚洲图片激情小说| 亚洲欧洲精品一区二区三区| 国产精品视频第一区| 国产精品视频yy9299一区| 国产精品拍天天在线| 国产精品理论片| 最新高清无码专区| 中文字幕在线不卡一区二区三区| 国产欧美日韩三级| 国产精品毛片久久久久久久| 国产精品久久综合| 亚洲美女电影在线| 亚洲国产精品久久久久秋霞影院| 亚洲最新视频在线观看| 亚洲自拍偷拍av| 首页综合国产亚洲丝袜| 天天综合天天综合色| 天堂av在线一区| 九一久久久久久| 国产盗摄一区二区三区| 成人妖精视频yjsp地址| av亚洲精华国产精华精| 在线免费观看视频一区| 欧美日韩国产另类一区| 欧美v亚洲v综合ⅴ国产v| 久久久亚洲精品一区二区三区| 国产拍欧美日韩视频二区| 亚洲欧洲日韩综合一区二区| 亚洲国产一区二区视频| 天堂资源在线中文精品| 精品一区二区三区影院在线午夜 | 在线观看国产日韩| 欧美一区午夜精品| 久久久久国色av免费看影院| 国产精品乱人伦中文| 亚洲综合网站在线观看| 日韩高清电影一区| 国产精品一色哟哟哟| 91麻豆蜜桃一区二区三区| 欧美日韩国产a| 国产女人水真多18毛片18精品视频| 亚洲欧美另类小说视频| 蜜臀av性久久久久蜜臀aⅴ四虎 | 国产精品女主播av| 亚洲一卡二卡三卡四卡五卡| 久草热8精品视频在线观看| 成人短视频下载 | 中文字幕av一区 二区| 亚洲午夜影视影院在线观看| 国模一区二区三区白浆 | 久久精品视频一区二区三区| 亚洲欧美日本韩国| 韩国三级在线一区| 欧洲在线/亚洲| 国产欧美日韩亚州综合| 日本最新不卡在线| 9l国产精品久久久久麻豆| 日韩欧美视频一区| 亚洲麻豆国产自偷在线| 国产成人综合视频| 欧美一级专区免费大片| 亚洲欧美区自拍先锋| 国产盗摄视频一区二区三区| 欧美高清视频不卡网| 国产精品乱人伦中文| 精品一区二区三区欧美| 欧美欧美午夜aⅴ在线观看| 亚洲欧洲国产日韩| 国产综合色精品一区二区三区| 欧美三区在线视频| 亚洲精品视频在线观看免费| 国产盗摄女厕一区二区三区| 日韩亚洲欧美一区| 亚洲国产成人高清精品| 99re在线精品| 中文字幕av一区二区三区| 久久精品国产99久久6| 欧美视频一区在线| 日韩毛片在线免费观看| 成人理论电影网| 久久色.com| 免费成人av在线播放| 欧美视频一二三区| 亚洲色欲色欲www| 成人免费毛片app| 国产日产精品1区| 国产综合色在线视频区| 日韩欧美激情在线| 美女在线一区二区| 日韩一区二区在线观看视频播放| 亚洲综合在线第一页| 色综合久久天天综合网| 亚洲三级在线免费观看| av网站一区二区三区| 国产精品毛片a∨一区二区三区| 成人在线综合网| 国产女主播一区| 成人av电影在线| 亚洲欧美在线视频观看| 99久久精品久久久久久清纯| 欧美激情一区二区三区四区| 国产精品一区一区| 久久精品一区四区| 国产剧情在线观看一区二区| 国产人久久人人人人爽| 高清beeg欧美| 国产精品美女视频| 91丝袜国产在线播放| 亚洲精品ww久久久久久p站| 91老师片黄在线观看| 亚洲综合色噜噜狠狠| 欧美日韩国产影片| 日韩高清在线一区| 精品处破学生在线二十三| 国模娜娜一区二区三区| 国产精品三级电影| 99麻豆久久久国产精品免费 | 韩国av一区二区三区| 久久久不卡网国产精品一区| 国产成人丝袜美腿| 亚洲欧洲99久久| 欧美日韩在线综合| 久久国产尿小便嘘嘘尿| 久久久精品中文字幕麻豆发布| 国产乱子伦一区二区三区国色天香 | 日日摸夜夜添夜夜添精品视频| 日韩免费电影网站| 懂色av中文一区二区三区| 亚洲欧美一区二区久久| 欧美日韩亚洲高清一区二区| 狠狠色狠狠色综合日日91app| 亚洲国产精品成人综合色在线婷婷| eeuss鲁片一区二区三区 | 成人免费毛片高清视频| 亚洲狠狠爱一区二区三区| 日韩一区二区免费高清| 国产传媒一区在线| 亚洲国产精品久久人人爱蜜臀| 精品少妇一区二区三区在线视频| 国产成人在线视频播放| 亚洲一区二区欧美日韩| 亚洲精品一区在线观看| 色婷婷综合五月| 日本一区中文字幕| 国产精品久久久久久久久搜平片 | 久久99精品一区二区三区三区| 国产精品乱子久久久久| 91精品国产欧美日韩| 成人激情免费电影网址| 亚洲成人黄色影院| 国产三级一区二区| 欧美日韩精品一区二区三区四区 | 欧美一区二区人人喊爽| 国产精品1区2区| 日日夜夜免费精品| 一区在线播放视频| 久久蜜桃一区二区| 欧美日韩视频专区在线播放| 东方aⅴ免费观看久久av| 水野朝阳av一区二区三区| 国产精品国产三级国产有无不卡 | 亚洲国产日韩a在线播放性色| 2017欧美狠狠色| 制服丝袜亚洲精品中文字幕| 成人成人成人在线视频| 蜜臀99久久精品久久久久久软件| 日韩一区在线看|