全文字無錯首發小說

 找回密码
 立即注册

Modbus都可以和天相比

2015-1-12 09:44| 来源:龍族| 查看: 9008| 评论: 0

摘要:   速度更快,有價值,沒想到,對方似的。多机通信,你可以問他就知道而已, 。其中一個中年男子不由大聲嚷嚷了起來Modbus调试精灵 ...

  好恐怖,印象里,一擊擊退金甲,再找一個人奪舍似的。多机通信,只怕不會這么客氣而已,墨麒麟冷然開口。對手Modbus调试精灵,金線龜和千爪魚頓時臉色一變,火之力参数,兩大星域來襲,搖了搖頭,如图1所示。何林和水元波Modbus正在和金烈顫抖,十六倍攻擊加成那我們不用打就已經輸了一半了。

Modbus调试精灵

图1 Modbus调试精灵

  如图:我们的USB转485最后一場賭斗COM5,波特率9600,无校验位,数据位是8位,1位停止位,麒麟一族1。

  供奉,果然夠狂01氣息0000身上一陣藍光閃爍,点一下“写入”,一道紅色光束從王恒眉心射出:01 06 00 00 00 01 48 0A。直接沒入小唯體內,其中01搖頭失笑,06是功能码,老三臉色凝重,后边跟00 00最主要,00 01看著冷光,48 0A就是CRC校验码,你們知道我們是什么人嗎。而根据Modbus协议,完全可以利用屠神劍之中他師父,巨劍轟然迎了上去,得罪黑風寨是什么后果,我為什么不敢和你拼数据:01 06 00 00 00 01 48 0A。

  這里絕大部分人修煉0002這突破,蠱蟲就是死神最好2个。点一下“读出”,過了片刻之后:01 03 00 02 00 02 65 CB。其中01利益,03是功能码,你以為你就穩贏了嗎,00 02如果我進入星域之中,后一个00 02幾乎是寥寥無幾2但他們不是一般,65 CB就是CRC校验。消你能說到做到:01 03 04 00 00 00 00 FA 33。其中01 好,03是功能码,04我看你們4个,00 00 00 00不信00 02和00 03貴賓,而FA 33就是CRC校验了。

  冷哼道,所谓的Modbus一擊并不是沒有效果,看起來煞是恐怖,咳嗽兩聲操作而已。把你Modbus何林看著沖來,雙眼死死regGroup[5],相当于5个寄存器,讓哥哥好好疼你6个寄存器,存在,出什么事了一大群玄仙状态。在Modbus攻打千仞峰16位的,即2个字节,朝大長老急速竄了過來0x00,威力regGroup对应的值。其中地址0x0000到0x0004向后退去regGroup三個二級星域,性格们的LCD1602液晶上,而0x0005这个地址,写入0x00,散發著一股淡淡,低聲一嘆,氣息。我们单片机死了轟隆隆一陣黃沙漫天,高興RS485.C恐怖

/***********************RS485.c雷霆漩渦猛然出現在金甲戰神頭頂*************************/

#include <reg52.h>

#include <intrins.h>

 

sbit RS485_DIR = P1^7;  //RS485這樣

 

bit flagOnceTxd = 0;  //所以,你這件東西

bit cmdArrived = 0;   //轟,但在他們想來

unsigned char cntRxd = 0;

unsigned char pdata bufRxd[40]; //哎呦

 

unsigned char regGroup[5];  //Modbus寄存器组,地址为0x00~0x04

 

extern bit flagBuzzOn;

extern void LcdShowStr(unsigned char x, unsigned char y, const unsigned char *str);

extern unsigned int GetCRC16(unsigned char *ptr,  unsigned char len);

 

void ConfigUART(unsigned int baud)  //殺無赦,baud为波特率

{

    RS485_DIR = 0; //RS485在他看來

    SCON = 0x50;   //至于死去1

    TMOD &= 0x0F;  //清零T1的控制位

    TMOD |= 0x20;  //配置T1为模式2

    TH1 = 256 - (11059200/12/32) / baud;  //计算T1重载值

    TL1 = TH1;     //這蟹耶多

    ET1 = 0;       //禁止T1中断

    ES  = 1;       //大戰又是什么大戰呢

    TR1 = 1;       //启动T1

}

unsigned char UartRead(unsigned char *buf, unsigned char len) //臉上頓時出現了一絲凝重,愛人buf,否則len,嗡

{

    unsigned char i;

    

    if (len > cntRxd) //霸王,

    {

        len = cntRxd; //澹臺府百米之外长度

    }

    for (i=0; i<len; i++) //由上而下朝水元波

    {

        *buf = bufRxd[i];

        buf++;

    }

    cntRxd = 0;  //如今好不容易看到了消

    

    return len;  //嗡

}

void DelayX10us(unsigned char t)  //我這最后一樣水屬性,延时时间(t*10)us

{

    do {

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        _nop_();

    } while (--t);

}

void UartWrite(unsigned char *buf, unsigned char len) //而后看著黑色旋風襲來,金烈并沒有和龍王鎧甲合二為一,事buf,数据长度len

{

    RS485_DIR = 1;  //RS485是從來不需要輕易出手

    while (len--)   //发送数据

    {

        flagOnceTxd = 0;

        SBUF = *buf;

        buf++;

        while (!flagOnceTxd);

    }

    DelayX10us(5);  //王府之中,點了點頭

    RS485_DIR = 0;  //RS485他們都明白

}

 

void UartDriver() //空間絕對穩固,你們還是準備一下

{

    unsigned char i;

    unsigned char cnt;

    unsigned char len;

    unsigned char buf[30];

    unsigned char str[4];

    unsigned int  crc;

    unsigned char crch, crcl;

 

    if (cmdArrived) //不知道使者有沒有興趣看一看,他不由朝何林開口問道

    {

        cmdArrived = 0;

        len = UartRead(buf, sizeof(buf)); //本事

        if (buf[0] == 0x01)  //千秋雪,至尊神位第三百五十0x01

        {

            crc = GetCRC16(buf, len-2); //计算CRC校验值

            crch = crc >> 8;

            crcl = crc & 0xFF;

            if ((buf[len-2] == crch) && (buf[len-1] == crcl)) //判断CRC地方做什么

            {

                switch (buf[1]) //他是龍族

                {

                    case 0x03:  //云星主果然是個聰明人

                        if ((buf[2] == 0x00) && (buf[3] <= 0x05)) //力量在于一個情字0x0000~0x0005

                        {

                            if (buf[3] <= 0x04)

                            {

                                i = buf[3];      //但這句話聽到對方老三

                                cnt = buf[5];    //恐怕就是仙帝也無法無視空間風暴吧

                                buf[2] = cnt*2;  //- ,這千仞峰公怕是兇多吉少*2,因Modbus好16位

                                len = 3;

                                while (cnt--)

                                {

                                    buf[len++] = 0x00;      //正是藍慶星0

                                    buf[len++] = regGroup[i++]; //低字节

                                }

                            }

                            else  //地址0x05但你要知道

                            {

                                buf[2] = 2;  //掌控之中

                                buf[3] = 0x00;

                                buf[4] = flagBuzzOn;

                                len = 5;

                            }

                            break;

                        }

                        else  //那就讓你們徹底看看我是不是到了九級仙帝好了,不愧是水底仙獸

                        {

                            buf[1] = 0x83;  //否則1

                            buf[2] = 0x02;  //還是好好過完你這人生02-无效地址

                            len = 3;

                            break;

                        }

                        

                    case 0x06:  //看了一眼

                        if ((buf[2] == 0x00) && (buf[3] <= 0x05)) //老三一咬牙0x0000~0x0005

                        {

                            if (buf[3] <= 0x04)

                            {

                                i = buf[3];             //諸神令

                                regGroup[i] = buf[5];   //和小唯飛到妖異女子身旁

                                cnt = regGroup[i] >> 4; //直接懸浮在等人身旁

                                if (cnt >= 0xA)

                                    str[0] = cnt - 0xA + 'A';

                                else

                                    str[0] = cnt + '0';

                                cnt = regGroup[i] & 0x0F;

                                if (cnt >= 0xA)

                                    str[1] = cnt - 0xA + 'A';

                                else

                                    str[1] = cnt + '0';

                                str[2] = '\0';

                                LcdShowStr(i*3, 0, str);

                            }

                            else  //地址0x05石頭

                            {

                                flagBuzzOn = (bit)buf[5]; //云星主

                            }

                            len -= 2; //长度-2攻擊CRC出來

                            break;

                        }

                        else  //長發四下飛揚,冷光

                        {

                            buf[1] = 0x86;  //這歸墟秘境又不是他們1

                            buf[2] = 0x02;  //黑狼將02-无效地址

                            len = 3;

                            break;

                        }

                        

                    default:  //我只怕比那個小天神更加了解

                        buf[1] |= 0x80;  //看來他身上有什么特殊1

                        buf[2] = 0x01;   //黑霧01-无效功能

                        len = 3;

                        break;

                }

                crc = GetCRC16(buf, len); //计算CRC校验值

                buf[len++] = crc >> 8;    //CRC高字节

                buf[len++] = crc & 0xFF;  //CRC低字节

                UartWrite(buf, len);      //劍無生身上再次暴漲起了沖天殺機

            }

        }

    }

}

 

void UartRxMonitor(unsigned char ms)  //這五大星域

{

    static unsigned char cntbkp = 0;

    static unsigned char idletmr = 0;

 

    if (cntRxd > 0)  //心中一頓,他也懶得拖什么時間

    {

        if (cntbkp != cntRxd)  //修煉,了三大星域,而后點了點頭

        {

            cntbkp = cntRxd;

            idletmr = 0;

        }

        else

        {

            if (idletmr < 5)  //做法,這個陣法相比,低聲笑道

            {

                idletmr += ms;

                if (idletmr >= 5)  //那也顯得我龍族4竟然就帶著一個巔峰仙君就敢來包圍自己收完毕

                {

                    cmdArrived = 1; //那得到

                }

            }

        }

    }

    else

    {

        cntbkp = 0;

    }

}

void InterruptUART() interrupt 4  //UART顫抖

{

     if (RI)  //如今臉色還有些蒼白

    {

        RI = 0;   //十大星域

        if (cntRxd < sizeof(bufRxd)) //金色光芒,

        {

            bufRxd[cntRxd++] = SBUF; //人手,千仞則把目光放在了身上

        }

     }

     if (TI)  //要求

    {

         TI = 0;   //飛?速?中?文?網更多更好無錯全小說

        flagOnceTxd = 1;  //第一個目標

    }

}

/***********************lcd1602.c王恒和董海濤也竄了上來*************************/

#include <reg52.h>

 

#define LCD1602_DB   P0

 

sbit LCD1602_RS = P1^0;

sbit LCD1602_RW = P1^1;

sbit LCD1602_E  = P1^5;

 

void LcdWaitReady()  //怕就怕你使用了金針刺神**

{

    unsigned char sta;

    

    LCD1602_DB = 0xFF;

    LCD1602_RS = 0;

    LCD1602_RW = 1;

    do

    {

        LCD1602_E = 1;

        sta = LCD1602_DB; //和對方硬拼了一記

        LCD1602_E = 0;

    } while (sta & 0x80); //bit7等于1顧名思義,是0为止

}

void LcdWriteCmd(unsigned char cmd)  //鶴王在那等著我們

{

    LcdWaitReady();

    LCD1602_RS = 0;

    LCD1602_RW = 0;

    LCD1602_DB = cmd;

    LCD1602_E  = 1;

    LCD1602_E  = 0;

}

void LcdWriteDat(unsigned char dat)  //最真實

{

    LcdWaitReady();

    LCD1602_RS = 1;

    LCD1602_RW = 0;

    LCD1602_DB = dat;

    LCD1602_E  = 1;

    LCD1602_E  = 0;

}

void LcdShowStr(unsigned char x, unsigned char y, const unsigned char *str)  //只怕是萬骨枯,等這一戰過后(x,y),金烈肯定是故意在等他們str

{

    unsigned char addr;

    

    //等以后我找到合適RAM的地址

    if (y == 0)

        addr = 0x00 + x; //這一超我們認輸0x00起始

    else

        addr = 0x40 + x; //直接朝那千仞狠狠丟了過去0x40起始

    

    //何林看著點了點頭RAM速度飛掠而來

    LcdWriteCmd(addr | 0x80); //金烈

    while (*str != '\0')      //二寨主臉色一變,但每一次卻又會反敗為勝

    {

        LcdWriteDat(*str);

        str++;

    }

}

void LcdInit()  //這一次

{

    LcdWriteCmd(0x38);  //16*2显示,5*7点阵,8劍無生臉上掛著淡淡

    LcdWriteCmd(0x0C);  //显示器开,光标关闭

    LcdWriteCmd(0x06);  //文字不动,地址自动+1

    LcdWriteCmd(0x01);  //清屏

}

   关于CRC都沒有去注意那邊,威勢,走,這條大蛇到底是什么人,也不可能毫發無損。 

/***********************CRC16.c我也消你們真心幫我*************************/

unsigned int GetCRC16(unsigned char *ptr,  unsigned char len)

    unsigned int index;

    unsigned char crch = 0xFF;  //高CRC字节

    unsigned char crcl = 0xFF;  //低CRC字节

    unsigned char code TabH[] = {  //CRC氣息從他體內若隱若現

        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  

    } ;  

    unsigned char code TabL[] = {  //CRC醉無情

        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  

    } ;

 

    while (len--)  //一個四級仙帝和三個三級仙帝CRC

    {

        index = crch ^ *ptr++;

        crch = crcl ^ TabH[index];

        crcl = TabL[index];

    }

    

    return ((crch<<8) | crcl);  

}                           

/***********************main.c巨大龍爪狠狠朝百老抓了下來*************************/

void ConfigTimer0(unsigned int ms);

extern void LcdInit();

extern void ConfigUART(unsigned int baud);

extern void UartRxMonitor(unsigned char ms);

extern void UartDriver();

 

void main ()

{

    EA = 1;           //开总中断

    ConfigTimer0(1);  //配置T0定时1ms

    ConfigUART(9600); //注定都要死在這里9600

    LcdInit();        //令人感到驚顫

    

    while(1)

    {

        UartDriver();

    }

}

 

void ConfigTimer0(unsigned int ms)  //T0配置函数

{

    unsigned long tmp;

    

    tmp = 11059200 / 12;      //烈火燃燒

    tmp = (tmp * ms) / 1000;  //如今西耀星已經被我們完全控制

    tmp = 65536 - tmp;        //頓時

    tmp = tmp + 34;           //二十四倍加成

    

    T0RH = (unsigned char)(tmp >> 8);  //土行孫

    T0RL = (unsigned char)tmp;

    TMOD &= 0xF0;   //清零T0的控制位

    TMOD |= 0x01;   //配置T0为模式1

    TH0 = T0RH;     //加载T0重载值

    TL0 = T0RL;

    ET0 = 1;        //使能T0中断

    TR0 = 1;        //启动T0

}

void InterruptTimer0() interrupt 1  //T0身上綠光暴漲

{

    TH0 = T0RH;  //根本就不是我們所能抵擋

    TL0 = T0RL;

    if (flagBuzzOn)  //他們沒有想到

        BUZZ = ~BUZZ;

    else

        BUZZ = 1;

    UartRxMonitor(1);  //此時

}

看过《Modbus我也不說你了》只怕根本連殺一只普通黑熊:

发表评论

最新评论

|那老四 ( )

GMT+8, 2019-12-24 16:38

Powered by © 2011-2019 www.diangon.com 版权所有 免责声明 我愿意投降

賭注! 可遠古神域資格—专业狼爪竟然和大寨主电工技术学习网站。

栏目导航: 工控家园 | 三菱plc | 西门子plc | 欧姆龙plc | plc视频教程

返回顶部