Closed subbi12 closed 7 years ago
Hello, subbi12!
for winform applications you needs to change default appartment from STA to MTA, it`s necessary for correct call function CoInitializeSecurity: https://github.com/titanium-as/TitaniumAS.Opc.Client#basic-usage you should change appartment from STA to MTA in project settings or change attribute [STAThread] to [MTAThread] on entry point func
try execute this code: public class OpcTest { private const string ServerUri = "Matrikon.OPC.Simulation.1"; //ProgId for matrikon simulation server private const string SubscribeItemId = "Random.Int4"; //itemId for subscribed opc item private const string GroupName = "TestGroup"; //group name for make subscription private const int UpdateRateInMilliseconds = 1000; //subscription update rate for group
private static void Main(string[] args) { var groupState = new OpcDaGroupState { Culture = CultureInfo.CurrentCulture, //set LCID for group - some OPC servers may be sensitive for this IsActive = true, //only active group can be subscribed PercentDeadband = 0.0f, //percent deadband TimeBias = TimeSpan.Zero, UpdateRate = TimeSpan.FromMilliseconds(UpdateRateInMilliseconds), UserData = "some userdata" //user data }; var itemDefinitions = new[] { new OpcDaItemDefinition { IsActive = true, //only active item can be subscribed ItemId = SubscribeItemId //itemid for opc server item } };
Uri url = UrlBuilder.Build(ServerUri); //build url
using (var server = new OpcDaServer(url))
{
// Connect to the server first.
server.Connect();
OpcDaGroup @group = server.AddGroup(GroupName, groupState); //add group on OPC server
OpcDaItemResult[] results = @group.AddItems(itemDefinitions); //add items on OPC server
foreach (OpcDaItemResult result in results) //print errors
{
if (result.Error.Failed)
{
Console.WriteLine("Error on create item: '{0}'", result.Error);
}
}
// Read all items of the group synchronously.
OpcDaItemValue[] values = group.Read(group.Items, OpcDaDataSource.Device);
foreach (OpcDaItemValue value in values)
{
Console.WriteLine("[Sync Read] ItemId: {0}; Value: {1}; Quality: {2}; Timestamp: {3}",
value.Item.ItemId,
value.Value, value.Quality, value.Timestamp);
}
// Read all items of the group asynchronously.
Task<OpcDaItemValue[]> task = group.ReadAsync(group.Items);
task.ContinueWith(result =>
{
OpcDaItemValue[] itemValues = result.Result;
foreach (OpcDaItemValue value in itemValues)
{
Console.WriteLine("[Async Read] ItemId: {0}; Value: {1}; Quality: {2}; Timestamp: {3}",
value.Item.ItemId,
value.Value, value.Quality, value.Timestamp);
}
});
group.ValuesChanged += GroupOnValuesChanged; //subscribe on event
Console.WriteLine("Press enter to terminate...");
Console.ReadLine();
group.ValuesChanged -= GroupOnValuesChanged;
server.Disconnect();
}
}
private static void GroupOnValuesChanged(object sender, OpcDaItemValuesChangedEventArgs args) { // Output values. foreach (OpcDaItemValue value in args.Values) { Console.WriteLine("[Subscribe] ItemId: {0}; Value: {1}; Quality: {2}; Timestamp: {3}", value.Item.ItemId, value.Value, value.Quality, value.Timestamp); } }
}
While connecting remote OPC DA server using TitaniumAs Opc client, getting "CoCreateInstanceEx: Access is denied". How to handle this issue?
While using this code when trying to connect to remote OPC server through an OPC Client we get the following error:
11/26/2016 4:44:03 AM :Error MessageCoCreateInstanceEx: Server execution failed StackTrace : at TitaniumAS.Opc.Client.Interop.System.Com.CreateInstance(Guid clsid, String host, NetworkCredential credential) at TitaniumAS.Opc.Client.Common.OpcServerEnumeratorAuto.CLSIDFromProgId(String progId, String host) at TitaniumAS.Opc.Client.Da.OpcDaServer.<>cDisplayClass7.b 4(String host, String progId)
at TitaniumAS.Opc.Client.Common.UrlParser.Parse[T](Uri opcServerUrl, Func
3 withProgId, Func
3 withCLSID) at TitaniumAS.Opc.Client.Da.OpcDaServer.Connect() at OPC_Client.Form1.ReadValuesSynchronously() in e:\OPC_Client\Form1.cs:line 46Can someone help us in overcoming this error