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

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

?? ms_rab.lib

?? modbus 運(yùn)用事例
?? LIB
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
;=====================================================================
; msError : Reset Packet Processing
;
; INPUT  :
;          None
; OUTPUT :
;          None

msError::
					ld		hl, (MS_TIMER+2)	; get lower bytes of MS_TIMER
					ld		(wMSRLast),hl
					ld		hl,acMSCmd			; pcMSCmd = acMSCmd
					ld		(pcMSCmd),hl
					ret							; Done

;=====================================================================
; msRecv : Next Byte Received from MODBus
;
; INPUT  :
;          HL = Byte Received
; OUTPUT :
;          None

msRecv::			push	de						; Protect DE
					ld		a,l					; A = Byte Received
					ld		de,(pcMSCmd)		; DE = Buffer Pointer
					ld		hl,pcMSCmd-2		; HL = End of Buffer
					or		a						; Done if Buffer Full
					sbc	hl,de
					jr		c,msR2
					ex		de,hl					; HL = Buffer Pointer
					ld		(hl),a				; Store Byte to Buffer
					inc	hl						; Bump Pointer
					ld		(pcMSCmd),hl
msR2:
					ld		hl, (MS_TIMER+2)	; get lower bytes of MS_TIMER
					ld		(wMSRLast),hl
					pop	de						; Restore DE
					ret							; Done
#endasm

/*=========================================================================*\
	Compute Cyclic Redundancy Check
\*=========================================================================*/

const char acMSRHi[] = {
	0x00,0xC1,0x81,0x40,	0x01,0xC0,0x80,0x41,	0x01,0xC0,0x80,0x41,	0x00,0xC1,0x81,0x40,
	0x01,0xC0,0x80,0x41,	0x00,0xC1,0x81,0x40,	0x00,0xC1,0x81,0x40,	0x01,0xC0,0x80,0x41,
	0x01,0xC0,0x80,0x41,	0x00,0xC1,0x81,0x40,	0x00,0xC1,0x81,0x40,	0x01,0xC0,0x80,0x41,
	0x00,0xC1,0x81,0x40,	0x01,0xC0,0x80,0x41,	0x01,0xC0,0x80,0x41,	0x00,0xC1,0x81,0x40,
	0x01,0xC0,0x80,0x41,	0x00,0xC1,0x81,0x40,	0x00,0xC1,0x81,0x40,	0x01,0xC0,0x80,0x41,
	0x00,0xC1,0x81,0x40,	0x01,0xC0,0x80,0x41,	0x01,0xC0,0x80,0x41,	0x00,0xC1,0x81,0x40,
	0x00,0xC1,0x81,0x40,	0x01,0xC0,0x80,0x41,	0x01,0xC0,0x80,0x41,	0x00,0xC1,0x81,0x40,
	0x01,0xC0,0x80,0x41,	0x00,0xC1,0x81,0x40, 0x00,0xC1,0x81,0x40,	0x01,0xC0,0x80,0x41,
	0x01,0xC0,0x80,0x41,	0x00,0xC1,0x81,0x40,	0x00,0xC1,0x81,0x40,	0x01,0xC0,0x80,0x41,
	0x00,0xC1,0x81,0x40,	0x01,0xC0,0x80,0x41,	0x01,0xC0,0x80,0x41,	0x00,0xC1,0x81,0x40,
	0x00,0xC1,0x81,0x40,	0x01,0xC0,0x80,0x41,	0x01,0xC0,0x80,0x41,	0x00,0xC1,0x81,0x40,
	0x01,0xC0,0x80,0x41,	0x00,0xC1,0x81,0x40,	0x00,0xC1,0x81,0x40,	0x01,0xC0,0x80,0x41,
	0x00,0xC1,0x81,0x40,	0x01,0xC0,0x80,0x41,	0x01,0xC0,0x80,0x41,	0x00,0xC1,0x81,0x40,
	0x01,0xC0,0x80,0x41,	0x00,0xC1,0x81,0x40,	0x00,0xC1,0x81,0x40,	0x01,0xC0,0x80,0x41,
	0x01,0xC0,0x80,0x41,	0x00,0xC1,0x81,0x40,	0x00,0xC1,0x81,0x40,	0x01,0xC0,0x80,0x41,
	0x00,0xC1,0x81,0x40,	0x01,0xC0,0x80,0x41,	0x01,0xC0,0x80,0x41,	0x00,0xC1,0x81,0x40
};

const char acMSRLo[] = {
   0x00,0xC0,0xC1,0x01, 0xC3,0x03,0x02,0xC2,	0xC6,0x06,0x07,0xC7,	0x05,0xC5,0xC4,0x04,
   0xCC,0x0C,0x0D,0xCD,	0x0F,0xCF,0xCE,0x0E, 0x0A,0xCA,0xCB,0x0B,	0xC9,0x09,0x08,0xC8,
   0xD8,0x18,0x19,0xD9, 0x1B,0xDB,0xDA,0x1A,	0x1E,0xDE,0xDF,0x1F, 0xDD,0x1D,0x1C,0xDC,
   0x14,0xD4,0xD5,0x15,	0xD7,0x17,0x16,0xD6, 0xD2,0x12,0x13,0xD3,	0x11,0xD1,0xD0,0x10,
   0xF0,0x30,0x31,0xF1,	0x33,0xF3,0xF2,0x32,	0x36,0xF6,0xF7,0x37,	0xF5,0x35,0x34,0xF4,
	0x3C,0xFC,0xFD,0x3D,	0xFF,0x3F,0x3E,0xFE,	0xFA,0x3A,0x3B,0xFB,	0x39,0xF9,0xF8,0x38,
	0x28,0xE8,0xE9,0x29,	0xEB,0x2B,0x2A,0xEA,	0xEE,0x2E,0x2F,0xEF,	0x2D,0xED,0xEC,0x2C,
	0xE4,0x24,0x25,0xE5,	0x27,0xE7,0xE6,0x26,	0x22,0xE2,0xE3,0x23,	0xE1,0x21,0x20,0xE0,
	0xA0,0x60,0x61,0xA1,	0x63,0xA3,0xA2,0x62,	0x66,0xA6,0xA7,0x67,	0xA5,0x65,0x64,0xA4,
	0x6C,0xAC,0xAD,0x6D,	0xAF,0x6F,0x6E,0xAE,	0xAA,0x6A,0x6B,0xAB,	0x69,0xA9,0xA8,0x68,
	0x78,0xB8,0xB9,0x79,	0xBB,0x7B,0x7A,0xBA,	0xBE,0x7E,0x7F,0xBF,	0x7D,0xBD,0xBC,0x7C,
	0xB4,0x74,0x75,0xB5,	0x77,0xB7,0xB6,0x76,	0x72,0xB2,0xB3,0x73,	0xB1,0x71,0x70,0xB0,
	0x50,0x90,0x91,0x51,	0x93,0x53,0x52,0x92,	0x96,0x56,0x57,0x97,	0x55,0x95,0x94,0x54,
	0x9C,0x5C,0x5D,0x9D,	0x5F,0x9F,0x9E,0x5E,	0x5A,0x9A,0x9B,0x5B,	0x99,0x59,0x58,0x98,
	0x88,0x48,0x49,0x89,	0x4B,0x8B,0x8A,0x4A,	0x4E,0x8E,0x8F,0x4F,	0x8D,0x4D,0x4C,0x8C,
	0x44,0x84,0x85,0x45,	0x87,0x47,0x46,0x86,	0x82,0x42,0x43,0x83,	0x41,0x81,0x80,0x40
};

nodebug
unsigned
msrCRC			(	char				*pcMess,
						unsigned			wLen
					)

{	char			cHi,cLo;						//	CRC Acc (MSB & LSB)
	unsigned		w;								//	CRC Shift In Index

		cHi = cLo = 0xFF;						//	Init CRC
		while (wLen--) {						//	For Each Byte   
			w = cHi ^ *pcMess++;					//	Next Table Index
			cHi = cLo ^ acMSRHi[w];				//	Next CRC
			cLo = acMSRLo[w];
		}
		return (cHi << 8) | cLo;			//	Return Composite
}

/*=========================================================================*\
	Assemble MODBus RTU Packet & Process when Done
\*=========================================================================*/

nodebug
void
msRun				(	void
					)
					
{	unsigned			wCRC;
	unsigned			wLen;
	char				buf[256];
	unsigned			i;

	
		costate sMSRun always_on {
			msError ();
			do {
				wLen = msXread(buf, 256, wMSRTO);
				for (i=0; i<wLen; i++)
					msRecv(buf[i]);
			} while (!wLen);
						
			wMSRLast = (unsigned)(MS_TIMER & 0x00FFul);

			if (4 <= wLen) {
				wCRC = msrCRC ( acMSCmd,wLen-2 );
				if (wCRC == msCmdWord ( wLen-2 )) {
					if (!acMSCmd[0] || (acMSCmd[0] == wMSAddr)) {
						if (msExec() && acMSCmd[0]) {
							wCRC = msrCRC(acMSRep,pcMSRep-acMSRep);
							msRepWord ( wCRC );

							waitfor ( wMSRTO < ((unsigned)(MS_TIMER & 0x00FFul)-wMSRLast) );

							msSend ( NULL,0 );
							waitfor ( msSend ( acMSRep,pcMSRep-acMSRep ) );
						}
					}
				}
			}
		}
}

/*=========================================================================*\
	Initialize MODBus RTU Driver
\*=========================================================================*/

nodebug
void
msrInit			(	unsigned			wAddr,
						unsigned			wTO
					)
					
{		wMSRTO = wTO;
		msError ();
		msInit ( wAddr );
}

/*=========================================================================*\
	Stubs for functions that need to be defined in the user's code.
\*=========================================================================*/

/*** BeginHeader */

void msStart();
void msDone();
int msIn(unsigned wCoil, int *pnState);
int msOutRd(unsigned wCoil, int *pnState);
int msOutWr(unsigned wCoil, int bState);
int msInput(unsigned wReg, unsigned *pwValue);
int msRead(unsigned wReg, unsigned *pwValue);
int msWrite(unsigned wReg, unsigned wValue);

/*** EndHeader */

/* START FUNCTION DESCRIPTION *****************************************
msStart                       <Called by MS_RAB.LIB>

NOTE: MS_RAB.LIB functions are generally not reentrant.

SYNTAX: void msStart()

DESCRIPTION: Called just before a received Modbus packet is processed,
this function is primarily intended to be used to lock resources so
that data returned in one Modbus response packet are atomic. Locking
resources may or may not be required, depending on how the msIn(),
msInput(), msOutRd() and msOutWr() functions are implemented in a
particular Modbus slave application. Note that Modbus command handler
functions in MS_RAB.LIB may make multiple calls to those functions while
responding to a single Modbus command.

RETURN VALUE: None.
END DESCRIPTION ******************************************************/


/* START FUNCTION DESCRIPTION *****************************************
msDone                        <Called by MS_RAB.LIB>

NOTE: MS_RAB.LIB functions are generally not reentrant.

SYNTAX: void msDone()

DESCRIPTION: Called just after a received Modbus command has been
processed and just before the reply is sent. This function is intended
to be used to unlock resources that were locked by msStart(). Locking
resources may or may not be required, depending on how the msIn(),
msInput(), msOutRd() and msOutWr() functions are implemented in a
particular Modbus slave application. Note that Modbus command handler
functions in MS_RAB.LIB may make multiple calls to those functions while
responding to a single Modbus command.

RETURN VALUE: None.
END DESCRIPTION ******************************************************/


/* START FUNCTION DESCRIPTION *****************************************
msIn                          <Required by MS_RAB.LIB>

NOTE: MS_RAB.LIB functions are generally not reentrant.

SYNTAX: int msIn(unsigned wCoil, int *pnState)

DESCRIPTION: Places the on (1) or off (0) status of a single discrete
input (coil) into the integer pointed to by *pnState. If the Modbus
slave application is to support discrete inputs (coils, 0X references)
then this function must be implemented in the Modbus slave application.

PARAMETER1: discrete input (coil) number (zero based).
PARAMETER2: input (coil) status information pointer.

RETURN VALUE: 0 if success, or exception code if error. See the MS_*
definitions near the start of MS_RAB.LIB for the complete list.
END DESCRIPTION ******************************************************/


/* START FUNCTION DESCRIPTION *****************************************
msOutRd                       <Required by MS_RAB.LIB>

NOTE: MS_RAB.LIB functions are generally not reentrant.

SYNTAX: int msOutRd(unsigned wCoil, int *pnState)

DESCRIPTION: Places the on (1) or off (0) status of a single output
coil into the integer pointed to by *pnState. If the Modbus slave
application is to support output coils (1X references) then this
function must be implemented in the Modbus slave application.

PARAMETER1: output coil number (zero based).
PARAMETER2: coil status information pointer.

RETURN VALUE: 0 if success, or exception code if error. See the MS_*
definitions near the start of MS_RAB.LIB for the complete list.
END DESCRIPTION ******************************************************/


/* START FUNCTION DESCRIPTION *****************************************
msOutWr                       <Required by MS_RAB.LIB>

NOTE: MS_RAB.LIB functions are generally not reentrant.

SYNTAX: int msOutWr(unsigned wCoil, int bState)

DESCRIPTION: Forces the on (1) or off (0) state of a single output
coil according to the logic value in bState. If the Modbus slave
application is to support output coils (1X references) then this
function must be implemented in the Modbus slave application.

PARAMETER1: output coil number (zero based).
PARAMETER2: coil state to be forced.

RETURN VALUE: 0 if success, or exception code if error. See the MS_*
definitions near the start of MS_RAB.LIB for the complete list.
END DESCRIPTION ******************************************************/


/* START FUNCTION DESCRIPTION *****************************************
msInput                       <Required by MS_RAB.LIB>

NOTE: MS_RAB.LIB functions are generally not reentrant.

SYNTAX: int msInput(unsigned wReg, unsigned *pwValue)

DESCRIPTION: Places the current value of a single input register into
the unsigned integer pointed to by *pwValue. If the Modbus slave
application is to support input registers (3X references) then this
function must be implemented in the Modbus slave application.

PARAMETER1: input register number (zero based).
PARAMETER2: register information pointer.

RETURN VALUE: 0 if success, or exception code if error. See the MS_*
definitions near the start of MS_RAB.LIB for the complete list.
END DESCRIPTION ******************************************************/


/* START FUNCTION DESCRIPTION *****************************************
msRead                        <Required by MS_RAB.LIB>

NOTE: MS_RAB.LIB functions are generally not reentrant.

SYNTAX: int msRead(unsigned wReg, unsigned *pwValue)

DESCRIPTION: Places the current value of a single holding register into
the unsigned integer pointed to by *pwValue. If the Modbus slave
application is to support holding registers (4X references) then this
function must be implemented in the Modbus slave application.

PARAMETER1: holding register number (zero based).
PARAMETER2: register information pointer.

RETURN VALUE: 0 if success, or exception code if error. See the MS_*
definitions near the start of MS_RAB.LIB for the complete list.
END DESCRIPTION ******************************************************/


/* START FUNCTION DESCRIPTION *****************************************
msWrite                       <Required by MS_RAB.LIB>

NOTE: MS_RAB.LIB functions are generally not reentrant.

SYNTAX: int msWrite(unsigned wReg, unsigned wValue)

DESCRIPTION: Forces the contents of a single holding register to
the unsigned integer value in wValue. If the Modbus slave application
is to support holding registers (4X references) then this function must
be implemented in the Modbus slave application.

PARAMETER1: holding register number (zero based).
PARAMETER2: register value to be forced.

RETURN VALUE: 0 if success, or exception code if error. See the MS_*
definitions near the start of MS_RAB.LIB for the complete list.
END DESCRIPTION ******************************************************/

/*** BeginHeader */
#endif
/*** EndHeader */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人综合网站| 免费在线观看一区二区三区| 欧美v日韩v国产v| 欧美日韩国产精品自在自线| 91麻豆文化传媒在线观看| 国产jizzjizz一区二区| 国产一区二区精品久久99| 国内精品国产成人| 久久99精品久久久久久动态图 | 日韩视频一区在线观看| 日韩亚洲欧美综合| 国产老肥熟一区二区三区| 激情综合五月婷婷| 久久精品国产亚洲高清剧情介绍 | 亚洲欧洲精品成人久久奇米网 | 国产精品夜夜爽| 国产乱色国产精品免费视频| 国产精品夜夜嗨| 99视频精品免费视频| 在线影视一区二区三区| 欧美色图片你懂的| 这里只有精品电影| 亚洲精品一区二区在线观看| 亚洲精品一区二区精华| 国产欧美综合色| 中文字幕制服丝袜一区二区三区 | 无码av免费一区二区三区试看| 亚洲成人资源在线| 免费的国产精品| 国产成人免费av在线| 菠萝蜜视频在线观看一区| 在线观看网站黄不卡| 欧美日韩电影一区| 久久欧美中文字幕| 国产精品白丝在线| 奇米一区二区三区| 国产成a人亚洲精| 欧美性极品少妇| 精品国产乱码久久久久久老虎| 国产日韩精品视频一区| 亚洲激情中文1区| 日韩av电影一区| 国产成人精品1024| 91福利国产成人精品照片| 欧美一区二区三区婷婷月色| 国产人成一区二区三区影院| 亚洲精品国产高清久久伦理二区| 日韩不卡免费视频| zzijzzij亚洲日本少妇熟睡| 欧美精品久久一区| 日本一区二区久久| 日韩精品免费视频人成| 粉嫩绯色av一区二区在线观看| 在线观看亚洲精品视频| 欧美国产日韩精品免费观看| 亚洲一区在线视频观看| 国产精品资源在线观看| 欧美视频一区在线| 欧美激情一区二区| 男女男精品视频| 色综合久久久久综合体| 久久人人爽爽爽人久久久| 亚洲专区一二三| 成人精品视频网站| 精品国产一二三| 亚洲一级片在线观看| 国产99一区视频免费| 在线不卡a资源高清| 国产精品电影一区二区三区| 极品尤物av久久免费看| 欧美午夜不卡在线观看免费| 欧美韩国一区二区| 奇米综合一区二区三区精品视频| 在线免费观看日韩欧美| 中文子幕无线码一区tr| 久久不见久久见免费视频1| 欧美三级乱人伦电影| 国产精品久久午夜| 国内精品伊人久久久久av影院 | 欧美日韩综合一区| 国产精品国产自产拍高清av| 久久福利视频一区二区| 欧美三级欧美一级| 亚洲黄一区二区三区| 成人午夜私人影院| 精品成人一区二区三区| 青青草国产精品97视觉盛宴| 在线一区二区视频| 一区二区国产视频| 99国产一区二区三精品乱码| 国产午夜亚洲精品理论片色戒| 免费视频一区二区| 在线不卡一区二区| 亚洲第一久久影院| 在线精品视频免费播放| 亚洲精品久久久久久国产精华液| av综合在线播放| 国产精品国产三级国产aⅴ无密码| 国产激情偷乱视频一区二区三区| 91麻豆精品国产91久久久使用方法| 亚洲一区二区三区精品在线| 欧美日韩一区久久| 麻豆91精品91久久久的内涵| 国产精品剧情在线亚洲| 欧美私模裸体表演在线观看| 欧洲激情一区二区| 日本一区二区不卡视频| 欧美a级一区二区| 欧美日韩日本视频| 国产精品亲子伦对白| 精品一区二区三区在线播放视频| 欧美日韩精品欧美日韩精品一| 亚洲日本va在线观看| 国产毛片精品国产一区二区三区| 欧美在线观看视频一区二区| 综合久久一区二区三区| 久久精品二区亚洲w码| 美女一区二区视频| 丝袜国产日韩另类美女| 午夜久久久久久| 蜜臀va亚洲va欧美va天堂| 国产精品主播直播| 97精品久久久久中文字幕| 日韩不卡在线观看日韩不卡视频| 一区二区三区在线免费| 麻豆精品视频在线观看视频| 欧美日韩国产经典色站一区二区三区| 亚洲欧美综合色| 高清在线观看日韩| 精品久久久久久久久久久久包黑料 | 欧美一区二区三区日韩视频| 欧美日韩免费观看一区三区| 国产亚洲精品bt天堂精选| 国内精品久久久久影院色| 精品国产百合女同互慰| 男女男精品网站| 成人动漫一区二区在线| 99精品视频中文字幕| 国产69精品久久久久777| 国产毛片精品国产一区二区三区| 国产精品第五页| 欧美国产综合一区二区| 国产丝袜在线精品| 日韩一区二区三区高清免费看看| 亚洲日本va在线观看| 亚洲一区二区av电影| 亚洲高清免费在线| 91精品在线一区二区| 久久99精品国产麻豆不卡| 欧美激情一区在线观看| 91污在线观看| 亚洲最色的网站| 色婷婷av一区二区三区之一色屋| 亚洲激情欧美激情| 欧美三级蜜桃2在线观看| 久久色在线视频| 免费观看成人av| 欧美日韩亚洲高清一区二区| 亚洲人成网站色在线观看| 国产99一区视频免费| 日韩欧美一卡二卡| 日韩精品高清不卡| 欧美性做爰猛烈叫床潮| 久久久精品综合| 久久不见久久见免费视频7| 在线观看91视频| 激情五月激情综合网| 欧美视频第二页| 国产精品久久久久精k8| 国产成人在线观看| 日韩高清不卡一区二区| 91精品国产色综合久久不卡电影 | 亚洲精品久久久久久国产精华液| 偷拍日韩校园综合在线| 国产精品亚洲а∨天堂免在线| 欧美肥妇毛茸茸| 亚洲一区免费视频| 91免费国产在线观看| 亚洲午夜久久久久久久久久久| 国产在线视频精品一区| 欧美大片在线观看一区二区| 一区二区三区欧美| 成人性生交大片免费看中文| 欧美激情自拍偷拍| 天天av天天翘天天综合网色鬼国产| 韩国精品主播一区二区在线观看| 欧美在线影院一区二区| 久久99精品久久久久久| 亚洲综合色在线| 91精品国产综合久久久久久| 国产精品一区二区三区99 | 欧美男女性生活在线直播观看 | 亚洲欧洲日韩av| 欧美久久婷婷综合色| 老司机精品视频一区二区三区| 91网站在线观看视频| 婷婷国产在线综合| 久久婷婷综合激情| 欧美在线|欧美| 欧美曰成人黄网|