背景描述
PLC:S71500,CPU 1515-2 PN,固件版本2.5
客户机环境:win7 Service pack1,Visual Studio 2013
按照文档
《使用 .NET 和帮助类别创建 OPC UA 客户端》,
顺利完成OPCUA服务器配置,使用压缩文件109737901_OPC_UA_Client_S7-1500_CODE_V13中的OPCUA客户端可以与OPCUA服务器通信,PLCDB块中建立一个WString类型的变量,则在客户端可以取得对应nodeID后,可以正常读写中文。
问题描述:
在结构体myStr中定义一个WString类型的变量,如果PLC程序中将该变量赋值为中文,在客户端Read/Write Struct/UDT界面中,可以将该结构体的内容读取出来,包含中文也能正常读取,但无法将包含有中文字符串的结构体正常写入PLC。
查看UAClientHelperAPI.cs文件中的WriteStructUdt方法时,发现是在将结构体中的内容转换为字节数组,处理到中文字符时,无法将中文字符放入一个无符号的八位字节中,故报错,
出错处的代码为
foreach (Char c in val[1])
{
bytesToWrite[convertIndex] = Convert.ToByte(c);
convertIndex += 1;
}
即val[1]中包含中文字符串时,变量c可能会为一个中文字符时,此时无法调用Convert.ToByte(c)方法转换为字节数组。
请各位专家给出解决在OPCUA客户端无法正常写入包含中文字符结构体问题的方案。