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

📄 charge1.cpp

📁 使用VC++编写的自动找币机的控制程序。 有sql2000数据库
💻 CPP
字号:
// charge1.cpp: implementation of the charge class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "AutoChangeMoney.h"
#include "charge1.h"
#include "AutoChangeMoneyDlg.h"

#include "AutoChangeMoneyDlg.h"

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

charge::charge()
{

}
charge::~charge()
{

}
//接收由找零机返回的有效数据,并保存在数组中
int charge::recieve()
{
	m_comm->GetInput();
    int k=0,m=0,j=0;
	BOOL flag =1;
	VARIANT vResponse;	
	RcvData.RemoveAll();
	RcvData.SetSize(RcvData.GetSize());	
	while(flag)
	{
		k=m_comm->GetInBufferCount();
		if(k>0)									//如果输入缓冲器有数据
		{
			t=t+k;								//接收到的数据的总数
			m_comm->SetInputLen(k);
			vResponse=m_comm->GetInput();
			unsigned char *pbval;
			pbval=(unsigned char *)vResponse.parray->pvData;
			for(int i=0;i<k;i++)
				RcvData.Add(pbval[i]);			//接收数据
			if(t>=22)
			{
				for(j=m;j<t-20;j++)				//查询是否有有效数据
				{
					if((RcvData.GetAt(j)==0x01)&&(RcvData.GetAt(j+1)==0x50)
						&&(RcvData.GetAt(j+2)==0x02)&&(RcvData.GetAt(j+3)==array.GetAt(3)))
						{						//如果检测到有效数据头,则对校验位进行校验
							BYTE bcc2 = 0x00;
							for(int it=j;it<j+20;it++)						
								bcc2 = bcc2^RcvData.GetAt(it);						
							if(bcc2 == RcvData.GetAt(j+20))
							{					//如果校验位正确,则只将有位数据保存在数组rcv[]中
								flag=0;
								for(int i=j;i<t;i++)
									rcv[i-j]=RcvData.GetAt(i);
								Sleep(2500);
								while(m_comm->GetInBufferCount())
								{m_comm->GetInput();}
								return j;						//返回有效起始位的位置
							}
						}
				}	
				m=j;	//下次查找有效数据的起点
				
			}
		} 
	}
}
//设置并发送数据,进行找零
void charge::send()
{
     unsigned int d;
     BYTE bcc = 0x00;
	 array.SetAt(4,array.GetAt(4)+tenup);
	 array.SetAt(5,array.GetAt(5)+tenlow);
	 array.SetAt(6,array.GetAt(6)+oneup);
	 array.SetAt(7,array.GetAt(7)+onelow);
	 for(int i = 0;i<9;i++)
	 bcc = bcc^array.GetAt(i);//设置校验位
	 d = bcc;
	 array.SetAt(9,d);
     m_comm->SetOutput(COleVariant(array));
}
//初始化成员变量,
charge::charge(CMSComm *m_comm, unsigned int a, unsigned int b, unsigned int c, unsigned int d)
{
//	for(int i=0;i<100;i++)
//		rcv[i] = 0;
	this->m_comm = m_comm;
    array.RemoveAll();
    array.Add(0x04);
    array.Add(0x50);
    array.Add(0x02);
    array.Add(0x56);	//cmd
    array.Add(0x30);	//upperdata 0十张
    array.Add(0x30);	//upperdata 0张
    array.Add(0x30);	//lowwerdata 0十张
	array.Add(0x30);	//lowwerdata 0张
    array.Add(0x03);
	array.Add(0x03);    //校验位
	tenup = a;
	tenlow = b;
	oneup = c;
	onelow = d;
	t=0;
}
//返回接收到的数据总数
int charge::getnumber()
{
return t;
}
//返回从找零机返回的数据的数组
unsigned int* charge::get()
{
	return rcv;
}

⌨️ 快捷键说明

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