目前倍福大量的老用户还在使用Twincat2,由于需要现在转Twincat3,对于目前两者之间的差别做一个记录:
Twincat2大家都比较熟悉,先来看Twincat3的资源管理器部分
1 Twincat3的【解决方案资源管理器】
Untitled1:PLC工程名
External Type:除掉标准类型之外的特殊类型的定义,此部分位系统自动生成;
References:此部分对应Twincat2当中是对应的外部库文件;
DUTs(Data Unit Type):这里对应Twincat2当中是定义枚举,结构体等数据;
GVLs(Global variable List):这里对应Twincat2当中的全局变量,在这里定义全局变量;
POUs(Program organization unit):这里和Twincat2是一样的;
Visus:这里和Twincat2也是一致的,是上位机部分;
Untitled1 Instance:PLC工程实例,里边包含程序当中的Input和OutPut部分的变量,同时可以和硬件IO建立映射关系;
2 系统兼容问题
Twincat2只能运行在32位的系统当中,Twincat3可以运行在32和64位系统当中;
3 关于数据地址问题
Twincat2 当中的变量地址为32bit,Twincat3当中的数据地址为64bit。在Twincat2当中用ADR取数据地址可以返回一个UDINT的数据地址,在Twincat3当中如果用UDINT的数据来接受ADR取出的地址则会报错;
4 Twincat新增数据类型
LINT : 64 位有符号整数
ULINT : 64 位无符号整数
LWORD : 8 字节 WORD
LTIME:64位时间
WSTRING:Unicode 格式的字符
UNION:多种数据类型共享内存区。类似于Structure,但 UNION 里面的各元素首地址是对齐的,而Structure 里的各元素首地址是顺序排列。
注意:
TwinCAT 3 支持 32 位和 64 位操作系统。为了让 PLC 代码尽量独立于 OS, TwinCAT 提供了几个自动适应的数据类型(XINT、 UXINT、 XWORD 和 PVOID),编译器会自动检查控制器是什么操作系统,然后自动转换成相应的数据类型:
XINT:64 位系统下转成 LINT, 32 位系统下转成 DINT
UXINT: 64 位系统下转成 ULINT, 32 位系统下转成 UDINT
XWORD:64 位系统下转成 LWORD, 32 位系统下转成 DWORD
PVOID:64 位系统下转成 ULINT, 32 位系统下转成 UDINT
最典型就是指针,或者变量地址。因为很多功能块都要求提供变量地址和长度,而在 32位系统下变量地址是 4 字节,在 64 位系统下变量地址是 8 字节,所以指针变量的类型要设置为 PVOID。
5 数据对其方式
数据对其方式在Twincat3 的InfoSys当中有描述
Twincat2(ARM):4字节对齐;
Twincat2(X86):1字节对齐;
Twincat3:8字节对齐;
也就是说Twincat3的数据地址不能像Twincat2那样对齐,在升级Twincat2到Twincat3的时候要特别注意这个问题;还包括HMI通讯问题,HMI上的数据格式和TC3中的数据格式对齐方式不同。将会在进行ADS通讯过程中导致部分结构中数据错位和丢失。
先更新到这里…