第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何從 TwinCat 到 C# 讀取包含結(jié)構(gòu)數(shù)組的結(jié)構(gòu)

如何從 TwinCat 到 C# 讀取包含結(jié)構(gòu)數(shù)組的結(jié)構(gòu)

C#
拉莫斯之舞 2023-07-23 14:20:52
使用 TwinCAT 3 ADS.Net 從 PLC 讀取數(shù)據(jù),我嘗試讀取包含結(jié)構(gòu)數(shù)組的結(jié)構(gòu),但 ReadAny 命令因“無(wú)法編組類(lèi)型”異常而崩潰。不過(guò),直接讀取結(jié)構(gòu)數(shù)組效果很好。public object ReadAny(long indexGroup, long indexOffset, Type type, int[] args);ReadAny方法的頭部注釋中寫(xiě)道:“如果要讀取的對(duì)象類(lèi)型是數(shù)組類(lèi)型,則必須在參數(shù)args中指定每個(gè)維度的元素?cái)?shù)量?!钡菍?duì)于包含結(jié)構(gòu)數(shù)組的結(jié)構(gòu),args 應(yīng)該是什么?(如果沒(méi)有“args”,它也會(huì)失敗。)我目前使用 .NET 4.7、VS 2013。有選擇嗎?[StructLayout(LayoutKind.Sequential, Pack = 0)]public class WholeData{    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]    public Station[] StationArray;    // Potentially more fields...[StructLayout(LayoutKind.Sequential, Pack = 0)]public class Station{    [MarshalAs(UnmanagedType.I1)]    public bool isPass;    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 81)]    public string name;    // More fields...}// -- Main --int[] args = { 5 };// Works fine:Station[] stationArray = (Station[])m_AdsClient.ReadAny(indexGroup, indexOffset, typeof(Station[]), args);// Fail:WholeData wholeData = (WholeData)m_AdsClient.ReadAny(indexGroup, indexOffset, typeof(WholeData), args);// - OR -WholeData wholeData = (WholeData)m_AdsClient.ReadAny(m_VarHandle, typeof(WholeData), args);
查看完整描述

1 回答

?
慕森卡

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊

我測(cè)試成功以下代碼:


代碼:


    class Program

    {

        public static TcAdsClient client;

        static void Main(string[] args)

        {



            // Create the ADS Client

            using (client = new TcAdsClient())

            {

                // Establish Connection

                client.Connect(new AmsAddress("10.1.2.95.1.1", 851));

                int handle = client.CreateVariableHandle("PRG_AIS.stAds");


                AdsClass ads = (AdsClass)client.ReadAny(handle, typeof(AdsClass));

                ads.boolArr[0] = 1;

                client.WriteAny(handle, ads);

                Console.ReadLine();


            }

        }

    }


    [StructLayout(LayoutKind.Sequential, Pack = 1)]

    class AdsClass

    {


        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]

        public byte[] boolArr = new byte[10];

    }

ST代碼:


TYPE AdsStruct :

STRUCT

    bTestArray : ARRAY[0..9] OF BOOL;

END_STRUCT

END_TYPE

AdsStruct 在 PRG_AIS 中定義為 stAds。


或者,如果您有一個(gè)結(jié)構(gòu)數(shù)組,請(qǐng)按以下方式修改代碼:


代碼:


[StructLayout(LayoutKind.Sequential, Pack = 1)]

class AdsClass

{


    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]

    public InnerStruct[] strArr = new InnerStruct[10];

}


struct InnerStruct

{

    public byte bBoolTest;

    public int nIntTest;

}

ST代碼:


TYPE AdsStruct  :

STRUCT

    stTestArray : ARRAY[0..9] OF InnerStruct;

END_STRUCT

END_TYPE


TYPE InnerStruct :

STRUCT

    bBoolTest : BOOL;

    nIntTest  : DINT;

END_STRUCT

END_TYPE


查看完整回答
反對(duì) 回復(fù) 2023-07-23
  • 1 回答
  • 0 關(guān)注
  • 263 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)