我在用c#于组态王opcserver通讯是碰到一个问题:
我在c#程序中设置组态变量,如果这个变量时布尔型的能成功,但这个变量时float的怎么也写不成功,每次写入后该变量就会变成0了;写入函数的返回值也是0,是表示成功写入的;
我在c#中的写入代码是:
-------------首先我与组态王OPC通讯是基于组态王的客户端组件:kingvewcliend.dll,这个我是在组态王安装目录下找到的
----------- 相关的方法我也是在网上找的http://blog.csdn.net/xwnxwn/article/details/45008117
[DllImport("kingvewcliend.dll")]
public static extern int StartCliend(string node);
[DllImport("kingvewcliend.dll")]
public static extern int ReadItemNo();
[DllImport("kingvewcliend.dll")]
//[SecurityPermission(SecurityAction.Assert, Unrestricted = true)]
public static extern int GetItemNames(StringBuilder sName, int wItemId);
[DllImport("kingvewcliend.dll")]
public static extern int AddTag(string sRegName, ref int TagId, ref int TagDataType);
[DllImport("kingvewcliend.dll")]
public static extern int WriteTag(ushort TagId, bool bVal, long lVal, float fVal, StringBuilder sVal);
[DllImport("kingvewcliend.dll")]
public static extern int ReadTag(int TagId, ref bool bVal, ref long lVal, ref Single fVal, StringBuilder sVal);
[DllImport("kingvewcliend.dll")]
public static extern int StopCliend();
---------------下面的是我写入的代码
float f=100F;//要向段长设定这个字段写入100这个值
MyStartCliend("127.0.0.1");
int iTagID = 0;
int iTagType = 0;
int iRet;
try
{
iRet = AddTag("段长设定.Value", ref iTagID, ref iTagType);
bool blV = true;
long lV = (long)f;//这个是我测试一下的,我怕是要写入长整型,最初是设置为0的,也是一样结果
StringBuilder sb = new StringBuilder(0);
iRet = WriteTag((ushort)iTagID, blV, lV, f, sb);
AddMsg(string.Format("字段类型:{0},写入{1}返回值为{2}", iTagType, f, iRet));// 用于返回写入结果
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
--------------------结束
以上代码中“段长设定”是我在组态王中定义的一个变量