我需要编写一个简单的c#app,它通过OPC与Siemens S7通信。它只需要查询单个输入并设置单个输出。
我需要做什么?我是否需要OPCFoundation中的Xi这样的东西?
答案 0 :(得分:3)
作为一种更通用的OPC解决方案,值得查看http://www.codeproject.com/KB/COM/opcdotnet.aspx - 它是一个带有源代码的免费OPC DLL。虽然它非常基础,但是代码就在那里,所以你可以根据需要轻松更新代码,但是根据你的要求,它可能是理想的。
答案 1 :(得分:3)
您可能会查看www.quickopc.com,它可以在.NET和OPC服务器之间提供完美的包装。您也可以通过www.opcfoundation.com获取OPC服务器的大量信息。
如果不使用QuickOPC之类的库,则必须处理创建自己的类以将二进制数据转换为可读的.NET代码(必须是一个任务本身)。这是完全可行的,主要的缺点是每个设备/制造商都有自己的协议,这意味着每个独特的设备最终都会有一个包装器。
答案 2 :(得分:3)
听起来您可能已经拥有西门子S7的OPC服务器。 Kepware,Simatic Net和许多其他公司都支持OPC UA。
您可以使用以下免费工具在C#中构建一个简单的HMI应用程序:
适用于Windows桌面的Microsoft Visual Studio Express 2013可从以下网址获取:http://www.microsoft.com/visualstudio/eng/products/visual-studio-express-for-windows-desktop。
本网站的最新消息来源: http://web.archive.org/web/20140219181837/http://opcuaservicesforwpf.codeplex.com/
使用此套件,您可以: 直接从Visual Studio IDE浏览OPC UA服务器。拖放变量节点以创建数据订阅。使用绑定从订阅的数据值中为UI控件的属性设置动画。
查看示例应用程序'Workstation'。
答案 3 :(得分:2)
西门子网站上有一些文档和源代码示例,对您有用。看看他们:
答案 4 :(得分:1)
另一种可能性是使用西门子SAPI-S7接口(这是西门子原生协议,也是OPC使用的)。 SoftwareOption GmbH具有带有C#样本的S7 .NET编程接口。 您可以下载包含源代码的C#演示程序。 请参阅http://www.softwareoption.de/siemens-produkte_e.htm。
答案 5 :(得分:1)
我现在正在经历这个过程,我发现他非常有用:http://www.opcti.com/Download-OPC-Xi-source-code.aspx
答案 6 :(得分:1)
使用任何中间dll,如opcdaauto.dll,clientAce,MXIO.NET。
使用C#开始编码.C#提供与OPC服务器通信的灵活性。
西门子使用C#的示例: 在App.config中:
Tag1 value="SERVER:\DiagnosticsSummary\CumulatedSubscriptionCount"
Tag2 value="SERVER:\Capabilities\MinSupportedUpdateRate"
ServerId value="opcda://localhost/OPC.SimaticNET.1/{B6EACB30-42D5-11D0-9517-0020AFAA4B3C}"/>
- 享受编码 - 请参阅:http://www.revanayya.blogspot.com
答案 7 :(得分:0)
#region Variable Declaration
public static Kepware.ClientAce.OpcDaClient.DaServerMgt ObjDaServerMgt = new Kepware.ClientAce.OpcDaClient.DaServerMgt();
public static Kepware.ClientAce.OpcDaClient.ConnectInfo ObjConnectInfo = new Kepware.ClientAce.OpcDaClient.ConnectInfo();
public static Kepware.ClientAce.OpcDaClient.ReturnCode ObjReturnCode = new Kepware.ClientAce.OpcDaClient.ReturnCode();
public static Kepware.ClientAce.OpcDaClient.ItemIdentifier[] ObjItemIdentifiers = new Kepware.ClientAce.OpcDaClient.ItemIdentifier[2];
#endregion
public void Connect()
{
string OPC_url_Simatic = ConfigurationManager.AppSettings["ServerId"].ToString();
ObjConnectInfo.LocalId = "en";
ObjConnectInfo.KeepAliveTime = 5000;
ObjConnectInfo.RetryAfterConnectionError = true;
ObjConnectInfo.RetryInitialConnection = true;
bool connectFailed = false;
///define a client handle
int clientHandle = 1;
//Try to connect with the API connect method:
try
{
ObjDaServerMgt.Connect(OPC_url_Simatic, clientHandle, ref ObjConnectInfo, out connectFailed);
}
catch (Exception ex)
{
// MessageBox.Show("Handled Connect exception. Reason: " + ex.Message);.
log.Error(ex.ToString());
// Make sure following code knows connection failed:
connectFailed = true;
}
// Handle result:
if (connectFailed)
{
// Tell user connection attempt failed:
//MessageBox.Show("Connect failed");
log.Error("Connection Failed");
}
}
注册一些事件处理程序并完成工作。