109 lines
4.6 KiB
C#
109 lines
4.6 KiB
C#
![]() |
using Client104Side;
|
|||
|
using Configuration;
|
|||
|
using Microsoft.Extensions.Configuration;
|
|||
|
using Microsoft.Extensions.Hosting;
|
|||
|
using NetMQ;
|
|||
|
using NetMQ.Sockets;
|
|||
|
using Newtonsoft.Json;
|
|||
|
using Serilog;
|
|||
|
using System;
|
|||
|
using System.Runtime.InteropServices;
|
|||
|
using System.Threading;
|
|||
|
using System.Threading.Tasks;
|
|||
|
|
|||
|
|
|||
|
namespace Iec104ComService
|
|||
|
{
|
|||
|
class GetIec104MsgWorker : BackgroundService
|
|||
|
{
|
|||
|
private readonly PublisherSocket _publisherSocket;
|
|||
|
private readonly IConfigurationRoot _configurationRoot;
|
|||
|
|
|||
|
public GetIec104MsgWorker(PublisherSocket publisherSocket, IConfigurationRoot configurationRoot)
|
|||
|
{
|
|||
|
_publisherSocket = publisherSocket;
|
|||
|
_configurationRoot = configurationRoot;
|
|||
|
}
|
|||
|
public override async Task StartAsync(CancellationToken cancellationToken)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
CommDeviceConfig commDeviceConfig = new CommDeviceConfig();
|
|||
|
commDeviceConfig.Address = int.Parse(_configurationRoot.GetSection("CommDeviceConfig").GetSection("Address").Value);
|
|||
|
commDeviceConfig.ElectricalDegreeCount = 0;
|
|||
|
commDeviceConfig.ElectricalDegreeStartAddress = 0;
|
|||
|
commDeviceConfig.IP = _configurationRoot.GetSection("CommDeviceConfig").GetSection("IP").Value;
|
|||
|
commDeviceConfig.Port = int.Parse(_configurationRoot.GetSection("CommDeviceConfig").GetSection("Port").Value);
|
|||
|
commDeviceConfig.TelemeteringCount = int.Parse(_configurationRoot.GetSection("CommDeviceConfig").GetSection("TelemeteringCount").Value);
|
|||
|
commDeviceConfig.TelemeteringStartAddress = int.Parse(_configurationRoot.GetSection("CommDeviceConfig").GetSection("TelemeteringStartAddress").Value);
|
|||
|
commDeviceConfig.TelesignalisationCount = int.Parse(_configurationRoot.GetSection("CommDeviceConfig").GetSection("TelesignalisationCount").Value);
|
|||
|
commDeviceConfig.TelesignalisationStartAddress = int.Parse(_configurationRoot.GetSection("CommDeviceConfig").GetSection("TelesignalisationStartAddress").Value);
|
|||
|
ICE104CommunicationCallback.Start(commDeviceConfig);
|
|||
|
while (!ICE104CommunicationCallback.Started)
|
|||
|
{
|
|||
|
Log.Information("连接远动管理机...");
|
|||
|
await Task.Delay(30000);
|
|||
|
}
|
|||
|
Log.Information("远动管理机完成");
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
Log.Error(ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
|||
|
{
|
|||
|
|
|||
|
while (!stoppingToken.IsCancellationRequested)
|
|||
|
{
|
|||
|
if (ICE104CommunicationCallback.Started)
|
|||
|
{
|
|||
|
ExcuteYCInfo();
|
|||
|
ExcuteYXInfo();
|
|||
|
}
|
|||
|
await Task.Delay(100);
|
|||
|
}
|
|||
|
}
|
|||
|
private void ExcuteYCInfo()
|
|||
|
{
|
|||
|
int flag = 0;
|
|||
|
IntPtr ycIntPtr = ICE104EndPointController.StructToIntPtr(new YC_TYPE());
|
|||
|
int count = 0;
|
|||
|
while (flag == 0 || flag == -1)
|
|||
|
{
|
|||
|
//0:变化数据 -1:未变化数据 -2:取尽
|
|||
|
flag = ICE104EndPointController.Iec104ClnGetYCBuf(ycIntPtr);
|
|||
|
if (flag == 0)
|
|||
|
{
|
|||
|
var info = ICE104EndPointController.IntPtrToStruct<YC_TYPE>(ycIntPtr);
|
|||
|
var message = JsonConvert.SerializeObject(info);
|
|||
|
Log.Information(message);
|
|||
|
_publisherSocket.SendMoreFrame("ISAS_104_Shift_Data").SendFrame(message);
|
|||
|
}
|
|||
|
count++;
|
|||
|
}
|
|||
|
Marshal.FreeHGlobal(ycIntPtr);
|
|||
|
}
|
|||
|
private void ExcuteYXInfo()
|
|||
|
{
|
|||
|
IntPtr resYX = ICE104EndPointController.StructToIntPtr(new RECORDYXBURST());
|
|||
|
int flag = 0;
|
|||
|
int count = 0;
|
|||
|
while (flag == 0 || flag == -1)
|
|||
|
{
|
|||
|
//0:变化数据 -1:未变化数据 -2:取尽
|
|||
|
flag = ICE104EndPointController.Iec104ClnReadYXBurstRecord(resYX);
|
|||
|
if (flag == 0)
|
|||
|
{
|
|||
|
var info = ICE104EndPointController.IntPtrToStruct<RECORDYXBURST>(resYX);
|
|||
|
var message = JsonConvert.SerializeObject(info);
|
|||
|
Log.Information(message);
|
|||
|
_publisherSocket.SendMoreFrame("ISAS_104_Shift_Data").SendFrame(message);
|
|||
|
}
|
|||
|
count++;
|
|||
|
}
|
|||
|
Marshal.FreeHGlobal(resYX);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|