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

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

?? udbldmsg.c

?? 工業(yè)組態(tài)軟件modbus驅(qū)動(dòng)源代碼, 包括幫助文件.共享.
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* $Header: "%n Ver=%v  %f  LastEdit=%w  Locker=%l" */
/* "UDBLDMSG.C Ver=3  26-Nov-97,11:20:02  LastEdit=JIMV  Locker=***_NOBODY_***" */
/***********************************************************************\
*                                                                       *
*       Copyright Wonderware Software Development Corp. 1992-1997       *
*                                                                       *
*               ThisFileName="L:\ww\dde_serv\src\udsample\udbldmsg.c"   *
*               LastEditDate="1997 Nov 26  11:20:00"                    *
*                                                                       *
\***********************************************************************/

#define LINT_ARGS

#include <windows.h>
#include <stdio.h>
#include <string.h>

#include "ntconv.h"
#include "hmemcpy.h"
#include "uddefs.h"
#include "debug.h"
#include "wwassert.h"
#include "Utitech.h"
#include "CheckItem.h"

USES_ASSERT

static char msg[120+1];        /* local buffer for creating message */

static VOID WINAPI ShowBldMsg (LPSTR lpStr, WORD len);

#ifndef USE_ASCII_HEX_MESSAGES
/* >>>>>>>> USE_ASCII_HEX_MESSAGES defined <<<<<<<< */
/***********************************************************************\
    The following three values are protocol-dependent.

    The example code below assumes send and receive messages are ASCII.
    It also assumes a header of the form
        :BBAAAANN
    where BB   is a  command in hex ASCII
          AAAA is an address in hex ASCII
          NN   is a  number of words in hex ASCII
    Alternatively, an error message may be received,
    which will have one of the following forms:
        :000000000000FF;
    for a garbled message
        :00BBAAAANN00XX;
    for an invalid command BB
        :00BBAAAANNDDXX;
    for an invalid number of "cells" to read or write
    So by the ninth character, we know how many are coming.
\***********************************************************************/

BOOL bBldSendMsgInBinary = FALSE;  /* =TRUE if messages are sent in binary */
BOOL bBldRecvMsgInBinary = FALSE;  /* =TRUE if messages are received in binary */
int  nBldRecvMsgMinLen   = 9;      /* min chars needed to get msg length */

#else
/* >>>>>>>> USE_ASCII_HEX_MESSAGES not defined <<<<<<<< */
/***********************************************************************\
    The following three values are protocol-dependent.

    The example code below assumes send and receive messages are binary.
    It also assumes a header of the form
        BBAAAANN
    where BB   is a 1-byte command
          AAAA is a 2-byte address
          NN   is a 1-byte number of words
    Alternatively, an error message may be received,
    which will have one of the following forms:
        000000000000FF
    for a garbled message
        00BBAAAANN00XX
    for an invalid command BB
        00BBAAAANNDDXX
    for an invalid number of "cells" to read or write
    So by the fourth character, we know how many are coming.
\***********************************************************************/

BOOL bBldSendMsgInBinary = TRUE;   /* =TRUE if messages are sent in binary */
BOOL bBldRecvMsgInBinary = TRUE;   /* =TRUE if messages are received in binary */
int  nBldRecvMsgMinLen   = 4;      /* min chars needed to get msg length */

#endif

/***********************************************************************/
/** Data conversion tables **/

/** This table provides a simple way of converting binary to ASCII hex **/
char BtoAtable[]=
{
    '0', '1', '2', '3', '4', '5', '6', '7',
    '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
};

/** This table provides a simple way of converting hex ASCII to binary **/
BYTE AtoBtable[] = {
    0,  1,  2,  3,  4,  5,  6,  7,
    8,  9,  0,  0,  0,  0,  0,  0,
    0, 10, 11, 12, 13, 14, 15
};

/***********************************************************************/
/** put binary value for byte into indicated string
    returns pointer to end of string */

LPSTR
WINAPI
put_bin_byte (LPSTR lpMsg, BYTE x)
{
    /* put binary character in message */
    *(lpMsg++) = x;

    /* return pointer to end of string */
    return (lpMsg);
} /* put_bin_byte */

/***********************************************************************/
/** put ASCII hex for byte into indicated string
    returns pointer to end of string */

LPSTR
WINAPI
put_hex_byte (LPSTR lpMsg, BYTE x)
{
    int y;
    LPSTR p;

    /* point to end of string */
    lpMsg += 2;
    p = lpMsg;

    /* put hex characters in message, starting at lsnybble */
    y = x;
    *(--p) = BtoAtable[y & 0x0F];
    y = y >> 4;
    *(--p) = BtoAtable[y & 0x0F];

    /* return pointer to end of string */
    return (lpMsg);
} /* put_hex_byte */

/***********************************************************************/
/** put binary value for word into indicated string
    returns pointer to end of string */

LPSTR
WINAPI
put_bin_word (LPSTR lpMsg, WORD x)
{
    int y;
    LPSTR p;

    /* point to end of string */
    lpMsg += 2;
    p = lpMsg;

    /* put binary characters in message, starting at lsbyte */
    y = x;
    *(--p) = (BYTE) (y & 0x00FF);
    y = y >> 8;
    *(--p) = (BYTE) (y & 0x00FF);

    /* return pointer to end of string */
    return (lpMsg);
} /* put_bin_word */

/***********************************************************************/
/** put ASCII hex for word into indicated string
    returns pointer to end of string */

LPSTR
WINAPI
put_hex_word (LPSTR lpMsg, WORD x)
{
    int y;
    LPSTR p;

    /* point to end of string */
    lpMsg += 4;
    p = lpMsg;

    /* put hex characters in message, starting at lsnybble */
    y = x;
    *(--p) = BtoAtable[y & 0x000F];
    y = y >> 4;
    *(--p) = BtoAtable[y & 0x000F];
    y = y >> 4;
    *(--p) = BtoAtable[y & 0x000F];
    y = y >> 4;
    *(--p) = BtoAtable[y & 0x000F];

    /* return pointer to end of string */
    return (lpMsg);
} /* put_hex_word */

/***********************************************************************/
/** put binary value for long into indicated string
    returns pointer to end of string */

LPSTR
WINAPI
put_bin_long (LPSTR lpMsg, long x)
{
    long y;
    LPSTR p;

    /* point to end of string */
    lpMsg += 4;
    p = lpMsg;

    /* put binary characters in message, starting at lsbyte */
    y = x;
    *(--p) = (BYTE) (y & 0x00FF);
    y = y >> 8;
    *(--p) = (BYTE) (y & 0x00FF);
    y = y >> 8;
    *(--p) = (BYTE) (y & 0x00FF);
    y = y >> 8;
    *(--p) = (BYTE) (y & 0x00FF);

    /* return pointer to end of string */
    return (lpMsg);
} /* put_bin_long */

/***********************************************************************/
/** put ASCII hex for long into indicated string
    returns pointer to end of string */

LPSTR
WINAPI
put_hex_long (LPSTR lpMsg, long x)
{
    long y;
    int i;
    LPSTR p;

    /* point to end of string */
    lpMsg += 8;
    p = lpMsg;

    /* put hex characters in message, starting at lsnybble */
    y = x;
    for (i = 0; i < 7; i++) {
        *(--p) = BtoAtable[y & 0x000F];
        y = y >> 4;
    }
    *(--p) = BtoAtable[y & 0x000F];

    /* return pointer to end of string */
    return (lpMsg);
} /* put_hex_long */

/***********************************************************************/
/* check whether character is hex ASCII */

BOOL
WINAPI
IsHexASCII (char ch)
{
    return ((('0' <= ch) && (ch <= '9')) ||
            (('A' <= ch) && (ch <= 'F')) ||
            (('a' <= ch) && (ch <= 'f')));
} /* IsHexASCII */

/***********************************************************************/
/* convert hex ASCII to binary byte value */

BYTE
WINAPI
ah_to_bin (LPSTR lpStr, BOOL *ok)
{
    char ch;
    int byteval;

    /* initialize return value, validity flag */
    byteval = 0;
    *ok = TRUE;

    /* get character, check it */
    ch = *(lpStr++);
    if (('a' <= ch) && (ch <= 'f')) {
        /* convert to uppper case */
        ch = (char) (ch - 32);
    }
    if ((('0' <= ch) && (ch <= '9')) ||
        (('A' <= ch) && (ch <= 'F')))
        /* valid hex character, get corresponding value */
        byteval = (AtoBtable[ch - (char) '0']) << 4;
    else
        /* invalid hex character, treat as '0' and flag error */
        *ok = FALSE;

    /* get character, check it */
    ch = *lpStr;
    if (('a' <= ch) && (ch <= 'f')) {
        /* convert to uppper case */
        ch = (char) (ch - 32);
    }
    if ((('0' <= ch) && (ch <= '9')) ||
        (('A' <= ch) && (ch <= 'F')))
        /* valid hex character, get corresponding value */
        byteval |= (AtoBtable[ch - (char) '0']);
    else
        /* invalid hex character, treat as '0' and flag error */
        *ok = FALSE;

    /* return value, validity flag */
    return ((BYTE) byteval);
} /* ah_to_bin */

/***********************************************************************/
/** convert hexadecimal digit string to long integer value
    returns errflg TRUE if number is out of range **/

long
WINAPI
GetHexVal (LPSTR scan_ptr, int len, int *errflg)
{
    char ch;
    long x;
    BOOL digit_found;

    /* initialize value, error flags */
    x = 0;
    digit_found = FALSE;
    *errflg = 0;

    /* convert as hexadecimal value */
    while (len > 0) {
        /* get character, decrement count */
        ch = *(scan_ptr++);
        len--;
        /* check character */
        if ((('0' <= ch) && (ch <= '9')) ||
            (('A' <= ch) && (ch <= 'F')) ||
            (('a' <= ch) && (ch <= 'f'))) {
            digit_found = TRUE;
            if (x <= 0x0FFFFFFFL) {
                if (ch >= 'a')
                    ch -= 32;
                if (ch > '9')
                    ch -= 7;
                x = (x << 4) + (ch - '0');
            } else {
                /* value too large, indicate error and quit */
                *errflg = 1;
                len = 0;
            }
        } else {
            /* not a digit, quit */
            len = 0;
        }
    }

    /* check whether any digits were found */
    if (!digit_found)
        /* no digits, indicate error */
        *errflg = 1;

    /* return value */
    return (x);
} /* GetHexVal */

#ifdef USE_ASCII_HEX_MESSAGES
/* >>>>>>>> USE_ASCII_HEX_MESSAGES defined <<<<<<<< */
/***********************************************************************/
/** calculate checksum of message **/

/*************************************************************\
    The content of this routine is protocol dependent.
    Modify it as required.
\*************************************************************/

BYTE
WINAPI
BldCks(LPSTR       lpBuf,     /* pointer to buffer containing message */
       int         len,       /* length of message */
       int        *errflg)    /* nonzero if invalid characters */
{
    int cks, byteval;
    char ch1, ch2;

    /* initialize checksum, error flag */
    cks = 0;
    *errflg = 0;

    /************************************************\
        include byte lpBuf[i] in the checksum
        Example:
    \************************************************/

    /* get byte values, i.e. pairs of hex ASCII characters */
    while (len > 0) {
        /* get pair of characters */
        ch1 = *(lpBuf++); len--;
        ch2 = 0;
        if (len > 0) {
            ch2 = *(lpBuf++); len--;
        }
        /* verify that both are ASCII hex */
        if ((IsHexASCII (ch1)) && IsHexASCII (ch2)) {
            /* get corresponding binary value */
            if (ch1 >= 'a') ch1 -= 32;        /* force to upper case */
            if (ch1 > '9')  ch1 -= 7;         /* subtract offset for A-F */
            byteval = (ch1 - '0');
            if (ch2 >= 'a') ch2 -= 32;        /* force to upper case */
            if (ch2 > '9')  ch2 -= 7;         /* subtract offset for A-F */
            byteval = (byteval << 4) + (ch2 - '0');
            /* update checksum */
            cks = (cks + byteval) & 0xFF;
        } else {
            /* indicate error, force end of scan */
            *errflg = 1;
            len = 0;
        }
    }

    /* invert checksum and return it */
    cks = 0xFF - cks;
    return ((BYTE) cks);
} /* BldCks */

/***********************************************************************/
/** build message to read data from a point in the PLC,
    return length of message **/

/************************************************************************\
  Note: The last four arguments to this routine are protocol-dependent.
  Modify them as required.
\************************************************************************/

WORD
WINAPI
BldRead(BYTE	plcAddr,	  /* 2/28/2000 Modify by Chen jun local PLC address (PLC的通信地址) */
		LPSTR  *plpMsg,       /* pointer to where the message is stored */
        BYTE    plcDataType,  /* type of data to read(查詢數(shù)據(jù)的PLC) */
       	BYTE    DDEType,      /* type of data to transfer(查詢數(shù)據(jù)的DDE類型) */
        WORD    addr1,        /* address of point(s) to be accessed(查詢的起始地址) */
        WORD    numRd)        /* number of items to read(一次查詢的寄存器數(shù)量) */
{
    LPSTR  ptr;
    BYTE   msgCmd;
    WORD   len;
    WORD   cks;
    //int    errflg;
    len = 0;

      /* determine message command */
	// 3/1/2000 Modify by chen jun
	switch (plcDataType){
		case ITEM_HOLDING_COIL:
             msgCmd = 1;
			 break;
		case ITEM_INPUT_COIL:
             msgCmd = 2;
			 break;
    	case ITEM_HOLDING_REG:
             msgCmd = 3;
			 break;
		case ITEM_INPUT_REG:
             msgCmd = 4;
			 break;
	}
    /* initialize message buffer pointer */
    ptr = (LPSTR) msg;

    /* message type */
	// 2/29/2000 modify by Chen jun
    ptr = put_bin_byte (ptr, plcAddr); len+=1;
    
	ptr = put_bin_byte (ptr, msgCmd);  len+=1;
    

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产乱码精品一区二区三区av | 日韩欧美激情四射| 成人自拍视频在线| 天天色天天操综合| 亚洲欧洲av另类| 日韩精品一区二区三区四区视频 | 91麻豆精品国产综合久久久久久| 国产成人av一区二区| 婷婷丁香久久五月婷婷| 亚洲精品ww久久久久久p站 | 日韩黄色一级片| 亚洲色图一区二区| 国产精品网站在线观看| 精品日韩99亚洲| 欧美一区二区三区系列电影| 色94色欧美sute亚洲线路一ni | 亚洲在线观看免费| 亚洲欧美综合在线精品| 欧美国产精品一区二区| 精品国产成人系列| 欧美一区二区三区思思人| 在线国产电影不卡| 97精品电影院| 大美女一区二区三区| 国产一区二区三区精品欧美日韩一区二区三区| 亚洲mv大片欧洲mv大片精品| 亚洲精品菠萝久久久久久久| 亚洲视频一区二区在线| 中文字幕永久在线不卡| 亚洲国产成人私人影院tom| 久久久天堂av| 久久精品亚洲精品国产欧美kt∨| 欧美成人一区二区| 91精品国产综合久久久蜜臀粉嫩 | 中文字幕av一区二区三区| 2024国产精品| 久久夜色精品一区| 国产校园另类小说区| 久久精品夜色噜噜亚洲a∨| 久久久久久久久久久久久女国产乱 | 日韩一区在线看| 亚洲欧美日韩国产中文在线| 国产精品美女久久久久久| 国产精品麻豆99久久久久久| 中文字幕不卡在线播放| 中文字幕欧美一区| 亚洲人成精品久久久久| 亚洲免费毛片网站| 一区二区三区精品在线| 亚洲国产视频网站| 天天色综合天天| 裸体在线国模精品偷拍| 国产乱人伦偷精品视频不卡| 丁香五精品蜜臀久久久久99网站| av毛片久久久久**hd| 日本精品免费观看高清观看| 欧美性大战久久| 91精品国产欧美一区二区| 337p粉嫩大胆噜噜噜噜噜91av| 久久日一线二线三线suv| 中文字幕成人网| 一区二区三区不卡视频| 日韩高清一级片| 国产宾馆实践打屁股91| 91在线观看成人| 91精品国产色综合久久久蜜香臀| 精品国产凹凸成av人网站| 国产精品久线观看视频| 亚洲成人你懂的| 国产一区二区三区四区五区入口| 99久久精品久久久久久清纯| 欧美视频在线观看一区二区| 日韩欧美国产一区二区三区 | 亚洲午夜在线视频| 美日韩黄色大片| 91视频在线看| 欧美大尺度电影在线| 亚洲三级在线观看| 久久精品久久精品| 99久久99久久综合| 精品国一区二区三区| 1000精品久久久久久久久| 国产精品一区二区久激情瑜伽 | 国产福利一区二区三区| 一本色道a无线码一区v| 日韩午夜av电影| 亚洲日穴在线视频| 麻豆成人免费电影| 色婷婷av久久久久久久| 欧美电视剧免费全集观看| 亚洲欧美日韩中文字幕一区二区三区 | 久久亚洲免费视频| 一区二区三区日韩精品视频| 久久精品国产亚洲a| 91久久精品一区二区三区| 久久一区二区视频| 欧美在线视频全部完| 寂寞少妇一区二区三区| gogo大胆日本视频一区| 欧美一级欧美三级| 亚洲女同一区二区| 国产精品996| 欧美日韩国产综合久久| 国产精品美女www爽爽爽| 青青草97国产精品免费观看| 一本久久综合亚洲鲁鲁五月天| 久久久综合网站| 蜜桃av一区二区| 欧美亚洲国产怡红院影院| 国产精品久久一级| 国产91精品欧美| 亚洲精品一区二区三区在线观看 | 欧美日韩在线播放三区| 国产精品美女久久久久久久久久久| 麻豆国产精品一区二区三区 | 欧美福利视频导航| 亚洲黄色尤物视频| 99视频精品免费视频| 亚洲一线二线三线久久久| 国产成人亚洲综合a∨婷婷 | 一本色道久久综合亚洲aⅴ蜜桃 | 日本韩国欧美三级| 国产精品污网站| 丁香亚洲综合激情啪啪综合| 精品处破学生在线二十三| 麻豆精品视频在线观看| 日韩女优毛片在线| 免费高清在线一区| 欧美福利一区二区| 免费人成精品欧美精品| 欧美男同性恋视频网站| 亚洲第一激情av| 欧美人体做爰大胆视频| 污片在线观看一区二区| 欧美欧美欧美欧美| 喷水一区二区三区| 日韩欧美国产电影| 伦理电影国产精品| 精品国产乱码久久久久久蜜臀 | 一区二区三区四区高清精品免费观看| jlzzjlzz欧美大全| 亚洲色图欧美激情| 色噜噜狠狠色综合欧洲selulu| 亚洲精品成人悠悠色影视| 欧洲另类一二三四区| 亚洲成人动漫精品| 日韩视频国产视频| 国产精品亚洲第一区在线暖暖韩国| 国产欧美一区二区精品秋霞影院| 高清不卡一区二区在线| 国产精品视频你懂的| 久久一区二区三区国产精品| 国产老肥熟一区二区三区| 欧美国产成人在线| 91免费视频网| 亚洲午夜电影网| 日韩欧美123| 不卡的看片网站| 亚洲地区一二三色| 久久亚洲影视婷婷| 成人国产精品免费观看视频| 亚洲影视资源网| 精品动漫一区二区三区在线观看| 国产99久久久久| 一区二区欧美国产| 日韩欧美激情四射| 99久久99久久精品免费看蜜桃| 一级特黄大欧美久久久| 日韩欧美国产一区在线观看| 成人免费va视频| 午夜激情一区二区三区| 国产午夜精品福利| 欧美专区日韩专区| 狠狠色综合日日| 一卡二卡三卡日韩欧美| 欧美成人乱码一区二区三区| 成人听书哪个软件好| 亚洲成人动漫av| 国产欧美日韩中文久久| 欧美在线free| 国产精品一区免费视频| 夜夜嗨av一区二区三区网页| 精品免费日韩av| 91啦中文在线观看| 麻豆91精品视频| 亚洲美女区一区| 国产午夜亚洲精品不卡| 欧美日韩专区在线| 成人午夜视频免费看| 午夜国产精品一区| 欧美高清在线一区二区| 91麻豆精品国产| 色哟哟欧美精品| 国产精品香蕉一区二区三区| 亚洲电影欧美电影有声小说| 国产精品久久久久一区二区三区 | 日韩欧美精品三级| 欧美怡红院视频| 成人免费毛片a| 国产一区二区三区免费播放|