Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Teknologi Industri

Buat Klien C# untuk Server gRPC PLCnext Control: Panduan Langkah demi Langkah

Versi firmware 2022.0 LTS memperkenalkan server gRPC pada perangkat AXC F 1152 dan AXC F 2152. Server gRPC ini menyediakan cara bagi aplikasi klien untuk mengakses layanan RSC pada perangkat PLCnext Control. Aplikasi klien dapat:

(* akses jarak jauh akan tersedia mulai versi firmware 2022.3)

Informasi umum tentang server gRPC di perangkat PLCnext Control tersedia di PLCnext Info Center.

Artikel ini menjelaskan cara membuat aplikasi klien gRPC sederhana dalam C#, yang berjalan pada perangkat PLCnext Control.

Prasyarat

Prosedur di bawah ini menggunakan:

Prosedur

1. Menggunakan halaman Web-based Management, pastikan layanan bernama GRPC LOCAL SERVER diaktifkan.

2. Buat proyek PLCnext Engineer baru untuk perangkat target Anda. Proyek ini harus memiliki:

3. Kirim proyek PLCnext Engineer ke perangkat target.

4. Di Visual Studio, buat aplikasi konsol C# kosong dengan mengikuti Langkah 1-3 dari prosedur yang dijelaskan dalam posting blog Makers sebelumnya.

5. Di jendela Project => Property, atur Target framework proyek menjadi “.NET 5.0”.

6. Di Solution Explorer, klik kanan pada Solution, pilih “Manage NuGet Packages for Solution…”, dan instal paket NuGet berikut:

7. Salin folder protobuf yang berisi file definisi protobuf ke folder sumber proyek. Protobuf adalah Interface Definition Language (IDL) yang digunakan untuk menggambarkan layanan gRPC.

8. Dalam file konfigurasi proyek, tambahkan referensi ke file .proto untuk layanan yang akan digunakan dalam proyek. Bagian ItemGroup dari konfigurasi proyek sekarang akan terlihat seperti ini:

9. Ganti isi file .cs proyek dengan kode ini (Anda mungkin perlu mengubah nama namespace):

using System; using System.Net; using System.Net.Http; using System.Net.Sockets; using System.Threading; using System.Threading.Tasks; using System.IO; using Grpc.Net.Client; using Arp.Device.Interface.Services.Grpc; using Arp.Plc.Gds.Services.Grpc; namespace ConsoleApp1 { class Program { static void Main() { // Kode untuk terhubung ke Unix Domain Socket berasal dari: // https://docs.microsoft.com/en-us/aspnet/core/grpc/interprocess?view=aspnetcore-6.0 var udsEndPoint = new UnixDomainSocketEndPoint("/run/plcnext/grpc.sock"); var connectionFactory = new UnixDomainSocketConnectionFactory(udsEndPoint); var socketsHttpHandler = new SocketsHttpHandler { ConnectCallback = connectionFactory.ConnectAsync }; // Buat channel gRPC ke unix socket PLCnext using var channel = GrpcChannel.ForAddress("https://localhost", new GrpcChannelOptions { HttpHandler = socketsHttpHandler }); // Buat klien gRPC untuk Device Status Service pada channel tersebut var grpc_status_client = new IDeviceStatusService.IDeviceStatusServiceClient(channel); // Buat klien gRPC untuk Data Access Service pada channel tersebut var grpc_data_client = new IDataAccessService.IDataAccessServiceClient(channel); // Buat item untuk diambil dari Device Status Service // Identifikasi item tercantum di PLCnext Info Center: // https://www.plcnext.help/te/Service_Components/Remote_Service_Calls_RSC/RSC_device_interface_services.htm#IDeviceStatusService var item = new IDeviceStatusServiceGetItemRequest(); item.Identifier = "Status.Board.Temperature.Centigrade"; // Buat variabel untuk diambil dari Data Access Service var data = new IDataAccessServiceReadSingleRequest(); data.PortName = "Arp.Plc.Eclr/MainInstance1.AI1"; // Variabel respons IDeviceStatusServiceGetItemResponse grpc_status_response; IDataAccessServiceReadSingleResponse grpc_data_response; // Loop tanpa akhir while (true) { // Minta item dari Device Status Service grpc_status_response = grpc_status_client.GetItem(item); // Minta data dari Data Access Service grpc_data_response = grpc_data_client.ReadSingle(data); // Laporkan hasil var temperature = grpc_status_response.ReturnValue.Int8Value; var ai1 = grpc_data_response.ReturnValue.Value.Int16Value; Console.WriteLine("Board Temperature = " + temperature + "°C"); Console.WriteLine("MainInstance1.AI1 = " + ai1); // Tunggu 1 detik Thread.Sleep(1000); } } } public class UnixDomainSocketConnectionFactory { private readonly EndPoint _endPoint; public UnixDomainSocketConnectionFactory(EndPoint endPoint) { _endPoint = endPoint; } public async ValueTask<Stream> ConnectAsync(SocketsHttpConnectionContext _, CancellationToken cancellationToken = default) { var socket = new Socket(AddressFamily.Unix, SocketType.Stream, ProtocolType.Unspecified); try { await socket.ConnectAsync(_endPoint, cancellationToken).ConfigureAwait(false); return new NetworkStream(socket, true); } catch { socket.Dispose(); throw; } } } } 

10. Di Solution Explorer, klik kanan pada Solution dan buka Terminal.

11. Di terminal, jalankan perintah berikut:

dotnet build ConsoleApp1.csproj dotnet publish -c RELEASE -r linux-arm .\ConsoleApp1.csproj -o MyApp

… di mana ConsoleApp1 adalah nama solution, dan MyApp adalah nama direktori output tempat aplikasi akan dipublikasikan. Aplikasi juga dapat dipublikasikan dalam mode DEBUG jika diperlukan.

12. Salin direktori output dan semua isinya ke PLC menggunakan (misalnya) scp atau WinSCP.

scp -r MyApp admin@192.168.1.10:~

13. Buka sesi shell pada PLC menggunakan (misalnya) ssh atau PuTTY.

14. Pastikan file eksekutable memiliki izin eksekusi:

$ chmod a+x /opt/plcnext/MyApp/ConsoleApp1

15. Jalankan aplikasi:

$ /opt/plcnext/MyApp/ConsoleApp1

Outputnya seharusnya mirip dengan:

Board Temperature = 50°C MainInstance1.AI1 = 0 Board Temperature = 50°C MainInstance1.AI1 = 0 Board Temperature = 50°C MainInstance1.AI1 = 0 Board Temperature = 50°C MainInstance1.AI1 = 0

16. Di PLCnext Engineer, buka online dan ubah nilai variabel AI1. Nilai yang dilaporkan oleh aplikasi harus berubah.

Referensi dan Sumber Daya Lainnya

1. .NET Core ❤ gRPC

2. Call gRPC services with the .NET client

3. A curated list of useful resources for gRPC

Teknologi Industri

  1. Kaburnya Mobil Bensin: Bagaimana Permintaan Kendaraan Listrik Mengubah Rantai Pasok Global
  2. Mengoptimalkan Logistik Rantai Dingin untuk Distribusi Vaksin COVID-19
  3. Logistik Seni Rupawan: Merevolusi Pasar Seni Global
  4. Strategi Proaktif untuk Menavigasi Gangguan Rantai Pasok Mendatang
  5. Panduan Akurat Menghitung Ukuran Bank Kapasitor (µF & kVAR) untuk Peningkatan Faktor Daya
  6. Menentukan Alat Kontrol Produksi Ideal: Fitur Kunci & Praktik Terbaik
  7. Intel Edison IoT: Memilih Mini-Komputer yang Tepat untuk Prototaip Anda
  8. Mengembangkan Aplikasi Konsol PLCnext Menggunakan C#: Panduan untuk Pemula
  9. Pengukuran Pasokan Hidrolik yang Akurat: Panduan Langkah demi Langkah
  10. Mengontrol Kecepatan Motor Hidrolik dengan PWM & Kontrol Jarak Jauh: Panduan Praktis