国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

.net通過S7.net讀寫西門子PLC中,字符串,bool,整數(shù),小數(shù)及byte型

這篇具有很好參考價(jià)值的文章主要介紹了.net通過S7.net讀寫西門子PLC中,字符串,bool,整數(shù),小數(shù)及byte型。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

注:.net中通過TCP/IP方式通過S7.net.dll動(dòng)態(tài)庫(kù),連接到西門子PLC,西門子程序中許勾選優(yōu)化塊,程序讀取需要 db塊號(hào)+偏移量

.net通過S7.net讀寫西門子PLC中,字符串,bool,整數(shù),小數(shù)及byte型

一。使用VS項(xiàng)目,在項(xiàng)目中添加S7.net動(dòng)態(tài)庫(kù)

代碼中引用S7.net動(dòng)態(tài)庫(kù)

using S7.Net;

實(shí)例化PLC服務(wù)名

///

/// 實(shí)例化PLC

///

Plc S71500;

連接PLC按鈕時(shí)間編寫:
.net通過S7.net讀寫西門子PLC中,字符串,bool,整數(shù),小數(shù)及byte型

以上代碼可測(cè)試是否能連接至PLC

二.西門子中點(diǎn)位信息,在程序中地址表示說明

在DB塊中有如下變量
.net通過S7.net讀寫西門子PLC中,字符串,bool,整數(shù),小數(shù)及byte型

        /// <summary>
        /// 實(shí)例化PLC
        /// </summary>
        Plc S71500;

        /// <summary>
        /// 連接PLC
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            string ip=tb_plcip.Text.Trim();              //PLC地址IP 例192.168.0.1
            short rack= short.Parse( tb_rack.Text.Trim()); //PLC機(jī)架位置 默認(rèn)0
            short solt = short.Parse(tb_solt.Text.Trim()); //PLC插槽位置,以實(shí)際為準(zhǔn)
            //CpuType根據(jù)實(shí)際PLC連接,我這邊已1500PLC為例
            S71500 = new Plc(CpuType.S71500, ip, rack, solt); 
            //調(diào)用S7.NET中的方法連接PLC
            S71500.Open();
            //連接成功后使能操作按鈕
            if (S71500.IsConnected)
            {
                //判斷是否連接成功
                MessageBox.Show("連接PLC成功");
            }
        }

在程序中讀取需DB塊號(hào)+地址,分別寫法如下

DB1.DBW0 //地址為0,類型為整數(shù)

DB1.STRING2.18 //地址為2,字符長(zhǎng)度18 類型為字符串

DB1.B22 //地址為22,類型為字節(jié)型

DB1.DBD24 //地址為24,類型為實(shí)數(shù)

DB1.DBW28 //地址為28,類型為整數(shù)

DB1.DBW28 //地址為28,類型為整數(shù)

DB1.DBX29.0 //地址為29.0,類型為布爾

三,通過代碼讀寫Tag點(diǎn)信息,以下代碼可進(jìn)行以上Tag點(diǎn)信息的讀取及寫入,代碼如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-414460.html

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using S7.Net;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 實(shí)例化PLC
        /// </summary>
        Plc S71500;

        /// <summary>
        /// 連接PLC
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            string ip=tb_plcip.Text.Trim();              //PLC地址IP 例192.168.0.1
            short rack= short.Parse( tb_rack.Text.Trim()); //PLC機(jī)架位置 默認(rèn)0
            short solt = short.Parse(tb_solt.Text.Trim()); //PLC插槽位置,以實(shí)際為準(zhǔn)
            //CpuType根據(jù)實(shí)際PLC連接,我這邊已1500PLC為例
            S71500 = new Plc(CpuType.S71500, ip, rack, solt); 
            //調(diào)用S7.NET中的方法連接PLC
            S71500.Open();
            //連接成功后使能操作按鈕
            if (S71500.IsConnected)
            {
                //判斷是否連接成功
                MessageBox.Show("連接PLC成功");
            }
        }

        //****
        //讀取 ReadPLC("DB1.DBW0");
        //寫入 WritePLC("DB1.DBW0","1");
        //其中BOOL寫入: WritePLC(DB1.DBX29.0, "False");或WritePLC(DB1.DBX29.0, "True");


        #region  讀寫TAG點(diǎn)方法

        /// <summary>
        /// 去指定字符串中間字符
        /// </summary>
        /// <param name="sourse">字符串</param>
        /// <param name="startstr">首字符</param>
        /// <param name="endstr">尾字符</param>
        /// <returns></returns>
        public static string MidStrEx(string sourse, string startstr, string endstr)
        {
            string result = string.Empty;
            int startindex, endindex;
            try
            {
                startindex = sourse.IndexOf(startstr);
                if (startindex == -1)
                {
                    return result;
                }
                string tmpstr = sourse.Substring(startindex + startstr.Length);
                endindex = tmpstr.IndexOf(endstr);
                if (endindex == -1)
                {
                    return result;
                }
                result = tmpstr.Remove(endindex);

            }
            catch (Exception)
            {

            }
            return result;
        }
        /// <summary>
        /// 寫入PLC數(shù)值
        /// </summary>
        /// <param name="DataTag"></param>
        public void WritePLC(string DataTag, string Data)
        {
            try
            {
                #region 邏輯處理

                string Type = "STRING";
                if (DataTag.Contains("STRING"))
                {
                    Type = "STRING";
                }
                else if (DataTag.Contains("DBW"))
                {
                    Type = "Word";
                }
                else if (DataTag.Contains(".B"))
                {
                    Type = "Byte";
                }
                else if (DataTag.Contains("DBD"))
                {
                    Type = "Real";
                }
                else if (DataTag.Contains("DBX"))
                {
                    Type = "Bool";
                }

                
                int strAdr = 0;
                //取到db塊號(hào)
                int dbInt = dbInt = int.Parse(MidStrEx(DataTag, "DB", ".")); ;
                //字符串類型
                if (Type == "STRING")
                {
                    //取到地址
                    strAdr = int.Parse(MidStrEx(DataTag, "STRING", "."));
                    //寫入PLC數(shù)據(jù)
                    S71500.Write(DataType.DataBlock, dbInt, strAdr, GetPLCStringByteArray(Data));
                }
                else if (Type == "Word")
                {
                    //寫入整數(shù)型
                    strAdr = int.Parse(Regex.Match(DataTag, @"\d+$").ToString());
                    S71500.Write(DataType.DataBlock, dbInt, strAdr, Convert.ToInt16(Data));
                }
                else if (Type == "Byte")
                {
                    //寫入字節(jié)型
                    strAdr = int.Parse(Regex.Match(DataTag, @"\d+$").ToString());
                    S71500.Write(DataType.DataBlock, dbInt, strAdr, Convert.ToByte(Data));
                }
                else if (Type == "Real")
                {
                    //寫入實(shí)數(shù)
                    strAdr = int.Parse(Regex.Match(DataTag, @"\d+$").ToString());
                    S71500.Write(DataType.DataBlock, dbInt, strAdr, Convert.ToDouble(Data));
                }
                else if (Type == "Bool")
                {
                    //寫入Bool值
                    S71500.Write(DataTag.ToUpper(), Convert.ToBoolean(Data));
                }
                #endregion
            }
            catch (Exception ex)
            {
            //寫入異常

            }
        }
        int errorCount = 0;
        /// <summary>
        /// 讀取PLC數(shù)據(jù)
        /// </summary>
        /// <param name="DataTag">Tag點(diǎn)名稱</param>
        public string ReadPLC(string DataTag)
        {
            string returnData = "";
            try
            {
                if (DataTag.Contains("STRING"))
                {
                    //取到DB塊號(hào)
                    int dbInt = dbInt = int.Parse(MidStrEx(DataTag, "DB", "."));
                    //取到偏移量地址
                    int strAdr = int.Parse(MidStrEx(DataTag, "STRING", "."));
                    //獲取字符串長(zhǎng)度
                    var reservedLength = (byte)S71500.Read(DataType.DataBlock, dbInt, strAdr, VarType.Byte, 1);
                    //讀取時(shí)在地址前加兩位偏移
                    string StrReplac = (string)S71500.Read(DataType.DataBlock, dbInt, strAdr + 2, VarType.String, reservedLength);
                    //去除字符串后面空白符號(hào)
                    returnData = StrReplac.Replace("\0", "");
                }
                else if (DataTag.Contains("DBW"))
                {         
                    //讀取整數(shù)型數(shù)據(jù)
                    ushort UpValue = (ushort)S71500.Read(DataTag);
                    returnData = Convert.ToString(UpValue);
                }
                else if (DataTag.Contains(".B"))
                {
                    //取到DB塊號(hào)
                    int dbInt = dbInt = int.Parse(MidStrEx(DataTag, "DB", "."));
                    //取到偏移量地址
                    int strAdr = int.Parse(Regex.Match(DataTag, @"\d+$").ToString());
                    //獲取字符串長(zhǎng)度
                    var reservedLength = (byte)S71500.Read(DataType.DataBlock, dbInt, strAdr, VarType.Byte, 1);
                    //將讀取數(shù)據(jù)轉(zhuǎn)為字符串
                    returnData = Convert.ToString(reservedLength);
                }
                else if (DataTag.Contains("DBD"))
                {
                    //讀取小數(shù)型數(shù)據(jù)
                    double UpValue = ((uint)S71500.Read(DataTag)).ConvertToFloat();
                    if (Convert.ToString(UpValue).Trim() != "")
                    {
                        //截取保留小數(shù)位長(zhǎng)度
                        returnData = Math.Round(UpValue, 3).ToString();
                    }
                }
                else if (DataTag.Contains("DBX"))
                {
                    //讀取Bool值數(shù)據(jù)
                    var db1Bool1 = S71500.Read(DataTag);
                    returnData = db1Bool1.ToString();
                }
            }
            catch (Exception ex)
            {
               //讀取異常
            }

            return returnData;
        }

        /// <summary>
        /// 獲取西門子PLC字符串?dāng)?shù)組--String
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        private byte[] GetPLCStringByteArray(string str)
        {
            byte[] value = Encoding.Default.GetBytes(str);
            byte[] head = new byte[2];
            head[0] = Convert.ToByte(254);
            head[1] = Convert.ToByte(str.Length);
            value = head.Concat(value).ToArray();
            return value;
        }

        /// <summary>
        /// 獲取西門子PLC字符串?dāng)?shù)組--WString
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        private byte[] GetPLCWStringByteArray(string str)
        {
            byte[] value = Encoding.BigEndianUnicode.GetBytes(str);
            byte[] head = BitConverter.GetBytes((short)508);
            byte[] length = BitConverter.GetBytes((short)str.Length);
            Array.Reverse(head);
            Array.Reverse(length);
            head = head.Concat(length).ToArray();
            value = head.Concat(value).ToArray();
            return value;
        }
        #endregion


    }
}

到了這里,關(guān)于.net通過S7.net讀寫西門子PLC中,字符串,bool,整數(shù),小數(shù)及byte型的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 西門子PLC S7-1500系列CPU與西門子PLC S7-300系列的通訊模塊CP343-1進(jìn)行TCP通訊的方法

    西門子PLC S7-1500系列是西門子新一代PLC產(chǎn)品,它通過多方面的創(chuàng)新,為用戶提供了更高性價(jià)比的產(chǎn)品,提高了用戶的工程實(shí)施效率。西門子PLC S7-1500為用戶在自動(dòng)化控制系統(tǒng)中提供了更高的運(yùn)行能力,而且簡(jiǎn)單易用,節(jié)省了大量的系統(tǒng)開發(fā)時(shí)間,西門子PLC?S7-1500系列有很強(qiáng)的通

    2023年04月08日
    瀏覽(29)
  • 西門子PLC S7-1200如何實(shí)現(xiàn)遠(yuǎn)程上下載?

    西門子PLC S7-1200如何實(shí)現(xiàn)遠(yuǎn)程上下載?

    西門子S7-1200是一款高性能的PLC,具有模塊化、結(jié)構(gòu)緊湊、功能全面、編程簡(jiǎn)單的特點(diǎn),總工業(yè)自動(dòng)化領(lǐng)域中應(yīng)用廣泛,如貼片系統(tǒng)、傳送帶系統(tǒng)、污水處理廠、配電站、能源管理系統(tǒng)。 在使用過程,無論是為了減少現(xiàn)場(chǎng)調(diào)試的成本時(shí)間,還是為了給客戶提高更快更強(qiáng)的技術(shù)

    2024年02月12日
    瀏覽(28)
  • 西門子S7-1200與S7-300PLC的九大不同點(diǎn)

    西門子S7-1200與S7-300PLC的九大不同點(diǎn)

    S7-1200作為新推出的緊湊型控制器,其產(chǎn)品定位在原有的SIMATIC S7-200和S7-300之間,它與S7-300的區(qū)別主要體現(xiàn)在硬件、通信、工程、存儲(chǔ)器、功能塊、計(jì)數(shù)器、定時(shí)器、工藝功能等方面。 一、硬件的區(qū)別 在硬件擴(kuò)展方面,S7-300的主機(jī)架多支持八個(gè)擴(kuò)展模塊,而S7-1200支持?jǐn)U展多八

    2024年01月25日
    瀏覽(18)
  • 西門子PLC S7-1200程序?qū)嵗鏖T子1200與安川機(jī)器人TCP IP通訊

    西門子PLC S7-1200程序?qū)嵗?,西門子1200與安川機(jī)器人TCP IP通訊

    西門子PLC S7-1200程序?qū)嵗﹫D版本V15 1,西門子1200與安川機(jī)器人TCP IP通訊,包含機(jī)器人GSD文件; 2,西門子1200控制6軸伺服電機(jī),四臺(tái)臺(tái)脈沖控制臺(tái)達(dá)B2伺服,兩臺(tái)PN通訊控制西門子V90伺服電機(jī); 3,兩臺(tái)西門子1200開放式通訊交互數(shù)據(jù)聯(lián)動(dòng); 4,與4臺(tái)位移傳感器modbus485輪詢讀取

    2024年04月10日
    瀏覽(88)
  • C# 讀取西門子S7系列PLC教程及源碼

    若要?jiǎng)?chuàng)建驅(qū)動(dòng)程序的實(shí)例,需要使用此構(gòu)造函數(shù): CPU:這指定您要連接到的? CPU 。支持的 CPU 包括: ip :指定 CPU 或外部以太網(wǎng)卡的 IP 地址 機(jī)架:它包含PLC的 機(jī)架 ,您可以在Step7的硬件配置中找到 插槽 :這是CPU的插槽,您可以在Step7的硬件配置中找到 例: 此代碼為 IP 地

    2024年02月08日
    瀏覽(23)
  • C#與西門子PLC通訊——手搓S7通訊協(xié)議

    C#與西門子PLC通訊——手搓S7通訊協(xié)議

    本文將嘗試從源碼角度,使用Tcp/Ip的方式直接與西門子PLC進(jìn)行交互通訊。 往期博客參考 C#與西門子PLC通訊——新手快速入門 C#與西門子PLC通訊——熟手快速入門 建議先看一下這兩篇,了解預(yù)設(shè)背景。 知其然,知其所以然。 這篇文章,我們就嘗試重復(fù)造一個(gè)輪子。通過對(duì)通訊

    2024年02月04日
    瀏覽(28)
  • 兩個(gè)西門子S7-1200PLC之間的TCP以太網(wǎng)通訊

    兩個(gè)西門子S7-1200PLC之間的TCP以太網(wǎng)通訊

    兩個(gè)西門子S7-1200PLC之間的TCP以太網(wǎng)通訊 西門子S7_1200兩個(gè)CPU之間的以太網(wǎng)通訊程序,一個(gè)做主站一個(gè)做從站,可實(shí)現(xiàn)兩個(gè)CPU之間的數(shù)據(jù)發(fā)送和讀取,外加兩個(gè)西門子KTP1200 12寸的觸摸屏, 兩個(gè)西門子S7-1200 PLC之間的TCP以太網(wǎng)通訊 隨著工業(yè)自動(dòng)化的發(fā)展,越來越多的設(shè)備之間需

    2024年02月02日
    瀏覽(21)
  • 西門子PLC S7-1200程序?qū)嵗?西門子1200與安川機(jī)器人TCP/IP通訊,包含機(jī)器人GSD文件

    西門子PLC S7-1200程序?qū)嵗?西門子1200與安川機(jī)器人TCP/IP通訊,包含機(jī)器人GSD文件

    西門子PLC S7-1200程序?qū)嵗﹫D版本V15,僅供電氣編程者學(xué)習(xí)借鑒, 1,西門子1200與安川機(jī)器人TCP/IP通訊,包含機(jī)器人GSD文件; 2,西門子1200控制6軸伺服電機(jī),四臺(tái)臺(tái)脈沖控制臺(tái)達(dá)B2伺服,兩臺(tái)PN通訊控制西門子V90伺服電機(jī); 3,兩臺(tái)西門子1200開放式通訊交互數(shù)據(jù)聯(lián)動(dòng); 4,與

    2024年02月11日
    瀏覽(34)
  • 西門子PLC S7-200SMART Modbus TCP通訊的步驟和要點(diǎn)

    西門子PLC S7-200SMART Modbus TCP通訊的步驟和要點(diǎn)

    Modbus TCP是一個(gè)非常傳統(tǒng),應(yīng)用廣泛的通訊協(xié)議,很多智能設(shè)備都支持該協(xié)議。西門子S7-200SMART及1200、1500系列都免費(fèi)支持(300和400還是要高昂收費(fèi)),并且做成了標(biāo)準(zhǔn)庫(kù),使用起來非常方便,下面簡(jiǎn)單介紹一下客戶端的配置步驟,服務(wù)器的配置更加簡(jiǎn)單,可以自行摸索: 1、引

    2023年04月09日
    瀏覽(21)
  • PLC實(shí)驗(yàn)—西門子S7 1200讀取旋轉(zhuǎn)編碼器數(shù)據(jù)并計(jì)算電機(jī)轉(zhuǎn)速

    PLC實(shí)驗(yàn)—西門子S7 1200讀取旋轉(zhuǎn)編碼器數(shù)據(jù)并計(jì)算電機(jī)轉(zhuǎn)速

    注意PTO控制步進(jìn)電機(jī)實(shí)驗(yàn)博途軟件需要V14版本,不然沒有PTO功能塊 軟件的下載請(qǐng)點(diǎn)擊下方百度網(wǎng)盤的鏈接 鏈接:https://pan.baidu.com/s/11mQFVnaQxrUy4W9nGIk8Jw 提取碼:6lva 詳細(xì)的操作指導(dǎo)視頻已經(jīng)放到了B站上 Simens S7-1200讀取增量式編碼器數(shù)據(jù) Simens S7-1200根據(jù)編碼器數(shù)據(jù)計(jì)算電機(jī)轉(zhuǎn)速

    2024年02月05日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包