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

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

?? slave_test.cpp

?? 實現工業上常用的modbus slave從站的功能 測試通過
?? CPP
字號:
using System;
using Microsoft.SPOT;
using System.Threading;
using Microsoft.SPOT.Hardware;

namespace MFModbus
{
    public class ModbusRtu
    {
        private Thread m_worker;
        private bool m_RunFlag;

        private byte bytRtuDataFlag=0;
        private byte bytRtuDataIdx;
        private byte[] bytRtuData = new byte[8];

        //設備地址,默認為1    
        private byte ModbusAddr = 1;
        //數據區(注意,Modbus讀寫是以字(雙字節)為單位的)
        private byte[] DataBuff = new byte[128];

        SerialPort serial = null;

        InputPort[] input = new InputPort[5];
        Cpu.Pin[] pin = new Cpu.Pin[5] { (Cpu.Pin)0, (Cpu.Pin)1, (Cpu.Pin)2, (Cpu.Pin)5, (Cpu.Pin)6 };

        public ModbusRtu(byte mModbusAddr)
        {
            ModbusAddr=mModbusAddr;
            for (int i = 0; i < 5; i++)
            {
                input[i] = new InputPort(pin[i], false, Port.ResistorMode.PullUp);
            }
        }

        ~ModbusRtu()
        {
            Stop();
        }

        //CRC16校驗
        private UInt16 GetCheckCode(byte[] buf, int nEnd)
        {
            UInt16 crc = (UInt16)0xffff;
            int i, j;
            for (i = 0; i < nEnd; i++)
            {
                crc ^= (UInt16)buf[i];
                for (j = 0; j < 8; j++)
                {
                    if ((crc & 1) != 0)
                    {
                        crc >>= 1;
                        crc ^= 0xA001;
                    }
                    else
                        crc >>= 1;
                }
            }
            return crc;
        }

        //啟動Modbus服務
    &nb
sp;   public void Run()
        {
            try
            {
                //僅有波特率選項,竟然沒有奇偶校驗控制
                serial = new SerialPort(new SerialPort.Configuration(Serial.COM1, BaudRate.Baud9600, false));
                Debug.Print("Open Serial OK");
                m_worker = new Thread(new ThreadStart(this.ModbusThreadProc));
                m_RunFlag = true;
                m_worker.Start();
            }
            catch
            {
                Debug.Print("Serial Error");
            }           
        }

        //停止Modbus服務
        public void Stop()
        {
            m_RunFlag = false;
            if (serial != null)
                serial.Dispose();
        }

        //Modbus Slave服務
        private void ModbusThreadProc()
        {
            Debug.Print("Start Modbus Slave");
            byte[] bytData=new byte[1];
            while (m_RunFlag)
            {
                serial.Read(bytData, 0, bytData.Length, Timeout.Infinite);
                RtuSlave(bytData[0]);
            }
        }
        //串口數據處理
        private void RtuSlave(byte bytData)
        {
            //Debug.Print(bytRtuDataIdx.ToString() + " - " + bytData.ToString());
            if (bytRtuDataFlag == 0)
            {
                //如果數據為首地址
                if (bytData == ModbusAddr)
                {
                    bytRtuDataFlag = 1;
                    bytRtuDataIdx = 0;
                    bytRtuData[bytRtuDataIdx++] = bytData;
                }
            }
            else
            {
                bytRtuData[bytRtuDataIdx++] = bytData;
                if (bytRtuDataIdx >= 8)
                {
                    //信息處理
                    UInt16 intCRC16 = GetCheckCode(bytRtuData, 8 - 2);
//Debug.Print("CRC:" + bytRtuData[8 - 2].ToString() + " " + ((byte)(intCRC16 & 0xFF)).ToString() +"|" + bytRtuData[8 - 1].ToString() + " " + ((byte)((intCRC16 >> 8) & 0xff)).ToString());
                    //CRC16校驗檢驗
                    if (bytRtuData[8 - 2] == (intCRC16 & 0xFF) && bytRtuData[8 - 1] == ((intCRC16 >> 8) & 0xff))
                    {
                        byte[] bytSendData = new byte[255];
                        byte bytErrorFlag = 0;
                        byte bytErrorNo = 1;

                        //Debug.Print("CRC OK");
                        //讀數據
                        if (bytRtuData[1] == 3)
                        {
                            UInt16 lngDataAddr = bytRtuData[2];
                            lngDataAddr = (UInt16)((lngDataAddr << 8) + bytRtuData[3]);  //地址
                            UInt16 lngDataNum = bytRtuData[4];
                            lngDataNum = (UInt16)((lngDataNum << 8) + bytRtuData[5]);    //數量

                            if (lngDataAddr * 2 + lngDataNum * 2 > 1024 || lngDataNum > 120)
                            {
                                bytErrorNo = 2;
                                bytErrorFlag = 0;
                            }
                            else
                            {
                                bytSendData[0] = bytRtuData[0];
                                bytSendData[1] = bytRtuData[1];
                                bytSendData[2] = (byte)(lngDataNum * 2);

                                //讀GPIO信號
                                DataBuff[0] 
									;= 0;
                                DataBuff[1] = (byte)((input[0].Read() ? 1 : 0) | (input[1].Read() ? 2 : 0) | (input[2].Read() ? 4 : 0) | (input[3].Read() ? 8 : 0) | (input[4].Read() ? 16 : 0));
                                
                                for (int i = 0; i < bytSendData[2]; i++)
                                {
                                    bytSendData[3 + i] = DataBuff[lngDataAddr * 2 + i];
                                }
                                intCRC16 = GetCheckCode(bytSendData, 3 + lngDataNum * 2);
                                bytSendData[3 + lngDataNum * 2] = (byte)(intCRC16 & 0xFF);                    //CRC校驗低位
                                bytSendData[4 + lngDataNum * 2] = (byte)((intCRC16 >> 8) & 0xff);             //CRC校驗高位                  

                                //發送數據
                                int intRet=serial.Write(bytSendData, 0, 5 + lngDataNum * 2);

                                //Debug.Print("SendData OK " + intRet.ToString() );
                                bytErrorFlag = 1;
                            }
                        }

                        if (bytErrorFlag == 0)
                        {
                            //協議不支持
                            bytSendData[0] = bytRtuData[0];
                            bytSendData[1] = (byte)(bytRtuData[1] | 0x80);
                            bytSendData[2] = bytErrorNo;

                            intCRC16 = GetCheckCode(bytSendData, 3);
                            bytSendData[3] = (byte)(intCRC16 & 0xFF);       &n
bsp;               //CRC校驗低位
                            bytSendData[4] = (byte)((intCRC16 >> 8) & 0xff);                //CRC校驗高位

                            //發送數據
                            serial.Write(bytSendData, 0, 5);
                        }
                    }
                    bytRtuDataFlag = 0;
                }
            }
            return;
        }

        //串口號
        public static class Serial
        {
            public const SerialPort.Serial COM1 = (SerialPort.Serial)0;
            public const SerialPort.Serial COM2 = (SerialPort.Serial)1;
        }

        //串口波特率
        public static class BaudRate
        {
            public const SerialPort.BaudRate Baud4800 = (SerialPort.BaudRate)4800;
            public const SerialPort.BaudRate Baud9600 = (SerialPort.BaudRate)9600;
            public const SerialPort.BaudRate Baud19200 = (SerialPort.BaudRate)19200;
            public const SerialPort.BaudRate Baud38400 = (SerialPort.BaudRate)38400;
            public const SerialPort.BaudRate Baud57600 = (SerialPort.BaudRate)57600;
            public const SerialPort.BaudRate Baud115200 = (SerialPort.BaudRate)115200;
            public const SerialPort.BaudRate Baud230400 = (SerialPort.BaudRate)230400;
        }
    }
}






?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕日韩一区二区| 亚洲精品第一国产综合野| 国产精品第一页第二页第三页| 国产精品成人午夜| 免费观看一级特黄欧美大片| 国产成人精品一区二区三区网站观看| 91在线看国产| 久久久一区二区三区捆绑**| 五月激情六月综合| 99精品黄色片免费大全| 久久亚洲免费视频| 日韩国产欧美三级| 精品视频资源站| 亚洲三级在线免费| 大白屁股一区二区视频| 精品久久久久久亚洲综合网 | 在线观看视频一区二区| 国产精品少妇自拍| 国内精品伊人久久久久av一坑 | 91国产丝袜在线播放| 日本一区二区在线不卡| 九九**精品视频免费播放| 91精品国产综合久久久蜜臀粉嫩| 亚洲精品国产精华液| 97aⅴ精品视频一二三区| 久久久高清一区二区三区| 韩日精品视频一区| 欧美一区二区三区在线电影| 午夜欧美在线一二页| 欧美色涩在线第一页| 亚洲综合无码一区二区| 欧美在线三级电影| 亚洲精品成人少妇| 欧美三级在线看| 午夜伦理一区二区| 欧美一卡二卡三卡| 精品影视av免费| 欧美tickling网站挠脚心| 精品影视av免费| 久久精品一区二区三区不卡| 国产精品资源在线观看| 日本一区二区成人在线| av一本久道久久综合久久鬼色| 国产精品毛片高清在线完整版 | 欧美精品123区| 三级亚洲高清视频| 精品播放一区二区| 成人免费电影视频| 日韩美女视频一区二区| 欧美中文字幕一区| 日本亚洲最大的色成网站www| 欧美高清www午色夜在线视频| 免费高清在线一区| 国产片一区二区三区| 美女视频一区二区| 在线不卡a资源高清| 国产精品色呦呦| 中文字幕久久午夜不卡| 久久97超碰色| 在线播放中文一区| 一本到不卡精品视频在线观看| 波多野结衣的一区二区三区| 欧美一三区三区四区免费在线看| 久久免费电影网| 国产精品久久久久久户外露出| 亚洲麻豆国产自偷在线| 日本中文字幕一区二区视频 | 热久久久久久久| 日韩亚洲欧美一区二区三区| 国产成人午夜精品影院观看视频| 亚洲三级在线免费| 欧美精品一区二区在线观看| 色婷婷激情一区二区三区| 日韩中文字幕不卡| 国产日韩欧美综合一区| 欧美日韩黄色一区二区| 大桥未久av一区二区三区中文| 午夜av电影一区| 中文字幕五月欧美| 精品国产欧美一区二区| 欧美优质美女网站| 成人一区二区在线观看| 日本三级亚洲精品| 亚洲卡通欧美制服中文| 久久久久久久久久久电影| 欧美视频一区二区三区| 国产成人av一区二区三区在线| 亚洲福利视频三区| 亚洲欧洲成人精品av97| 精品国产乱码久久久久久老虎| 91久久精品午夜一区二区| 国产激情视频一区二区三区欧美| 亚洲成在线观看| 国产精品国产馆在线真实露脸 | 国产麻豆成人传媒免费观看| 日韩国产精品久久| 亚洲一区二区三区中文字幕| 亚洲欧洲99久久| 日本一区二区三区在线观看| 亚洲精品一区二区三区在线观看| 欧美福利视频导航| 欧美三级视频在线| 一本色道综合亚洲| 一本久久a久久精品亚洲| 成人av网站在线观看免费| 国产精品一区在线| 国产精品亚洲一区二区三区在线 | 国产欧美精品一区二区色综合朱莉| 欧美一区二区免费视频| 欧美精品粉嫩高潮一区二区| 欧美日韩一区二区在线观看视频 | 欧美系列在线观看| 91一区一区三区| 99热在这里有精品免费| 波多野结衣中文一区| 99精品在线观看视频| 成人黄色小视频| 99在线热播精品免费| 成人a免费在线看| 99久精品国产| 欧美亚洲综合在线| 7777精品久久久大香线蕉 | 国产欧美精品在线观看| 国产欧美综合在线| 国产精品成人一区二区三区夜夜夜| 国产精品免费网站在线观看| 国产无遮挡一区二区三区毛片日本| 国产日韩欧美精品一区| 17c精品麻豆一区二区免费| 1024成人网色www| 亚洲福中文字幕伊人影院| 青青青伊人色综合久久| 国产乱子轮精品视频| 成人一道本在线| 一本到不卡免费一区二区| 欧美三级在线看| 精品国产污网站| 国产精品久久久久久久久动漫 | 在线观看欧美精品| 欧美色倩网站大全免费| 精品国产伦理网| 欧美高清视频不卡网| 久久一夜天堂av一区二区三区| 中文字幕一区av| 亚洲二区在线视频| 国产一区二区三区免费在线观看| 国产suv精品一区二区883| 91精品福利视频| 日韩女优电影在线观看| 中文字幕日韩一区| 麻豆精品精品国产自在97香蕉| 国产v日产∨综合v精品视频| 色丁香久综合在线久综合在线观看| 欧美日本高清视频在线观看| 国产欧美一二三区| 三级久久三级久久| 99久久精品国产精品久久| 欧美一卡2卡3卡4卡| 亚洲色图欧洲色图| 久久99精品网久久| 欧美无砖专区一中文字| 国产欧美一区二区精品性色 | 欧美一区永久视频免费观看| 国产午夜精品美女毛片视频| 一区二区三区在线视频免费| 久久精品国产99国产| 在线免费视频一区二区| 久久久三级国产网站| 亚洲国产成人av| 成人国产一区二区三区精品| 国产精品美女久久久久av爽李琼| 日本女优在线视频一区二区| 色偷偷久久一区二区三区| 欧美xingq一区二区| 亚洲一区二区三区四区的| 丁香婷婷综合色啪| 日韩免费高清av| 亚洲成在人线在线播放| 99re视频精品| 国产欧美一区二区精品婷婷 | 亚洲成人免费观看| av色综合久久天堂av综合| 精品国产精品网麻豆系列| 亚洲1区2区3区视频| 一本一本大道香蕉久在线精品| 国产欧美精品一区二区色综合| 日本美女一区二区三区视频| 欧美综合天天夜夜久久| 欧美国产精品劲爆| 狠狠色综合日日| 欧美不卡123| 日本麻豆一区二区三区视频| 欧美日韩免费一区二区三区| 亚洲综合在线免费观看| 99v久久综合狠狠综合久久| 日本一二三不卡| 成人av网站免费观看| 国产精品人成在线观看免费| 国产在线国偷精品免费看| 日韩欧美亚洲另类制服综合在线 |