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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? abcommsprocessor.h

?? 用于開發Modbus工業級通信
?? H
字號:
/////////////////////////////////////////////////////////////////////////////
//
// FILE: ABCommsProcessor.h : headder file
//
// See _README.CPP
//
// Interface for the CMODCommsProcessor class.
// This was previosly where the TICommsProcessor class lived.
//
/////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_COMMSPROCESSOR_H__FDE99A84_435C_4094_826C_175DBDB6E61F__INCLUDED_)
#define AFX_COMMSPROCESSOR_H__FDE99A84_435C_4094_826C_175DBDB6E61F__INCLUDED_

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


#define AB_FUNC_WRITE3     (ALLENBRADLEY_WORD_WRITE)// 0xAA  // logical write with 3 fields
#define AB_FUNC_READ3      (ALLENBRADLEY_WORD_READ)//0xA2

#define AB_COMMAND_DIAGS   0x06  // the AB diagnostic funcs
#define AB_COMMAND_CPU     0x07  // CPU commands
#define AB_COMMAND_DRIVER  (ALLENBRADLEY_SLC_CMD)//0x0F  // DF1 driver commands

#define ABDF1SIM_NAME  "ABDF1SIM"

#define MAX_AB_MESSAGELEN  256  // RX of a command
#define AB_HEADDER_LEN       4  // STN CMD and Address and Length fields
#define AB_NET_LENGTH        8  // net layer length excl. data
#define AB_CRC_LEN           2  //
#define AB_BCC_LEN           1  //
#define AB_NORMAL_LEN        (AB_HEADDER_LEN + AB_NET_LENGTH + AB_CRC_LEN)

#define AB_MAXIMUM_NAKS       5

#define MAX_ABPORT_MESSAGELEN       512
#define MAX_AB_MEMFILES             255    // !!! valid files are 0-254

#define ABMASTER_IDLETIME     500     // between messages (end-to-start) time

#define AB_MASTER_ID          (BYTE)(m_JOYsource) // 10       // SCC unit station # is 10
#define JOY_SHEARERPLC_ID     0                   // sheared data slave PLC station #
#define JOY_SURFACEPLC_ID     (BYTE)(m_JOYdest)   //2        // surface data slave PLC station #

#define JOY_NUMSHIELDS                 (BYTE)(m_JOYShields) //20
#define JOY_FIRSTSHIELD                1   // always 1
#define JOY_SURFACEELEMENTS_START      0   // 1st register
#define JOY_SURFACEELEMENTS_END        10  //39  // last reg.

#define JOY_SURFACEPLCPOLLCOUNT        5   // # surface plc polls to do

#define JOY_MAXRAMPOSITION             50  // shield hydraulic ram limit
#define JOY_MINROOFPRESSURE            39  // 0=8000 psi = 39-200 (raw)
#define JOY_12VOLTS                    204 // 0-15v = 0-255 (raw)

extern CControllerMemory PLCMemory;

// Declares the BASE communication state-engine, which will simulate 
// a real CPU's actions. 
// TCP/Ethernet comms is far simpler, and has no state engine, TCP/IP protocols 
// will derive a CPU class directly from the socket wrapper class.
class CCommsProcessor : public SimulationSerialPort  
{
public:
   DECLARE_DYNAMIC(CCommsProcessor)

   CCommsProcessor(LPCTSTR    portNameShort, 
                     DWORD    baud, 
                     DWORD    byteSize, 
                     DWORD    parity, 
                     DWORD    stopBits,
                     DWORD    rts,
                     int      responseDelay);

	virtual ~CCommsProcessor();

   virtual BOOL OnProcessData(const CHAR *pBuffer, DWORD numBytes, BOOL *discardData) = NULL;

   void SetPDUSize(DWORD size) {m_PDUSize = size;};
   
   // overrridden functions
   virtual void RSDataDebugger(const BYTE * buffer, LONG length, int transmit);
   void RSStateChanged(DWORD state);

   virtual void ActivateStation(LONG stationID);
   virtual BOOL StationIsActivated(LONG stationID);

   // data/members
   virtual BOOL IsMasterBusy() {return(TRUE);}
   virtual BOOL SupportsMaster() {return(FALSE);}

   UINT  m_responseDelay;
   //BOOL  m_MOSCADchecks;      // MOSCAD
   //CRS232Noise m_NoiseSimulator;

   CRITICAL_SECTION stateCS;

private:

   DWORD m_PDUSize;
};



//////////////////////////////////////////////////////////////////////
//
class CABCommsProcessor : public CCommsProcessor
{
public:
   DECLARE_DYNAMIC(CABCommsProcessor)

   CABCommsProcessor(LPCTSTR    portNameShort, 
                     DWORD    baud, 
                     DWORD    byteSize, 
                     DWORD    parity, 
                     DWORD    stopBits,
                     DWORD    rts,
                     int      responseDelay,
					      BOOL     bcc);

   LONG Send(int numberOfBytestoWrite, 
             const BYTE* bufferPtr,
             BOOL insertDLEs, 
             CHAR* debugStrPtr
            );

   LPCTSTR ProtocolName() { return(m_protocolName);};
   void SetProtocolName(LPCTSTR name) { m_protocolName = name;};


   virtual BOOL StationIsEnabled(LONG stationID);

   // event handlers
   virtual BOOL OnMessageReceived(BYTE* pAppLayerMsg, DWORD length);  // return false to reject the message

   virtual BOOL OnProcessData(const CHAR *pBuffer, 
                            DWORD numBytes, 
                            BOOL *discardData);

   virtual void RSDataDebugger(const BYTE * buffer, LONG length, int transmit);
   virtual void RSDataMessage(LPCTSTR msg);
   virtual void RSStateChanged(DWORD state);
   // message sending
   virtual BOOL SendPLCMessage(const BYTE* pAppLayerMsg, DWORD length);  // if False, then re-send
   
   virtual void OnHWError(DWORD dwCommError);

   LONG GetRALength();

   BOOL  LoadRegisters();
   BOOL  SaveRegisters();

   WORD GetNextTransactionID(BYTE station);
   WORD GetCurrentTransactionID(BYTE station);
   WORD SetCurrentTransactionID(BYTE station, WORD id);

   BOOL TestReceiveMessage();
   //void BuildResponse(BYTE *buffer, DWORD *length);
   LONG InsertDLEs(const BYTE * buffer, DWORD len, BYTE* destBuff, DWORD *destLen);
   LONG RemoveDLE(const BYTE * buffer, DWORD len, BYTE * destBuff, DWORD *destLen);
   
   // get these into the dialog
   UINT  m_lastABFile;
   UINT  m_lastABItem;
   UINT  m_lastABTrans;
   UINT  m_lastABValue;
   UINT  m_lastABLength;
   CString m_lastRX;
   CString m_lastTX;
   // JOY
   DWORD m_JOYsource;   // this ID
   DWORD m_JOYdest;     // Adroit/slave station ID
   DWORD m_JOYShields;
   BOOL  m_JOYrunMode;
   BOOL  m_JOYreadVariables;
   BOOL  m_JOYwriteVariables;


   void DoMaster();  // any master PLC routines can run here

   virtual BOOL IsMasterBusy() {return(m_masterBusy);}

   virtual BOOL SupportsMaster() {return(TRUE);}

   // CPU state engine data
   enum __EngineModes
   {
      MODE_SLAVE,
      MODE_MASTER
   };

   enum __EngineStates
   {
      ENG_STATE_IDLE=0,    // wait for start
      ENG_STATE_RECEIVE,   // RX rest of telegram + ETX + CRC
      ENG_STATE_SENDACK,   // sending an ACK
      ENG_STATE_RESPOND,   // sending msg response
      ENG_STATE_FINALACK,  // wait for final ACK
      ENG_STATE_MASTERIDLE // for PLC master
   };

   BOOL  m_masterBusy;        // so that master knows it is waiting for a ACK
   BOOL  m_masterWaiting;
   DWORD m_lastMasterTick;    // last busy trans tick (to stop master just sending all the time)
   DWORD m_ABmasterIDLETime;
   DWORD m_ABtimeoutValue;


   void SetEngineState(__EngineStates stateStep);
   CString m_CPUstateEngineStepname;

   BOOL m_modifyThenRespond;
   BOOL m_disableWrites;
   BOOL	m_useBCCchecks;

   BOOL IsMaster() { return( MODE_MASTER == m_CPUmode);};
   BOOL MasterTimedOut();

private:
   __EngineStates m_CPUstateEngineStep;
   __EngineModes  m_CPUmode;  // MODE_MASTER or slave

   BYTE  m_lastAppBuffer[MAX_ABPORT_MESSAGELEN*2];  //keep space for double DLE
   DWORD m_lastAppLength;
   DWORD m_messageNAKs;


   // noise string
   BYTE  m_noiseBuffer[MAX_ABPORT_MESSAGELEN*2];  //keep space for 2 messages
   DWORD m_guardJunk;
   DWORD m_noiseLength;

   static CString m_protocolName;

protected:
   WORD m_masterTN[256];   // transaction numbers are kept per station
   WORD m_masterRandom;    // pseudo-random sequence variable

   LONG m_surfacePolls;    // counts down to zero
};



///////////////////////////////////////////////////////////////////////
// PLC application program layer class
//
class CPLCApplication : public CABCommsProcessor
{
public:
   DECLARE_DYNAMIC(CPLCApplication)

   CPLCApplication(LPCTSTR    portNameShort, 
                     DWORD    baud, 
                     DWORD    byteSize, 
                     DWORD    parity, 
                     DWORD    stopBits,
                     DWORD    rts,
                     int      responseDelay,
                     BOOL  MOSCADchecks,
                      BOOL modifyThenRespond,
                      BOOL disableWrites,
					  BOOL bcc);
   // event handlers
   virtual BOOL OnMessageReceived(BYTE* pAppLayerMsg, DWORD length);  // return false to reject the message

   // message sending
   virtual BOOL SendPLCMessage(const BYTE* pAppLayerMsg, DWORD length);  // if False, then re-send

   BOOL SendPLCBlock(BYTE sourceStationID, 
                     BYTE destStationID, 
                     WORD TNS, 
                     WORD fileNum,
                     WORD startRegister,
                     WORD numRegisters);
   BOOL FetchPLCBlock(BYTE sourceStationID, 
                      BYTE destStationID, 
                      WORD TNS, 
                      WORD fileNum,
                      WORD startRegister,
                      WORD numRegisters);
private:
   void BuildResponse(const BYTE *inBuffer, DWORD inLength, BYTE *buffer, DWORD *length);
   
   // members
   WORD  m_TNS;
};

//
//
class CAB232CommsProcessor : public CPLCApplication
{
public:

   DECLARE_DYNAMIC(CAB232CommsProcessor)

   CAB232CommsProcessor(LPCTSTR portNameShort, 
                        DWORD  baud, 
                        DWORD byteSize, 
                        DWORD parity, 
                        DWORD stopBits,
                        DWORD rts,
                        int responseDelay,
                        BOOL MOSCADchecks,
                        BOOL modifyThenRespond,
                        BOOL disableWrites,
		       				BOOL bcc,
                        DWORD idleTime,
                        DWORD timeoutValue
                       );


   CRS232Noise m_NoiseSimulator;

   void SetEmulationParameters(BOOL moscadChecks, 
                               BOOL modifyThenRespond, 
                               BOOL disableWrites
                              );
   void SetJoyParameters(DWORD source, DWORD dest, DWORD shields, BOOL run, BOOL read, BOOL write)\
      { m_JOYsource = source; m_JOYdest = dest; m_JOYShields = shields; m_JOYrunMode = run; m_JOYreadVariables = read; m_JOYwriteVariables = write; }


};


#endif // !defined(AFX_COMMSPROCESSOR_H__FDE99A84_435C_4094_826C_175DBDB6E61F__INCLUDED_)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区在线免费观看视频| 91伊人久久大香线蕉| 欧美男男青年gay1069videost| 一区av在线播放| 欧美高清视频一二三区| 日本vs亚洲vs韩国一区三区 | 中文字幕一区在线观看视频| 高清国产一区二区三区| 亚洲欧美在线视频| 欧美日韩激情一区| 精品中文av资源站在线观看| 国产清纯白嫩初高生在线观看91 | 国产日韩欧美电影| 91看片淫黄大片一级在线观看| 一区二区三区精品在线观看| 欧美日韩黄色影视| 岛国精品在线观看| 亚洲第一主播视频| 欧美精品一区二区在线观看| www.66久久| 久久草av在线| 专区另类欧美日韩| 欧美电视剧在线观看完整版| 成人黄色综合网站| 日本欧美加勒比视频| 国产精品区一区二区三| 欧美日本在线视频| 成人精品免费视频| 天天操天天色综合| 中文字幕一区二区三| 3d动漫精品啪啪| 99久免费精品视频在线观看| 日韩精品福利网| 成人欧美一区二区三区黑人麻豆 | 一区二区理论电影在线观看| 日韩欧美另类在线| 在线日韩国产精品| 处破女av一区二区| 亚洲国产精品尤物yw在线观看| 久草在线在线精品观看| 亚洲人成网站色在线观看| 欧美一区欧美二区| 色噜噜狠狠成人中文综合| 免费人成精品欧美精品| 亚洲精品日产精品乱码不卡| 日韩美女一区二区三区| 欧洲一区在线观看| av不卡一区二区三区| 精品一区二区在线免费观看| 亚洲sss视频在线视频| 国产精品美女视频| 久久久另类综合| 91精品国产色综合久久久蜜香臀| 99re热这里只有精品免费视频| 国产制服丝袜一区| 麻豆国产91在线播放| 午夜av一区二区三区| 亚洲美女视频一区| 国产精品福利一区| 国产丝袜欧美中文另类| 欧美变态凌虐bdsm| 日韩欧美视频在线| 欧美一二三四区在线| 538在线一区二区精品国产| 色屁屁一区二区| 91原创在线视频| caoporn国产精品| 99精品视频一区| www.在线成人| 99久久久国产精品| 91在线播放网址| 欧美亚洲愉拍一区二区| 91视视频在线观看入口直接观看www | 精品夜夜嗨av一区二区三区| 亚洲chinese男男1069| 国产99精品国产| 粉嫩在线一区二区三区视频| 国产在线播精品第三| 国产一区激情在线| 国产999精品久久| 成人免费福利片| 色女孩综合影院| 欧美日韩国产一级片| 3751色影院一区二区三区| 777精品伊人久久久久大香线蕉| 91精品麻豆日日躁夜夜躁| 日韩午夜电影av| 久久久久亚洲蜜桃| 国产精品伦一区二区三级视频| 国产精品久久久久影视| 亚洲男同性恋视频| 视频一区视频二区中文字幕| 美女国产一区二区三区| 精品一区二区在线免费观看| 国产suv精品一区二区6| 91小视频免费观看| 欧美性生活久久| 欧美mv日韩mv国产网站| 久久只精品国产| 综合亚洲深深色噜噜狠狠网站| 亚洲在线免费播放| 毛片不卡一区二区| 成人av电影在线播放| 欧美性高清videossexo| 91精品国产综合久久久久久漫画| 精品国产乱码久久久久久久久| 国产精品私人影院| 亚洲自拍与偷拍| 久久成人精品无人区| 99精品国产视频| 欧美一级二级三级蜜桃| 国产午夜亚洲精品理论片色戒| 一区二区三区在线免费视频| 日本欧美在线看| 91免费视频观看| 日韩精品专区在线影院观看| 亚洲国产精品国自产拍av| 午夜精品免费在线观看| 国产高清精品网站| 在线播放中文一区| 国产精品萝li| 久久国产生活片100| 一本久道久久综合中文字幕| 日韩午夜精品视频| 亚洲黄色免费电影| 国产精品亚洲午夜一区二区三区| 91福利视频久久久久| 欧美成人三级电影在线| 一区二区三区日韩精品视频| 国产精品99久久久久久似苏梦涵| 9191精品国产综合久久久久久| 国产精品天干天干在观线| 青青草成人在线观看| 91高清视频免费看| 中文字幕一区二| 国产精品一区久久久久| 欧美日韩国产bt| 亚洲欧美一区二区三区国产精品| 国模套图日韩精品一区二区| 欧美在线影院一区二区| 国产精品高潮呻吟久久| 国产精品资源在线看| 91精品国产全国免费观看| 亚洲毛片av在线| 成人午夜碰碰视频| 国产亚洲精品7777| 久草这里只有精品视频| 欧美一区永久视频免费观看| 亚洲激情校园春色| 99久久精品国产网站| 久久精品日韩一区二区三区| 美国毛片一区二区三区| 欧美一区二区三区视频在线| 亚洲午夜在线视频| 欧美视频在线一区| 一区二区三区视频在线看| www.欧美亚洲| 中文字幕精品在线不卡| 国产在线视视频有精品| 日韩精品自拍偷拍| 精品影视av免费| 精品少妇一区二区| 狂野欧美性猛交blacked| 制服丝袜激情欧洲亚洲| 婷婷中文字幕综合| 日韩一级在线观看| 久久精品国产精品青草| 91精品国产乱| 久久99精品视频| 久久先锋影音av| 国产激情视频一区二区三区欧美| 久久网这里都是精品| 激情综合亚洲精品| 久久精品男人天堂av| 国产精品亚洲第一区在线暖暖韩国| 久久综合久久综合亚洲| 国产一区日韩二区欧美三区| 久久综合成人精品亚洲另类欧美 | 国产综合久久久久久鬼色| 精品免费国产一区二区三区四区| 精品制服美女丁香| 国产片一区二区| jizzjizzjizz欧美| 亚洲国产成人av| 日韩欧美国产电影| 国产精品亚洲午夜一区二区三区| 国产精品水嫩水嫩| 欧洲亚洲国产日韩| 毛片av一区二区| 国产精品私房写真福利视频| 色综合视频一区二区三区高清| 亚洲a一区二区| 久久久久久97三级| 色哟哟精品一区| 蜜臀精品一区二区三区在线观看| 国产欧美在线观看一区| 色综合久久99| 美女视频网站黄色亚洲| 国产精品美女久久久久久久网站| 欧美日韩一级二级|