BECKHOFF TwinCAT3 常见问题2
程序员文章站
2022-06-09 16:46:23
...
- 本篇文章是解决笔者在一项目中利用倍福控制器、TwinCAT3+VS2017环境下编程时遇到WSTRING变量在HIM上显示时中文字符出现乱码现象的问题。因为从零基础接触TC3,所以解决此问题碰了不少壁,直至搞清楚STRING和WSTRING的本质区别才得以解决此问题,故写此文章总结。
1. TC3中STRING与WSTRING变量
wstring的存在主要是因为满足中文字符的要求。
两者的区别:
typedef basic_string<char, char_traits<char>, allocator<char> > string;
typedef basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> > wstring;
差异就在char还是wchar_t:
#ifndef _WCHAR_T_DEFINED
typedef unsigned short wchar_t;
#define _WCHAR_T_DEFINED
#endif
所以wchar_t本质上是一个unsigned short,2个字节的大小,即16bit
窄字符,一般用于满足 ASCII 编码,一个单元一个char
宽字符,一般用于满足 UNICODE 编码,一个单元两个char
也就是说,宽字符,每表示一个字符其实是占了16bit,即2个char的大小。而汉字就是需要16bit来表示。
以上内容感谢博客链接:https://blog.csdn.net/cheetah1/article/details/79097704
2. 问题描述
例:
在TwinCAT项目中:
没有对 视图管理器 Add TargetVisualization 时,在POU中的MAIN中定义并初始化WSTRING型变量:
PROGRAM MAIN
VAR
a: WSTRING:="倍福公司!";
END_VAR
然后在VISUS中创建Visualization视图,然后添加 Rectangle 框,将变量a显示出来:
此时没有问题,运行结果如下:
但是,如果添加了 TargetVisualization ,将出现乱码问题:
3. 问题解决
对视图管理器进行设置:双击视图管理器——点击设置——勾选 使用Unicode字符串
这样问题就解决了:
后记:
本人才疏学浅,如有错误,望读者指出。