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

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

?? ms_rab.lib

?? modbus 運用事例
?? LIB
?? 第 1 頁 / 共 3 頁
字號:
	int			nErr;

	wCoil = msCmdWord ( 2 );						//	Coil Address
	wCount = msCmdWord ( 4 );						//	Coil Count
	pcState = &acMSCmd[7];							//	State Field Pointer
	while (wCount) {									//	Force Coils
		wState = *pcState++;
		for (wBit=8;wBit-- && wCount;wState>>=1,wCount--)
			if (nErr = msOutWr ( wCoil++,wState&1 ))
				return msRepErr ( nErr );
	}
	msRepNew ( wMSCmd );								//	Start Reply
	msRepWord ( msCmdWord(2) );					//	Coil Address (Fix 12/7/98 S. Kolega)
	msRepWord ( msCmdWord(4) );					//	Coil Count
	return msRepDone ();								//	Complete & Send Reply
}

/*=========================================================================*\
	[0x10] Preset Multiple Registers
\*=========================================================================*/

nodebug
int
msPresetRegs	(	void
					)
					
{
	if (msRegWr ( 2 )) {					//	Decode & Write Registers
		msRepNew ( wMSCmd );				//	Start Reply
		msRepWord ( msCmdWord(2) );	//	Register Address
		msRepWord ( msCmdWord(4) );	//	Register Count
		msRepDone ();						//	Complete & Send Reply
	}
	return 1;
}

/*=========================================================================*\
	[0x16] Mask Write Register
\*=========================================================================*/

nodebug
int
msRegMask		(	void
					)
					
{	unsigned		wReg,wAnd,wOr,wData;
	int			nErr;

	if (!acMSCmd[0])									//	Broadcast Not Supported
		return 0;

	wReg = msCmdWord ( 2 );							//	Register Address
	wAnd = msCmdWord ( 4 );							//	And Mask
	wOr = msCmdWord ( 6 );							//	Or Mask
	if (nErr = msRead ( wReg,&wData ))
		return msRepErr ( nErr );
	wData = (wData & wAnd) | (wOr & ~wAnd);
	if (nErr = msWrite ( wReg,wData ))
		return msRepErr ( nErr );
	msRepNew ( wMSCmd );								//	Start Reply
	msRepWord ( wReg );								//	Register Address
	msRepWord ( wAnd );								//	And Mask
	msRepWord ( wOr );								//	Or Mask
	return msRepDone ();								//	Complete & Send Reply
}

/*=========================================================================*\
	[0x17] Read/Write Registers
\*=========================================================================*/

nodebug
int
msRegRdWr		(	void
					)
					
{
	if (!acMSCmd[0])			//	Broadcast Not Supported
		return 0;

	if (msRegWr ( 6 ))		//	Decode & Write Registers
		msRegRd ( msRead );	//	Read Regs & Reply
	return 1;
}

/***************************************************************************\
	MODBus High-Level Support Functions
\***************************************************************************/

/*=========================================================================*\
	Process & Execute Command
\*=========================================================================*/

nodebug
int
msExec			(	void
					)
					
{
	int		nErr;

	wMSCmd = acMSCmd[1];							//	Extract Command Opcode
	msStart ();										//	Start Packet Processing
	switch ( wMSCmd ) {							//	Dispatch Handler
		case	0x01	:								//	Read Coil Status
			nErr = msCmdOutRd ();
			break;
		case	0x02	:								//	Read Input Status
			nErr = msCmdIn ();
			break;
		case	0x03	:								//	Read Holding Registers
			nErr = msCmdRead ();
			break;
		case	0x04	:								//	Read Input Registers
			nErr = msCmdInput ();
			break;
		case	0x05	:								//	Force Single Coil
			nErr = msForceCoil ();
			break;
		case	0x06	:								//	Preset Single Register
			nErr = msPresetReg ();
			break;
		case	0x0B	:								//	Fetch Comm Event Counter
			nErr = msFetchComm ();
			break;
		case	0x0F	:								//	Force Multiple Coils
			nErr = msForceCoils ();
			break;
		case	0x10	:								//	Preset Multiple Registers
			nErr = msPresetRegs ();
			break;
		case	0x16	:								//	Mask Write Register
			nErr = msRegMask ();
			break;
		case	0x17	:								//	Read/Write Registers
			nErr = msRegRdWr ();
			break;

		case	0x07	:								//	Read Exception Status
		case	0x08	:								//	Diagnostics
		case	0x0C	:								//	Fetch Comm Event Log
		case	0x11	:								//	Report Slave ID
		case	0x14	:								//	Read General Reference
		case	0x15	:								//	Write General Reference
		case	0x18	:								//	Read FIFO Queue
		default		:								//	All Non-MODBus Opcodes
			nErr = msRepErr ( MS_BADFUNC );
	}
	msDone ();										// Packet Processing Done
	return nErr;
}

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

nodebug
void
msInit			(	unsigned			wAddr
					)
					
{
	wMSAddr = wAddr;
}

/***************************************************************************\
	MODBus ASCII Packet Processing
\***************************************************************************/

/*** BeginHeader msaInit */
void msaInit ( unsigned wAddr );

extern shared char *pcMSAM;
extern char acMSAM[516];
/*** EndHeader */

shared char		*pcMSAM;							//	ASCII Message Pointer
char				acMSAM[516];					//	ASCII Message Buffer

#asm nodebug root

;=====================================================================
; msError : Handle Serial Error (Reset Packet Processing)
;
; INPUT  :
;          None
; OUTPUT :
;          None

msError::		ld		hl,acMSAM			; pcMSAM = acMSAM
					ld		(pcMSAM),hl
					ret							; Done

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

msRecv::			ld		a,l					; A = Byte (Parity Masked)
					and	07Fh
					cp		a,':'					; A = ':'	=> Restart & Store ':'
					jr		z,msR0
					cp		a,00Dh				; A = <CR>	=> Store <CR>
					jr		z,msR1
					cp		a,00Ah				; A = <LF>	=> Store <LF>
					jr		z,msR1
					cp		a,'0'					; A < '0'	=> Restart
					jr		c,msError
					cp		a,'9'+1				; A <= '9'	=> Store '0'..'9'
					jr		c,msR1
					cp		a,'A'					; A < 'A'	=> Restart
					jr		c,msError
					cp		a,'F'+1				; A <= 'F'	=> Store 'A'..'F'
					jr		c,msR1
					jr		msError				; Done (No Legal Character)

msR0:				call	msError				; Reset Packet Processing
msR1:				push	de						; Protect DE
					ld		de,(pcMSAM)			; DE = Buffer Pointer
					ld		hl,acMSAM+516-1	; 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		(pcMSAM),hl
msR2:				pop	de						; Restore DE
					ret							; Done
#endasm

/*=========================================================================*\
	Compute Longitude Redundancy Check
\*=========================================================================*/

nodebug
unsigned
msaLRC			(	char				*pcMess,
						unsigned			wLen
					)
					
{	char		cSum;

		for (cSum=0;wLen--;cSum+=*pcMess++);
		return cSum;
}

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

nodebug
void
msRun				(	void
					)
					
{
	static char		*pcHex;
	const static char acHex[] = "0123456789ABCDEF";
	static int		nDelay;
	char				*pcCmd,*pcRep;
	char				*pcM;
	unsigned			wLRC;
	int				c;

	costate sMSRun always_on {
		msError();
		do {
			c = msXgetc();
			if (c != -1)	msRecv(c);
		} while (c != '\n');
		
		if ((pcMSAM > (acMSAM+2)) && (*(pcMSAM-1) == '\n') &&
							(*(pcMSAM-2) == '\r') && (acMSAM[0] == ':')) {

			for (pcM=acMSAM+1,pcCmd=acMSCmd;*pcM!='\r';++pcCmd) {
				if (!(pcHex = strchr ( acHex,*pcM++ )))
					break;
				*pcCmd = (pcHex-acHex) << 4;
				if (!(pcHex = strchr ( acHex,*pcM++ )))
					break;
				*pcCmd += (pcHex-acHex);
			}

			if (!msaLRC ( acMSCmd,pcCmd-acMSCmd )) {
				if (!acMSCmd[0] || (acMSCmd[0] == wMSAddr)) {
					if (msExec() && acMSCmd[0]) {
						wLRC = -msaLRC(acMSRep,pcMSRep-acMSRep) & 0xFF;
						pcM = acMSAM;
						*pcM++ = ':';
						for (pcRep=acMSRep;pcRep<pcMSRep;++pcRep) {
							*pcM++ = acHex[*pcRep>>4];
							*pcM++ = acHex[*pcRep&15];
						}
						*pcM++ = acHex[wLRC>>4];
						*pcM++ = acHex[wLRC&15];
						*pcM++ = '\r';
						*pcM++ = '\n';
						*pcM = 0;

						msSend ( NULL,0 );
						waitfor ( msSend ( acMSAM,pcM-acMSAM ) );
					}
				}
			}
		}
	}
}

/*=========================================================================*\
	Initialize MODBus ASCII Driver
\*=========================================================================*/

nodebug
void
msaInit			(	unsigned			wAddr
					)
					
{
	msError ();
	msInit ( wAddr );
}

/***************************************************************************\
	MODBus RTU Packet Processing
\***************************************************************************/

/*** BeginHeader msrInit */
void msrInit ( unsigned wAddr,unsigned wTO );
/*** EndHeader */

shared
unsigned			wMSRLast;					//	Time Stamp of Last Serial Char
unsigned			wMSRTO;						//	Timeout Period for RTU Sync

#asm nodebug root

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆国产在线观看| 日韩欧美国产一二三区| 欧美精品三级日韩久久| 国产清纯白嫩初高生在线观看91| 一区二区三区不卡在线观看| 国产麻豆精品视频| 欧美日韩国产不卡| 亚洲激情图片qvod| 成人免费视频免费观看| 精品国产精品网麻豆系列| 亚洲高清中文字幕| 色悠悠久久综合| 国产欧美日韩另类视频免费观看| 六月丁香婷婷久久| 51久久夜色精品国产麻豆| 一区二区久久久久久| 成人h精品动漫一区二区三区| 日韩美女视频在线| 亚洲成人黄色影院| 欧美综合在线视频| 亚洲线精品一区二区三区八戒| 成人av电影在线| 中文字幕不卡在线观看| 国产激情一区二区三区四区| 精品国产一区二区在线观看| 美腿丝袜在线亚洲一区 | 丝袜亚洲另类欧美| 色婷婷一区二区| 亚洲欧美色综合| 一本色道久久综合精品竹菊| 亚洲欧美综合在线精品| 99国产精品一区| 一区二区在线观看视频在线观看| 91欧美一区二区| 中文字幕一区二区在线播放| 91色porny在线视频| 一区二区中文视频| 欧美亚洲高清一区二区三区不卡| 亚洲一区二区影院| 欧美人伦禁忌dvd放荡欲情| 丝袜脚交一区二区| 91精品国产综合久久久久久久| 三级亚洲高清视频| 欧美一区二区精品在线| 国内精品久久久久影院色| 国产精品色一区二区三区| 色综合中文字幕| 天天操天天干天天综合网| 欧美一级在线免费| 国产福利电影一区二区三区| 国产精品私人影院| 欧美主播一区二区三区| 日本va欧美va精品发布| 精品久久人人做人人爽| jlzzjlzz亚洲日本少妇| 亚洲综合在线视频| 日韩欧美一区二区在线视频| 国产成人在线看| 一区二区三区av电影| 日韩一级片网址| 国产激情视频一区二区在线观看 | 亚洲免费观看高清完整| 欧美精品在线一区二区| 国产曰批免费观看久久久| 国产精品黄色在线观看| 欧美久久久久久久久中文字幕| 国精品**一区二区三区在线蜜桃| 国产欧美久久久精品影院| 欧美亚洲一区三区| 国产一区二区主播在线| 亚洲欧美另类小说视频| 日韩免费看网站| 91亚洲永久精品| 九色|91porny| 亚洲免费观看高清完整版在线观看| 欧美一二三区在线观看| 色综合中文字幕| 精品一区二区三区在线观看| 一区二区视频在线看| 精品国产污网站| 欧美亚洲综合在线| 国产成人精品亚洲午夜麻豆| 日韩电影免费在线观看网站| 综合激情成人伊人| 久久久久久久精| 制服丝袜中文字幕一区| 色综合欧美在线| 国产一区二区三区高清播放| 亚洲6080在线| 亚洲人精品一区| 国产女人18毛片水真多成人如厕| 欧美福利视频导航| 91国产成人在线| 粉嫩绯色av一区二区在线观看 | 亚洲免费在线视频一区 二区| 欧美电影免费观看高清完整版在线观看| 色综合久久久久综合99| 国产成人在线观看免费网站| 国内成人免费视频| 日本欧美在线观看| 亚洲国产一二三| 一区二区三区日韩在线观看| 国产蜜臀av在线一区二区三区| 欧美不卡一区二区| 日韩午夜精品视频| 欧美一区二区三区在| 欧美日本在线观看| 精品视频1区2区3区| 色婷婷激情久久| 91在线观看高清| 91社区在线播放| 日本黄色一区二区| 91在线免费播放| 日本高清无吗v一区| 色又黄又爽网站www久久| 91久久精品网| 日本高清无吗v一区| 欧美羞羞免费网站| 在线不卡免费欧美| 日韩免费观看高清完整版在线观看| 制服丝袜中文字幕一区| 欧美α欧美αv大片| 精品噜噜噜噜久久久久久久久试看| 26uuu欧美| 国产农村妇女毛片精品久久麻豆| 国产精品成人免费在线| 中文字幕在线观看不卡| 亚洲免费观看高清在线观看| 亚洲国产综合色| 免费人成精品欧美精品| 精品亚洲欧美一区| 成人小视频在线| 91电影在线观看| 制服丝袜成人动漫| 欧美亚日韩国产aⅴ精品中极品| 欧美二区乱c少妇| 欧美一区二区三区视频免费播放| 精品日本一线二线三线不卡| 久久久久久久久久久久电影 | 精品久久五月天| 精品国产百合女同互慰| 国产精品免费人成网站| 亚洲一区影音先锋| 九一九一国产精品| av电影在线观看一区| 欧美日本国产一区| 国产丝袜欧美中文另类| 亚洲男同性视频| 九九九久久久精品| 91在线免费播放| 欧美一区2区视频在线观看| 欧美国产成人精品| 亚洲成人一区在线| 国产激情视频一区二区三区欧美| 色婷婷久久99综合精品jk白丝| 日韩小视频在线观看专区| 18成人在线观看| 青青草国产成人av片免费 | 国产专区欧美精品| 色综合中文字幕国产| 欧美日韩国产中文| 日本一区二区三区国色天香| 亚洲成人tv网| 成人黄色片在线观看| 日韩三级精品电影久久久 | 欧美日韩亚洲国产综合| 精品国产网站在线观看| 午夜精彩视频在线观看不卡| 成人毛片视频在线观看| 欧美一区二区国产| 亚洲一级不卡视频| www.亚洲在线| 久久天堂av综合合色蜜桃网| 日本欧美大码aⅴ在线播放| 91视频一区二区| 欧美韩日一区二区三区四区| 看电视剧不卡顿的网站| 欧美性受xxxx| 亚洲色图.com| 不卡视频一二三四| 国产视频在线观看一区二区三区| 麻豆精品一二三| 欧美久久婷婷综合色| 亚洲国产日韩一区二区| 波多野结衣在线一区| 国产午夜精品一区二区三区四区| 日韩高清欧美激情| 欧美精三区欧美精三区| 亚洲超丰满肉感bbw| 色婷婷亚洲精品| 亚洲精品日日夜夜| 91麻豆swag| 亚洲精品国产无天堂网2021| 成人av先锋影音| 国产精品情趣视频| 国产99久久久国产精品免费看| 久久新电视剧免费观看| 国内精品伊人久久久久影院对白| 精品88久久久久88久久久| 麻豆专区一区二区三区四区五区|