// ClientComm.h: interface for the CClientComm class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_CLIENTCOMM_H__CBB299F7_881D_4795_BDF7_8FB7C38EEA1E__INCLUDED_)
#define AFX_CLIENTCOMM_H__CBB299F7_881D_4795_BDF7_8FB7C38EEA1E__INCLUDED_


#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define  MAX_COM_RXBUFF 10240
class CClientComm : public CnComm  
{
public:
	s16 DealReceive(void);
	

	u16  DIReadFLag[10];//读取标志位
	u8   DIStatus[24];//光耦输入状态


	u16  DOReadFLag[10];//读取标志位
	u16  DOWriteFLag[10];//操作标志位
	u8   DOStatus[16];//继电器状态

	u16  HoldReadFLag[10];//读取标志位
	u16  HoldWriteFLag[10];//操作标志位
	u16  HoldStatus[10];

	u16  InputReadFLag[10];//读取标志位
	u16  InputWriteFLag[10];//操作标志位
	u16  InputStatus[16];

	u8   ReadAddrFlag;
	u16  ReadAddr;


	u8   equipaddr; //设备地址
	u8   comport;//串口号
	u8   sendflag;
	u8   usingflag;

	u16   DO_START;
	u16   DI_START;
	u16   AI_START;
	u16   AO_START;
	u8   DI_CNT;
	u8   DO_CNT;
	u8   AI_CNT;
	u8   AO_CNT;
	u16  mbBaud1Reg;//波特率地址
	u16  mbBaud2Reg;//波特率地址
	u16  mbaddrReg;//偏移地址的地址
	u16  mbWorkReg;//工作模式
	u16  mbWorkTime;//继电器时间
	u16 mbRaddrReg;

	u32  comsetinfo[4];////波特率 数据位 校验方式 停止位	

	long prevtime; //串口接收时间
	DWORD prevSendtime;//上次发送时间
	bool SetComState(s16 status);//设置串口状态

	bool RqComm;

	s16 comsend(u8 *src,s16 srclen=0);//发送数据
	
	s16 OpertorDO(s16 ioindex,bool onoff);//处理单个继电器
	s16 OpertorDO(bool onoff);          //处理所有继电器
	s16 AskDO(void);
	s16 AskDI(void);
	s16 AskAI(void);

	s16 OpertorRReg(u16 addr, u16 regstart, u16 regnum);
	s16 OpertorRHolding(u16 addr, u16 regstart, u16 regnum);
	s16 OpertorWHolding(u16 addr, u16 regstart, u16 regnum, void *src);

	s16 OpertorWJD(int jdindex, int mode, int time);

	s16 OpertorWBaud(int baud232,int baud485);
	s16 OpertorRBaud();

	s16 OpertorWBaseAddr(int addr);
	s16 OpertorRBaseAddr();

	s16 OpertorWWorkmMode(u16 workmode);
	s16 OpertorRWorkmMode();

	s16 OpertorWWorkmTime(u16 worktime);
	s16 OpertorRWorkmTime();	

	s16 OpertorWAO(u16 ao, u16 aodata);
	s16 OpertorRAO();

	s16 OpertorRAddr();


	s16 DealCode(u8 *src,s16 srclen);     //处理接收数据
	s16 DealModbus(u8 *src,s16 srclen); //处理modbus协议
	s16 CloseCom(void);

	u8 rcvingbuf[MAX_COM_RXBUFF+2];
	u16 rcvbufferlen;

	u8 CloseThread;
	u8 RstThread;

	CString info;
	bool IsDebug;

	CClientComm();
	virtual ~CClientComm();
};

#endif // !defined(AFX_CLIENTCOMM_H__CBB299F7_881D_4795_BDF7_8FB7C38EEA1E__INCLUDED_)
