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

Cara membuat klien untuk server gRPC Kontrol PLCnext di C#

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 Kontrol PLCnext. Aplikasi klien dapat berupa:

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

Informasi umum tentang server gRPC di perangkat Kontrol PLCnext tersedia di Pusat Info PLCnext.

Artikel ini menjelaskan cara membuat aplikasi klien gRPC sederhana di C#, berjalan pada perangkat Kontrol PLCnext.

Prasyarat

Prosedur di bawah ini menggunakan:

Prosedur

1. Menggunakan halaman Manajemen Berbasis Web, pastikan layanan bernama GRPC LOCAL SERVER diaktifkan.

2. Buat proyek Insinyur PLCnext 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 => Properti, setel kerangka kerja Target proyek ke “.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 mendeskripsikan 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()
		{
			// The code to connect to a Unix Domain Socket is from:
			// 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
			};

			// Create a gRPC channel to the PLCnext unix socket
			using var channel = GrpcChannel.ForAddress("http://localhost", new GrpcChannelOptions
			{
				HttpHandler = socketsHttpHandler
			});

			// Create a gRPC client for the Device Status Service on that channel
			var grpc_status_client = new IDeviceStatusService.IDeviceStatusServiceClient(channel);

			// Create a gRPC client for the Data Access Service on that channel
			var grpc_data_client = new IDataAccessService.IDataAccessServiceClient(channel);

			// Create an item to get from the Device Status Service
			// Item identifiers are listed in the 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";

			// Create a variable to get from the Data Access Service
			var data = new IDataAccessServiceReadSingleRequest();
			data.PortName = "Arp.Plc.Eclr/MainInstance1.AI1";

			// Response variables
			IDeviceStatusServiceGetItemResponse grpc_status_response;
			IDataAccessServiceReadSingleResponse grpc_data_response;

			// Endless loop
			while (true)
			{
				// Request the item from the Device Status Service
				grpc_status_response = grpc_status_client.GetItem(item);

				// Request data from the Data Access Service
				grpc_data_response = grpc_data_client.ReadSingle(data);

				// Report the results
				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);

				// Wait for 1 second
				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 solusi, dan MyApp adalah nama direktori keluaran tempat aplikasi akan dipublikasikan. Aplikasi ini juga dapat dipublikasikan dalam mode DEBUG jika diperlukan.

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

scp -r MyApp [email protected]:~

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

14. Pastikan bahwa executable memiliki hak eksekusi:

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

15. Jalankan aplikasinya:

$ /opt/plcnext/MyApp/ConsoleApp1

Outputnya harus 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, online dan ubah nilai variabel AI1. Nilai yang dilaporkan oleh aplikasi harus berubah.

Referensi dan sumber daya lainnya

1. .NET Core ❤ gRPC

2. Panggil layanan gRPC dengan klien .NET

3. Daftar sumber daya yang berguna untuk gRPC


Teknologi Industri

  1. Bagaimana Permintaan Kendaraan Listrik Akan Berdampak pada Rantai Pasokan
  2. Cara Mempersiapkan Rantai Dingin untuk Permintaan Vaksin COVID-19
  3. Bagaimana Logistik Seni Rupa Mengubah Pasar Seni untuk Kebaikan
  4. Cara Mempersiapkan Gangguan Rantai Pasokan Berikutnya
  5. Cara Menghitung Ukuran Kapasitor yang Cocok dalam -Farads &kVAR untuk Peningkatan PF
  6. Seperti apakah alat yang ideal untuk kontrol produksi itu?
  7. Intel Edison IoT:Cara Memilih Intel Edison untuk Prototipe IoT Anda
  8. Cara membuat aplikasi konsol PLCnext sederhana di C#
  9. Bagaimana Saya Mengukur Pemasangan Hidrolik yang Saya Butuhkan?
  10. Bagaimana Anda mengontrol kecepatan motor hidrolik?