日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

基于上海拜安光纤传感分析仪OSA搭建无线通信系统

發布時間:2023/12/13 综合教程 31 生活家
生活随笔 收集整理的這篇文章主要介紹了 基于上海拜安光纤传感分析仪OSA搭建无线通信系统 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

0.前言

項目現場需要通過光纖測量應變,并需要遠程實時監控。打算搭建一個無線通信系統,基于上海拜安光纖傳感分析儀(OSA)。

購買了一套OSA,和上海正偉科技有限公司的4G傳輸模塊(MQ)。

1.本地搭建通信

1.1設備介紹

上海拜安光纖解調設備(OSA),FT310系列,有RJ45端口和RS232協議端口。

上海正偉無限發送設備(MQ),有RS232協議端口。

拜安提供了以TCP/IP協議通信的上位機,連上網線即可收發數據并顯示。

拜安也提供了以Modbus TCP協議通信的串口方式。

1.2ModBus TCP協議

TCP/IP協議可以使用RJ45端口實現通信。Modbus協議屬于應用層,可分為ASCII、RTU、TCP方式。

Modbus RTU一般通過RS485協議方式的9針COM端口傳輸,Modbus TCP一般通過TCP協議傳輸。

SIM傳輸一般通過DTU(Data transfer unit)協議傳輸。

freemodbus modbus TCP 學習筆記

1.3嘗試通信

解調設備與電腦通信-RJ45

   使用網線連接,在上位機上選擇網卡設備,關閉防火墻。設備可以通信。

   windows下用cmd命令netstat查看系統端口使用情況

   

解調設備與電腦通信-Modbus TCP

   連接RS232協議的COM口,解調設備為公頭,實驗只連接了Rx與Tx兩個引腳。

   連上設備,使用上位機,發現無法讀取數據,上位機提示必須連接網絡,所以改用串口助手收發數據。

   根據對方提供的Modbus TCP協議,使用串口助手輸入:

   輸入: 00 00 00 00 00 06 01 00 00 01 00 04

   返回各種數據,不穩定且感覺不正確。推出Modbus TCP方式需要連接設備RJ45端口才能通信。

   而串口助手只能打開COM口才能通信,所以購買了RJ45轉COM口的轉接線。再次測試看看什么結果。

   買回來發現并不能通信,TCP方式,需要直接用網線連接設備和電腦。

解調設備與電腦通信-Modbus RTU

   有問對方要了RTU方式的通信指令,輸入:01 00 00 00 04 后面加上校驗碼后,發現設備返回的是與輸入指令一模一樣的字節碼。

   感覺這個是不正確的,無法讀取傳感器的數值,故無法通信。(難道還需要把所有引腳都插上?)

  Modbus TCP與RTU的區別

   兩個協議的本質都是MODBUS協議,都是靠MODBUS寄存器地址來交換數據;
   但所用的硬件接口不一樣,Modbus RTU一般采用串口RS232C或RS485/422,
   而Modbus TCP一般采用以太網口。現在市場上有很多協議轉換器,可以輕松的將這些不同的協議相互轉換,比較有名的我用過的是研華(Advantech)的。
   OS模型7層協議【http://www.cnblogs.com/skyofbitbit/p/3713125.html】

1.4成功通信

  嘗試了多次后,發現串口助手無法使用TCP方式,故使用C#寫了關于ModBus TCP通信的上位機。

  本質上使用Socket編程,找到IP地址和端口號,然后建立Socket連接。

  初識Modbus TCP/IP——C#編寫Modbus TCP客戶端程序

     public Socket newclient;  
        public bool Connected;  
        public Thread myThread;  
        public delegate void MyInvoke(string str);  
        public Form1()  
        {  
            InitializeComponent();  
        }  
  
        private void exit_Click(object sender, EventArgs e)  
        {  
            Application.Exit();  
        }  
  
        public void Connect()  
        {  
            byte[] data = new byte[1024];  
  
            string ipadd = serverIP.Text.Trim();//將服務器IP地址存放在字符串 ipadd中  
            int port = Convert.ToInt32(serverPort.Text.Trim());//將端口號強制為32位整型,存放在port中  
  
            //創建一個套接字   
  
            IPEndPoint ie = new IPEndPoint(IPAddress.Parse(ipadd), port);  
            newclient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);  
  
  
            //將套接字與遠程服務器地址相連  
            try  
            {  
                newclient.Connect(ie);  
                connect.Enabled = false;//使連接按鈕變成虛的,無法點擊  
                Connected = true;  
  
            }  
            catch (SocketException e)  
            {  
                MessageBox.Show("連接服務器失敗  " + e.Message);  
                return;  
            }  
  
            ThreadStart myThreaddelegate = new ThreadStart(ReceiveMsg);  
            myThread = new Thread(myThreaddelegate);  
            myThread.Start();  
            tmSend.Enabled = true;//增加定時發送需要將此功能打開  
  
        }  
  
        private void connect_Click_1(object sender, EventArgs e)  
        {  
            Connect();  
        }  

還有一點需要注意的是,ModBus TCP通信服務不是設備提供的,而是設備自帶上位機軟件提供的。

所以需要打開OSA軟件,并開啟ModBus TCP服務。

2.無線通信

2.1上海正偉設備

正偉通信設備通過RS232串口與電腦通信,接收數據。

然后通過安裝在設備里的SIM,遠程發送數據到服務器。

服務器再分發到遠端連接服務的客戶機上。

所以從OSA設備的到數據,再通過串口發送給正偉通信設備即可實現遠程數據傳輸。

2.2ModBus RTU通信

使用C#實現,調用系統的SerialPort類,并設置好參數,使用Open()方法打開設備。

//串口類
        private SerialPort sp = new SerialPort();
        //狀態
        public string modbusStatus;
        public string[] portsName;
        public string receiveData;
        public float[] temperatrueData; 
        public ModBus() { }

        //構造方法
        public ModBus(bool getNames)
        {
            portsName = SerialPort.GetPortNames();
            Array.Sort(portsName);
        }
        //析構方法
        ~ModBus() { }
        //打開串口
        public bool Open(string portName, int baudRate, int databits, Parity parity, StopBits stopbits)
        {
            if (!sp.IsOpen)
            {
                sp.PortName = portName;
                sp.BaudRate = baudRate;
                sp.DataBits = databits;
                sp.Parity = parity;
                sp.StopBits = stopbits;
                sp.ReadTimeout = 1000;
                sp.WriteTimeout = 1000;
                sp.NewLine = "
";    //設置換行的時候
                //sp.RtsEnable = true;  //是否可以發送rts信號
                sp.Handshake = Handshake.None;
                sp.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(myWriteDataReceive);

                try
                {
                    sp.Open();
                }
                catch (Exception err)
                {
                    modbusStatus = "無法打開端口" + portName + ": " + err.Message;
                    return false;
                }
                modbusStatus = portName + " 端口打開連接成功";
                return true;
            }
            else
            {
                modbusStatus = portName + " 已經打開了";
                return false;
            }
        }

發送數據代碼,調用SerialPort類的WriteLine方法

        public bool sendData2(string data)
        {
            if (sp.IsOpen)
            {
                //清空串口輸入輸出緩沖
                sp.DiscardOutBuffer();
                sp.DiscardInBuffer();
            }
            try
            {
                sp.WriteLine(data);
                modbusStatus = string.Format("成功發送:{0}。", data);
                return true;
            }catch(Exception e)
            {
                modbusStatus = e.ToString();
                return false;
            }
        }

總結

以上是生活随笔為你收集整理的基于上海拜安光纤传感分析仪OSA搭建无线通信系统的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。