Отправить массив из C# в TwinCat 3 через ADS.Net

Я хочу создать автоматизированный графический фонтан, используя TwinCat 3 для управления клапанами и Visual Studio C# для обработки изображения, которое нужно показать на фонтане.

Окончательная форма программы обработки изображений - это двоичный массив изображений (прилагается): Результат обработки изображений 1; Результат обработки изображения 2;

Я хочу использовать окончательную форму обработки изображений для управления клапаном на машине (клапан включится, когда будет 1, и клапан отключится, когда будет 0). Я очень новичок в TwinCat 3, особенно с ADS Библиотека.

Образец из infosys beckhoff не очень полезен для меня, кто-то может мне помочь с этим?

Благодарю вас

2 ответа

Решение

Я создал пример консольной программы, которая подключается к локальному ПЛК через порт 851 и записывает массив из 100 bools с именем "boolArray" в MAIN TC3 (TwinCAT 3):

using System;
using TwinCAT.Ads;
using System.Threading;

namespace WriteArrayToPLC
{

    class Program
    {
        static void Main(string[] args)
        {
            TcAdsClient adsClient = new TcAdsClient();
            byte[] boolArray = new byte[100];
            // Fill array with 010101010...
            for (int i = 0; i < 100; i++)
            {
                boolArray[i] = (i % 2 != 0) ? (byte)1 : (byte)0;
            }
            // Connect to PLC
            try
            {

                if (adsClient != null)
                {
                    Console.WriteLine("Connecting to PC");
                    adsClient.Connect(851);
                }
            }
            catch (Exception err)
            {
                Console.WriteLine(err.Message);
                adsClient = null;
            }

            if (adsClient != null)
            {
                try
                {
                    // Get the handle for the array
                    int handle_array = adsClient.CreateVariableHandle("MAIN.boolArray");
                    // Write the array to PLC
                    Console.WriteLine("Writing the array at handle: " + handle_array.ToString());
                    adsClient.WriteAny(handle_array, boolArray);
                }
                catch (Exception err)
                {
                    Console.WriteLine(err.Message);
                }
                // The end
                Console.WriteLine("Done");
                Thread.Sleep(3000);
            }
        }
    }
}

Этот код хорошо представляет запись массива в TC3.

Я использовал System.Runtime.InteropServices.MarshalAs с TwinCAT 3.1.4022.0

Объявление массива:

[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
public byte[] data;

И тогда я могу отправить его через

TcAdsClient.WriteAny( ixGroup, ixOffset, data )
Другие вопросы по тегам