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

PLC-IoT 網(wǎng)關(guān)開(kāi)發(fā)札記(6): Xamarin.Forms 的 CollectionView 綁定了什么?

這篇具有很好參考價(jià)值的文章主要介紹了PLC-IoT 網(wǎng)關(guān)開(kāi)發(fā)札記(6): Xamarin.Forms 的 CollectionView 綁定了什么?。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

需求:使用 CollectionView 呈現(xiàn)數(shù)據(jù)列表和按鈕動(dòng)作

項(xiàng)目開(kāi)發(fā)中不可避免地會(huì)遇到在一個(gè)頁(yè)面中呈現(xiàn)列表的情況,使用 CollectionView 作為容器是很方便的。CollectionView 中顯示的數(shù)據(jù)對(duì)應(yīng)于后臺(tái)的一個(gè) IEnumerable 派生的列表,常用的是 List<T> 和 Vector<T>,我習(xí)慣于使用 List<T> 作為后臺(tái)的數(shù)據(jù)表。

CollectionView 的每一項(xiàng)對(duì)應(yīng)后臺(tái)的 List<T> 的一條記錄。在網(wǎng)關(guān)應(yīng)用中,有一個(gè)頁(yè)面要列出所有的場(chǎng)景,單擊(不論是鼠標(biāo)還是手指單點(diǎn)一下)執(zhí)行這個(gè)場(chǎng)景,單擊條目右側(cè)的“配置...”按鈕對(duì)這個(gè)場(chǎng)景進(jìn)行配置。

PLC-IoT 網(wǎng)關(guān)開(kāi)發(fā)札記(6): Xamarin.Forms 的 CollectionView 綁定了什么?,visual studio,android,c#11.0,物聯(lián)網(wǎng)

CollectionView 的 SelectionMode=“Single”,SelectionChanged 事件響應(yīng)對(duì)這個(gè)條目的單擊。在這個(gè)頁(yè)面中,CollectionView 的每一條用一個(gè) Grid 包裝,包括了一個(gè)引導(dǎo)圖標(biāo),一個(gè)主條目 Label 顯示這個(gè)場(chǎng)景的名稱(chēng),一個(gè)付條目 Labe 顯示這個(gè)場(chǎng)景的類(lèi)型,右側(cè)的裝填了一個(gè)“配置”按鈕。 兩個(gè) Label 的 Text 可以在 XAML 中用顯示綁定的方式顯示對(duì)應(yīng)的屬性,但問(wèn)題來(lái)了,“配置”按鈕應(yīng)該綁定什么呢?也就是說(shuō),對(duì)這個(gè)條目中包含的無(wú)綁定控件,怎么判斷是哪一個(gè)條目的“配置”按鈕被點(diǎn)擊了呢?

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="I2oT.Views.ScenesPage"
             Title="場(chǎng)景">

    <ContentPage.Resources>
        <Style TargetType="Button">
            <Setter Property="VisualStateManager.VisualStateGroups">
                <VisualStateGroupList>
                    <VisualStateGroup x:Name="CommonStates">
                        <VisualState x:Name="Normal" >
                            <VisualState.Setters>
                                <Setter Property="Scale" Value="1" />
                            </VisualState.Setters>
                        </VisualState>

                        <VisualState x:Name="Pressed">
                            <VisualState.Setters>
                                <Setter Property="Scale" Value="0.9" />
                            </VisualState.Setters>
                        </VisualState>
                    </VisualStateGroup>
                </VisualStateGroupList>
            </Setter>

            <Setter Property="TextColor" Value="{StaticResource AppForegroundColor}"/>
            <Setter Property="BackgroundColor" Value="{StaticResource AppBackgroundColor}"/>
            <Setter Property="FontSize" Value="Caption"/>
            <Setter Property="HeightRequest" Value="32"/>
            <Setter Property="MinimumHeightRequest" Value="10"/>
            <Setter Property="CornerRadius" Value="2"/>
            <Setter Property="Padding" Value="4"/>
            <Setter Property="HorizontalOptions" Value="Start"/>

        </Style>

        <Style x:Key="ItemButtonStyle" TargetType="Button">
            <Setter Property="VisualStateManager.VisualStateGroups">
                <VisualStateGroupList>
                    <VisualStateGroup x:Name="CommonStates">
                        <VisualState x:Name="Normal" >
                            <VisualState.Setters>
                                <Setter Property="Scale" Value="1" />
                            </VisualState.Setters>
                        </VisualState>

                        <VisualState x:Name="Pressed">
                            <VisualState.Setters>
                                <Setter Property="Scale" Value="0.8" />
                            </VisualState.Setters>
                        </VisualState>
                    </VisualStateGroup>
                </VisualStateGroupList>
            </Setter>

            <Setter Property="TextColor" Value="{StaticResource AppTextCommonColor}"/>
            <Setter Property="BackgroundColor" Value="Transparent"/>
            <Setter Property="FontSize" Value="Caption"/>
            <Setter Property="HeightRequest" Value="32"/>
            <Setter Property="MinimumHeightRequest" Value="10"/>
            <Setter Property="BorderColor" Value="{StaticResource AppTextCommonColor}"/>
            <Setter Property="BorderWidth" Value="0.5"/>
            <Setter Property="CornerRadius" Value="2"/>
            <Setter Property="Padding" Value="4"/>
            <Setter Property="VerticalOptions" Value="Center"/>
            <Setter Property="HorizontalOptions" Value="Start"/>
            <Setter Property="Margin" Value="4,0"/>
            <Setter Property="CharacterSpacing" Value="1"/>
        </Style>
    </ContentPage.Resources>

    <ContentPage.ToolbarItems>
        <ToolbarItem Text="刷新" Clicked="RefreshSubsetList"/>
        <ToolbarItem Text="添加" Clicked="OnAddSceneClicked"/>
    </ContentPage.ToolbarItems>

    <CollectionView x:Name="collectionView"
                Margin="{StaticResource PageMargin}"
                SelectionMode="Single"
                SelectionChanged="OnSelectionChanged">

        <CollectionView.Header>
            <ScrollView Orientation="Horizontal">
                <StackLayout Orientation="Horizontal" >
                    <Button x:Name="btnInstantScene" Text="即時(shí)場(chǎng)景" Clicked="DisplayInstantScenes"/>
                    <Button x:Name="btnTimingScene" Text="定時(shí)場(chǎng)景" Clicked="DisplayTimingScenes"/>
                    <Button x:Name="btnSensorScene" Text="自動(dòng)化場(chǎng)景" Clicked="DisplaySensorScenes"/>
                </StackLayout>
            </ScrollView>
        </CollectionView.Header>

        <CollectionView.ItemsLayout>
            <LinearItemsLayout Orientation="Vertical" ItemSpacing="8" />
        </CollectionView.ItemsLayout>

        <CollectionView.ItemTemplate>
            <DataTemplate>
                <StackLayout>
                    <Grid ColumnDefinitions="0.15*,*,0.4*">
                        <Image Grid.RowSpan="2"
                               Source="scene.png"
                               Aspect="AspectFit"
                               VerticalOptions="Start"
                               HeightRequest="20"
                               BackgroundColor="Transparent"/>
                        
                        <Label Grid.Row ="0"
                               Grid.Column="1"
                               Text="{Binding Name}"
                               FontSize="Small"
                               TextColor="{Binding ViewColor}"
                               BackgroundColor="Transparent"/>

                        <Label Grid.Row ="1" 
                               Grid.Column="1"
                               Text="{Binding Descriptive}"
                               TextColor="{StaticResource DescriptiveTextColor}"
                               FontSize="Caption" 
                               BackgroundColor="Transparent"/>

                        <Button Grid.RowSpan="2" Grid.Row="0" Grid.Column="2"
                                Text="配置..." Style="{StaticResource ItemButtonStyle}"
                                Clicked="OnDefineScene"/>
                    </Grid>
                </StackLayout>
            </DataTemplate>
        </CollectionView.ItemTemplate>

        <CollectionView.Footer>
            <Label x:Name="lbMessage" 
                   Text="Status"
                   FontSize="Caption" 
                   TextColor="{StaticResource AppTipIconColor}"
                   VerticalOptions="EndAndExpand"
                   HorizontalOptions="FillAndExpand"
                   HorizontalTextAlignment="Center"/>
        </CollectionView.Footer>
    </CollectionView>
</ContentPage>

Xamarin.Forms 的 CollectionView 中的子控件的 BindingContext

一開(kāi)始我也對(duì)這個(gè)“綁定”感到手足無(wú)措,后來(lái)突然想到了一個(gè)辦法:使用 Debug 模式,斷點(diǎn)運(yùn)行到 OnDefineScene 函數(shù)中,用 Shift+F9 查看一下是否有可用的線索。果然找到了!原來(lái),在 CollectionView 條目中定義的子控件,不論是否顯示地使用 {Binding xxxProperty} 進(jìn)行綁定,這些子控件的 BindingContext 竟然就是被綁定列表的對(duì)應(yīng)記錄!

cs 代碼

using I2oT.Data;
using I2oT.Models;
using I2oT.Views.Scenes;
using I2oT.Views.Subsets;
using I2oT.Views.SystemSettings;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace I2oT.Views
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class ScenesPage : ContentPage
    {
        private List<SceneModel> sceneList = null;
        private List<SceneModel> instantSceneList = null;
        private List<SceneModel> timingSceneList = null;
        private List<SceneModel> sensorSceneList = null;

        public ScenesPage()
        {
            InitializeComponent();
        }

        protected override void OnAppearing()
        {
            base.OnAppearing();

            RefreshSceneList(this, new EventArgs());
            lbMessage.Text = "";
        }

        private void RefreshSceneList(object sender, EventArgs e)
        {
            collectionView.ItemsSource = null;
            sceneList = (new SceneModel()).GetAll();
            collectionView.ItemsSource = sceneList;

            instantSceneList = new List<SceneModel>();
            timingSceneList = new List<SceneModel>();
            sensorSceneList = new List<SceneModel>();

            foreach (var sx in sceneList)
            {
                if (sx.Type == 1)
                {
                    instantSceneList.Add(sx);
                }
                else if (sx.Type == 2)
                {
                    timingSceneList.Add(sx);
                }
                else if (sx.Type == 3)
                {
                    sensorSceneList.Add(sx);
                }
            }

            btnInstantScene.Text = "即時(shí)場(chǎng)景 " + instantSceneList.Count().ToString();
            btnTimingScene.Text = "定時(shí)場(chǎng)景 " + timingSceneList.Count().ToString();
            btnSensorScene.Text = "自動(dòng)化場(chǎng)景 " + sensorSceneList.Count().ToString();
        }

        private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (sender == null || e == null) return;

            SceneModel scene = (SceneModel)e.CurrentSelection.FirstOrDefault();
            if (scene == null) return;

            if (scene.Type != 1) return;

            // Only instant scene can be performed directly.
            if (scene.Type == 1)
            {
                App.Gateway.PerformScene(scene.ID);
                RefreshSubsetList(null, new EventArgs());
            }
        }

        private void OnDefineScene(object sender, EventArgs e)
        {
            var sx = (SceneModel)(((Button)sender).BindingContext);

            switch (sx.Type)
            {
                case 1:
                case 3:
                    Shell.Current.GoToAsync($"{nameof(InstantSceneDefinePage)}?{nameof(InstantSceneDefinePage.SceneID)}={sx.ID}");
                    break;
                case 2:
                    string uri = "";
                    uri += $"{nameof(TimingSceneDefinePage)}?";
                    uri += $"{nameof(TimingSceneDefinePage.SceneID)}={sx.ID}&";
                    uri += $"{nameof(TimingSceneDefinePage.SceneName)}={sx.Name}";

                    Shell.Current.GoToAsync(uri);
                    break;

                default:
                    break;
            }
        }

        private void OnAddSceneClicked(object sender, EventArgs e)
        {
            Shell.Current.GoToAsync($"{nameof(AddNewScenePage)}");
        }

        private void DisplayInstantScenes(object sender, EventArgs e)
        {
            collectionView.ItemsSource = instantSceneList;
        }

        private void DisplayTimingScenes(object sender, EventArgs e)
        {
            collectionView.ItemsSource = timingSceneList;
        }

        private void DisplaySensorScenes(object sender, EventArgs e)
        {
            collectionView.ItemsSource = sensorSceneList;
        }
    }
}

上述代碼中,在 OnAppearing 方法中調(diào)用 RefreshSceneList 方法獲取已定義的場(chǎng)景列表,列表中的每一個(gè)元素是一個(gè) SceneModel (場(chǎng)景的數(shù)據(jù)模型),默認(rèn)將全部場(chǎng)景列出,通過(guò) ItemsSource 屬性將 sceneList 綁定到 CollectionView。

斷點(diǎn)觀察

在 OnDefineScene 事件的第一條語(yǔ)句上設(shè)置斷點(diǎn),運(yùn)行到此處暫停,然后 Shift+F9 打開(kāi)快速監(jiān)視,輸入sender,(Button)sender,再輸入((Button)sender).BindingContext,得到的計(jì)算值如下圖所示。也就是說(shuō),這個(gè)配置按鈕的 BindingContext 是 CollectionView 綁定的列表的當(dāng)前元素!

PLC-IoT 網(wǎng)關(guān)開(kāi)發(fā)札記(6): Xamarin.Forms 的 CollectionView 綁定了什么?,visual studio,android,c#11.0,物聯(lián)網(wǎng)

哦吼,這下好辦啦!直接將這個(gè) SceneModel 的 ID 傳遞給下級(jí)頁(yè)面就可以啦~

總結(jié)

一旦 CollectionView 的 ItemsSource 被賦值為一個(gè)類(lèi)的列表,那么這個(gè) CollectionView 的每一個(gè)條目中的任何控件的默認(rèn) BindingContext 就是這個(gè)列表的當(dāng)前元素。

Xamarin.Forms 的 CollectionView 真真良心。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-817500.html

到了這里,關(guān)于PLC-IoT 網(wǎng)關(guān)開(kāi)發(fā)札記(6): Xamarin.Forms 的 CollectionView 綁定了什么?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(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)文章

  • 峰回網(wǎng)關(guān)數(shù)采PLC

    峰回網(wǎng)關(guān)數(shù)采PLC

    例如:plc地址是192.168.1.56 峰回網(wǎng)關(guān)默認(rèn)網(wǎng)關(guān)地址 192.168.3.18,或者(10.10.253.354),本案例按照3.18講解。 1和1相連,0和電腦相連 本地電腦修改ip為192.168.3.3(和3.18能通訊即可),子網(wǎng)掩碼255.255.255.0,網(wǎng)關(guān)192.168.3.1 保存后會(huì)重啟 將本地地址改成30網(wǎng)段,可以和網(wǎng)關(guān)互通 1.設(shè)備信

    2024年02月05日
    瀏覽(45)
  • Xamarin體驗(yàn):使用C#開(kāi)發(fā)iOS/Android應(yīng)用

    http://www.cnblogs.com/lwme/p/use-xamarin-develop-Android-iOS-app.html Xamarin是Mono創(chuàng)始人Miguel de Icaza創(chuàng)建的公司,旨在讓開(kāi)發(fā)者可以用C#編寫(xiě)iOS, Android, Mac應(yīng)用程序,也就是跨平臺(tái)移動(dòng)開(kāi)發(fā)。 簡(jiǎn)介 Xamarin是基于Mono的平臺(tái),目前主要有以下產(chǎn)品(更具體請(qǐng)見(jiàn):http://xamarin.com/products): Xamarin Studio:

    2024年02月07日
    瀏覽(26)
  • BL120PM PLC網(wǎng)關(guān),實(shí)現(xiàn)PLC協(xié)議轉(zhuǎn)Modbus協(xié)議

    BL120PM PLC網(wǎng)關(guān),實(shí)現(xiàn)PLC協(xié)議轉(zhuǎn)Modbus協(xié)議

    隨著物聯(lián)網(wǎng)技術(shù)的迅猛發(fā)展,人們深刻認(rèn)識(shí)到在智能化生產(chǎn)和生活中,實(shí)時(shí)、可靠、安全的數(shù)據(jù)傳輸至關(guān)重要。在此背景下,高性能的物聯(lián)網(wǎng)數(shù)據(jù)傳輸解決方案——協(xié)議轉(zhuǎn)換網(wǎng)關(guān)應(yīng)運(yùn)而生,廣泛應(yīng)用于工業(yè)自動(dòng)化和數(shù)字化工廠應(yīng)用環(huán)境中。 鋇錸技術(shù)始終堅(jiān)持以用戶(hù)需求為核心

    2024年01月23日
    瀏覽(36)
  • 物聯(lián)網(wǎng)網(wǎng)關(guān)與plc怎么連接?

    物聯(lián)網(wǎng)網(wǎng)關(guān)與plc怎么連接?

    物聯(lián)網(wǎng)網(wǎng)關(guān)與plc怎么連接 ? 物聯(lián)網(wǎng)是當(dāng)今社會(huì)中最熱門(mén)的技術(shù)之一,而物聯(lián)網(wǎng)網(wǎng)關(guān)則是連接物聯(lián)網(wǎng)設(shè)備與云平臺(tái)的核心設(shè)備之一。物聯(lián)網(wǎng)網(wǎng)關(guān)在連接各種傳感器和設(shè)備時(shí)起著至關(guān)重要的作用。而另一種廣泛應(yīng)用于工業(yè)控制和自動(dòng)化領(lǐng)域的設(shè)備是可編程邏輯控制器(Programmab

    2024年01月22日
    瀏覽(27)
  • 使用IOT-Tree Server連接西門(mén)子PLC S7-300/1200/1500

    使用IOT-Tree Server連接西門(mén)子PLC S7-300/1200/1500

    IOT-Tree Server是個(gè)開(kāi)源物聯(lián)網(wǎng)軟件,可以作為組態(tài)軟件成為自動(dòng)化系統(tǒng)的上位軟件。她提供了接入、數(shù)據(jù)組織管理、控制邏輯和人機(jī)交互多個(gè)方面的功能。從版本0.99開(kāi)始,IOT-Tree Server新增了西門(mén)子以太網(wǎng)驅(qū)動(dòng),能夠通過(guò)以太網(wǎng)的方式直接訪問(wèn)S7-300/1200/1500. S7-200 smart好像也支持

    2024年02月03日
    瀏覽(38)
  • PLC網(wǎng)關(guān)BL121PO 實(shí)現(xiàn)低成本的PLC接入OPC UA的解決方案

    PLC網(wǎng)關(guān)BL121PO 實(shí)現(xiàn)低成本的PLC接入OPC UA的解決方案

    隨著工業(yè)4.0的迅猛發(fā)展,人們深刻認(rèn)識(shí)到在工業(yè)生產(chǎn)和生活中,實(shí)時(shí)、可靠、安全的數(shù)據(jù)傳輸至關(guān)重要。在此背景下,高性能的工業(yè)自動(dòng)化數(shù)據(jù)傳輸解決方案——協(xié)議轉(zhuǎn)換網(wǎng)關(guān)應(yīng)運(yùn)而生,廣泛應(yīng)用于工業(yè)自動(dòng)化和數(shù)字化工廠應(yīng)用環(huán)境中。 無(wú)縫銜接工業(yè)4.0時(shí)代 盡享數(shù)字工廠制

    2024年01月22日
    瀏覽(27)
  • PLC物聯(lián)網(wǎng)網(wǎng)關(guān)BL104實(shí)現(xiàn)PLC協(xié)議轉(zhuǎn)MQTT、OPC UA、Modbus TCP

    PLC物聯(lián)網(wǎng)網(wǎng)關(guān)BL104實(shí)現(xiàn)PLC協(xié)議轉(zhuǎn)MQTT、OPC UA、Modbus TCP

    隨著物聯(lián)網(wǎng)技術(shù)的迅猛發(fā)展,人們深刻認(rèn)識(shí)到在智能化生產(chǎn)和生活中,實(shí)時(shí)、可靠、安全的數(shù)據(jù)傳輸至關(guān)重要。在此背景下,高性能的物聯(lián)網(wǎng)數(shù)據(jù)傳輸解決方案——協(xié)議轉(zhuǎn)換網(wǎng)關(guān)應(yīng)運(yùn)而生,廣泛應(yīng)用于工業(yè)自動(dòng)化和數(shù)字化工廠應(yīng)用環(huán)境中。 無(wú)縫銜接工業(yè)4.0時(shí)代 盡享數(shù)字工廠

    2024年01月21日
    瀏覽(36)
  • EtherNet/IP轉(zhuǎn)Modbus網(wǎng)關(guān)以連接AB PLC

    EtherNet/IP轉(zhuǎn)Modbus網(wǎng)關(guān)以連接AB PLC

    本案例為西門(mén)子S7-1200?PLC通過(guò)捷米特 Modbus轉(zhuǎn)EtherNet/IP 網(wǎng)關(guān)捷米特JM-EIP-RTU連接AB PLC的配置案例。 網(wǎng)關(guān)分別從ETHERNET/IP一側(cè)和MODBUS一側(cè)讀寫(xiě)數(shù)據(jù),存入各自的緩沖區(qū),網(wǎng)關(guān)內(nèi)部將緩沖區(qū)的數(shù)據(jù)進(jìn)行交換,從而實(shí)現(xiàn)兩邊數(shù)據(jù)的傳輸。 網(wǎng)關(guān)做為MODBUS主站 打開(kāi)GW Config軟件,選擇“Mo

    2024年02月15日
    瀏覽(25)
  • PROFINET轉(zhuǎn)ETHERCAT協(xié)議網(wǎng)關(guān)三菱plc支持ethercat嗎

    PROFINET轉(zhuǎn)ETHERCAT協(xié)議網(wǎng)關(guān)三菱plc支持ethercat嗎

    捷米特JM–ECAT-PN是自主研發(fā)的一款 PROFINET 從站功能的通訊網(wǎng)關(guān)。該產(chǎn)品主要功能是將 PROFINET 網(wǎng)絡(luò)和 ETHERCAT 網(wǎng)絡(luò)連接起來(lái)。 捷米特JM-ECAT-PN連接到 PROFINET 總線中做為從站使用,連接到 ETHERCAT 總線中做為從站使用。 3.技術(shù)參數(shù) PROFINET 技術(shù)參數(shù) 網(wǎng)關(guān)做為 PROFINET 網(wǎng)絡(luò)的 Device 設(shè)備

    2024年02月14日
    瀏覽(23)
  • 上位機(jī)軟件wincc通過(guò)工業(yè)網(wǎng)關(guān)采集plc數(shù)據(jù)實(shí)現(xiàn)組態(tài)監(jiān)控

    上位機(jī)軟件wincc通過(guò)工業(yè)網(wǎng)關(guān)采集plc數(shù)據(jù)實(shí)現(xiàn)組態(tài)監(jiān)控

    WinCC是一個(gè)組態(tài)軟件,可以用于數(shù)據(jù)采集與監(jiān)控、自動(dòng)化控制、工業(yè)物聯(lián)網(wǎng)等領(lǐng)域。WinCC可以幫助用戶(hù)實(shí)現(xiàn)工廠自動(dòng)化和過(guò)程自動(dòng)化的解決方案,提供可視化的監(jiān)控界面和數(shù)據(jù)采集分析功能,支持多種協(xié)議和設(shè)備,如Siemens、Modbus、OPC等。 如何使用WinCC采集PLC數(shù)據(jù)?工業(yè)網(wǎng)關(guān)可

    2024年02月15日
    瀏覽(31)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包