Notes on the documentation

This description is only intended for the use of trained specialists in control and automation engineering who are familiar with the applicable national standards.
It is essential that the following notes and explanations are followed when installing and commissioning these components.

The responsible staff must ensure that the application or use of the products described satisfy all the requirements for safety, including all the relevant laws, regulations, guidelines and standards.

Disclaimer

The documentation has been prepared with care. The products described are, however, constantly under development.
For that reason the documentation is not in every case checked for consistency with performance data, standards or other characteristics.
In the event that it contains technical or editorial errors, we retain the right to make alterations at any time and without warning.
No claims for the modification of products that have already been supplied may be made on the basis of the data, diagrams and descriptions in this documentation.

Trademarks

Beckhoff®, TwinCAT®, EtherCAT®, Safety over EtherCAT®, TwinSAFE® and XFC® are registered trademarks of and licensed by Beckhoff Automation GmbH.
Other designations used in this publication may be trademarks whose use by third parties for their own purposes could violate the rights of the owners.

Patent Pending

The TwinCAT Technology is covered, including but not limited to the following patent applications and patents:
EP0851348, US6167425 with corresponding applications or registrations in various other countries.

Copyright

© Beckhoff Automation GmbH.
The reproduction, distribution and utilization of this document as well as the communication of its contents to others without express authorization are prohibited.
Offenders will be held liable for the payment of damages. All rights reserved in the event of the grant of a patent, utility model or design.


ComBuffer

数据结构ComBuffer是一种数据缓冲区用来分离硬件支持通讯块和硬件非支持通讯块（见通讯原理）。同时也分离快速通讯任务和基本任务。ComBuffer型数据缓冲区不 能直接由用户读写，它只是通讯模块之间的中间储存器。

TYPE ComBuffer
STRUCT
    Buffer: ARRAY[0..300] OF BYTE;
    RdIdx: INT;
    WrIdx: INT;
    Count: INT; (* Number of characters in the ring buffer *)
    FreeByte:INT; (* Number of free spaces in the ring buffer *)
    Error: INT; (* Interface error code *)
    blocked : BOOL;
END_STRUCT
END_TYPE


Data structures for the COM serial PC interfaces

TwinCAT PLC Serial Communication Library - Data Structures

PC机COM接口数据结构

每个串行PC接口的数据交换需要一种可变的PcComInData类型和一种PcComOutData类型数据。这些变量被放在内存印射地址的一个固定的地址，通过TwinCAT System Manager和硬件连接。

PcComInData

TYPE PcComInData
STRUCT
    SerStatus: WORD;
    D: ARRAY[0..63] OF BYTE;
END_STRUCT
END_TYPE

PcComOutData

TYPE PcComOutData
STRUCT
    SerCtrl: WORD;
    D: ARRAY[0..63] OF BYTE;
END_STRUCT
END_TYPE


Data structures for the KL6xxx serial bus terminal in 3-byte mode

TwinCAT PLC Serial Communication Library - Data Structures

总线端子模块 KL6xxx in 3-byte mode的数据结构

使用I/0总线进行数据交换，每个串行总线端子模块之间的数据交换需要KL6inData和KL6outData变量。这些变量被放在内存印射地址的一个固定的地址，通过TwinCAT System Manager和硬件连接。

KL6inData

TYPE KL6inData
STRUCT
    Status: BYTE;
    SerStatus: BYTE;
    D: ARRAY[0..2] OF BYTE;
END_STRUCT
END_TYPE

KL6outData

TYPE KL6outData
STRUCT
    Ctrl: BYTE;
    SerCtrl: BYTE;
    D: ARRAY[0..2] OF BYTE;
END_STRUCT
END_TYPE


Data structures for the KL6xxx serial bus terminal in 5-byte mode

TwinCAT PLC Serial Communication Library - Data Structures

总线端子模块KL6xxx in 5-byte mode的数据结构

使用I/0总线进行数据交换，每个串行总线端子模块之间的数据交换需要KL6inData5B和KL6outData5B变量。这些变量被放在内存印射地址的一个固定的地址，通过TwinCAT System Manager和硬件连接。

KL6inData5B

TYPE KL6inData5B
STRUCT
    Status: BYTE;
    D: ARRAY[0..4] OF BYTE;
END_STRUCT
END_TYPE

KL6outData5B

TYPE KL6outData5B
STRUCT
    Ctrl: BYTE;
    D: ARRAY[0..4] OF BYTE;
END_STRUCT
END_TYPE


Data structures for the KL6xxx serial bus terminal in 22-byte mode

TwinCAT PLC Serial Communication Library - Datenstrukturen

总线端子模块KL6xxx in 22-byte mode的数据结构

使用I/0总线进行数据交换，每个总线端子模块之间的数据交换需要KL6inData22B和KL6outData22B变量。这些变量被放在内存印射地址的一个固定的地址，通过TwinCAT System Manager和硬件连接。

TYPE KL6inData22B
STRUCT
    Status	: WORD;
    D	: ARRAY[0..21] OF BYTE;
END_STRUCT
END_TYPE

KL6outData22B

TYPE KL6outData22B
STRUCT
    Ctrl	: WORD;
    D	: ARRAY[0..21] OF BYTE;
END_STRUCT
END_TYPE


Data structures for the KL6xxx serial bus terminal in 22-byte mode

TwinCAT PLC Serial Communication Library - Datenstrukturen

EtherCAT端子模块EL60xx in 22-byte mode的数据结构

使用I/0总线进行数据交换，每个串行总线端子模块之间的数据交换需要 EL6inData22B和EL6outData22B变量。这些变量被放在内存印射地址的一个固定的地址，通过TwinCAT System Manager和硬件连接。

EL6inData22B

TYPE EL6inData22B
STRUCT
    Status	: WORD;
    D	: ARRAY[0..21] OF BYTE;
END_STRUCT
END_TYPE

EL6outData22B

TYPE EL6outData22B
STRUCT
    Ctrl	: WORD;
    D	: ARRAY[0..21] OF BYTE;
END_STRUCT
END_TYPE


Enumeration types

TwinCAT PLC Serial Communication Library - Data Structures

通讯库的Enumarated类型

ComSerialLineMode_t

TYPE ComSerialLineMode_t :
(
    SERIALLINEMODE_DEFAULT,
    SERIALLINEMODE_KL6_3B_ALTERNATIVE,
    SERIALLINEMODE_KL6_5B_STANDARD,
    SERIALLINEMODE_KL6_22B_STANDARD,
     SERIALLINEMODE_PC_COM_PORT,
     SERIALLINEMODE_EL6_22B,
     SERIALLINEMODE_IE6_11B
);
END_TYPE

ComParity_t

TYPE ComParity_t :
(
    PARITY_NONE,
    PARITY_EVEN,
    PARITY_ODD
);
END_TYPE

ComHandshake_t

TYPE ComHandshake_t :
(
    HANDSHAKE_NONE,
    HANDSHAKE_RTSCTS,
    HANDSHAKE_XONXOFF,
    RS485_FULLDUPLEX,
    RS485_HALFDUPLEX,
    RS485_FULLDUPLEX_XONXOFF,
    RS485_HALFDUPLEX_XONXOFF
);
END_TYPE


Data structures RegisterList

TwinCAT PLC Serial Communication Library - Data Structures

RegisterList数据结构

ComRegisterList_t 数据类型被定义为串行总线端子模块的读写寄存器。每个 register list 都有寄存器编号和寄存器的内容。

ComRegisterList_t

TYPE ComRegisterList_t : ARRAY[0..63] OF ComRegisterData_t;
END_TYPE

ComRegisterData_t

TYPE ComRegisterData_t :
STRUCT
    Register : BYTE;
    Value : WORD;
END_STRUCT
END_TYPE


Error Codes

TwinCAT PLC Serial Communication Library - Error Codes

错误代码

ComError_t

TYPE ComError_t :
(
    COMERROR_NOERROR 		:= 0,
    COMERROR_PARAMETERCHANGED 	:= 1, 	(* input parameters changed during reception *)
    COMERROR_TXBUFFOVERRUN 	:= 2, 	(* string > transmit buffer *)
    COMERROR_STRINGOVERRUN 	:= 10, 	(* end of string *)
    COMERROR_ZEROCHARINVALID 	:= 11, 	(* string cannot receive zero characters *)
    COMERROR_INVALIDPOINTER 	:= 20, 	(* invalid data pointer, e. g. zero *)
    COMERROR_INVALIDRXPOINTER 	:= 21, 	(* invalid data pointer for ReceiveData *)
    COMERROR_INVALIDRXLENGTH 	:= 22, 	(* invalid length for ReceiveData, e. g. zero *)
    COMERROR_DATASIZEOVERRUN 	:= 23, 	(* end of data block *)
    COMERROR_MODENOTSUPPORTED 	:= 16#101, (* mode not supported (3-Byte Terminals connectd to bus controllers) *)
    COMERROR_INVALIDBAUDRATE 	:= 16#1001,
    COMERROR_INVALIDNUMDATABITS	:= 16#1002,
    COMERROR_INVALIDNUMSTOPBITS	:= 16#1003,
    COMERROR_INVALIDPARITY 	:= 16#1004,
    COMERROR_INVALIDHANDSHAKE 	:= 16#1005,
    COMERROR_INVALIDNUMREGISTERS:= 16#1006,
    COMERROR_INVALIDREGISTER 	:= 16#1007,
    COMERROR_TIMEOUT 		:= 16#1008
);
END_TYPE


ReceiveByte

接口

VAR_OUTPUT
    ByteReceived: BOOL;
    ReceivedByte: BYTE;
    Error: ComError_t;
END_VAR
VAR_IN_OUT
    RxBuffer : ComBuffer;
END_VAR

说明

ReceiveByte功能块获得相应的输入变量RxBuffer中的一个字符。如果ByteReceived=TRUE，调用之后，收到的数据类型发送到输出变量ReceivedByte。否则，则接收不到数据。

注意

当ReceiveByte功能块在PLC任务中运行比在硬件中的通讯要慢很多，必须切记多个字符可以在 同一个PLC周期中使用。因此这些接收到的字符会在同一个循环中被读出。

REPEAT
    Receive(RXbuffer:=RXbuffer);
    IF Receive.ByteReceived THEN
        (* evaluate character*)
    END_IF
UNTIL NOT Receive.ByteReceived
END_REPEAT

经历的循环次数必然受限于接收数据缓冲区的大小（目前300字节），这是一个无线循环，不用担心。


SendByte

接口

VAR_INPUT
    SendByte: BYTE;
END_VAR
VAR_OUTPUT
    Busy : BOOL;
    Error: ComError_t;
END_VAR
VAR_IN_OUT
    TxBuffer: ComBuffer;
END_VAR

说明

SendByte发送单个字符到相应输入变量TxBuffer。只要Busy=TRUE，就表示发送正在进行。当Busy=FALSE以及Error=0时，这些已经数据被成功发送。

注意

只要发送数据缓冲区仍然可以接收数据，那么在同一个PLC周期中可以有多个字节同时被发送。缓冲字符再通过快速通信任务发送到硬件是值得的。


SendString

接口

VAR_INPUT
    SendString: STRING;
END_VAR
VAR_OUTPUT
    Busy : BOOL;
    Error: ComError_t;
END_VAR
VAR_IN_OUT
    TXbuffer: ComBuffer;
END_VAR

说明

SendString 发送一个字符串到与输入变量 TxBuffer相对应的接口。只要Busy=TRUE，就表示发送正在进行。当这些数据被成功发送后Busy=FALSE以及Error=0。

注意

字符串ReceivedString基本长度为80个字符，它对于一些应用来说可能比较短。在这种情况下，库ComLib255.lib可以用来代替ComLib.lib. 唯一的区别就是ReceivedString变成了255个字符长度。


SendData

接口

VAR_INPUT
    pSendData : POINTER TO BYTE;
    Length : UDINT;
END_VAR
VAR_OUTPUT
    Busy : BOOL;
    Error: ComError_t;
END_VAR
VAR_IN_OUT
    TXbuffer: ComBuffer;
END_VAR

说明

SendData 发送一个字符串到与输入变量 TxBuffer相对应的接口。只要Busy=TRUE，就表示发送正在进行。当这些数据被成功发送后Busy=FALSE以及Error=0。

pSendData

pSendData是用ADR来寻找的发送数据的地址。

数据不能被改变只要Busy为TRUE或者传送没有完成。

Length

长度是发送数据的字节数，可以小于或等于数据结构的大小。如果发送一个完整的变量，他的长度可以用SIZEOF来确定。


ClearComBuffer

接口

VAR_IN_OUT
    Buffer : ComBuffer;
END_VAR

说明

通讯缓冲区，缓冲区，PLC内部将被清除。


ASC

接口

FUNCTION ASC : BYTE
VAR_INPUT
    str : STRING;
END_VAR

说明

功能块Asc返回了输入ASCII码的字节的首字符。

Background

传输数据往往可以作为一个字符串。如果要发送，个别字符需要作为字节发送。


CHR

接口

FUNCTION CHR : STRING
VAR_INPUT
    c : BYTE;
END_VAR

说明

功能块Chr返回相对应的输入变量c为一个字符串的ASCII码得字符

Background

已接收的字符以字节的形式传递给PLC系统，并且必须以字符串的形式做进一步处理。


SerialLineControl

SerialLineControl功能块是管理串口(KL60xx, EL60xx or COM interface)和PLC通讯。该功能块是循环的，并且把收到的数据放到RxBuffer中，在TxBuffer发送缓冲区中的数据在同一时间也被发送到串口。

由于该功能独立于应用运行，所以他被称为后台通讯，并且可以连接一个总线端子模块在快速任务中运行。(see Communication concept and Supported hardware).

在库2.0或更高的版本中，功能块替换了硬件相关的KL6Control, KL6Control5B和PcComControl功能块。

接口

VAR_INPUT
    Mode 	: ComSerialLineMode_t;
    pComIn 	: POINTER TO BYTE
    pComOut 	: POINTER TO BYTE
    SizeComIn	: UINT;
END_VAR
VAR_OUTPUT
    Error 	: BOOL;
    ErrorID 	: ComError_t;
END_VAR
VAR_IN_OUT
    TxBuffer	: ComBuffer;
    RxBuffer	: ComBuffer;
END_VAR

Mode | Mode输入明确规定了在被使用的硬件
pComIn | 所有硬件过程数据输入变量的指针（数据类型 KL6inData, KL6inData5b, KL6inData22b, EL6inData22b, PcComInData). 用ADR() 赋值。
pComOut | 所有硬件过程数据输入变量的指针（数据类型 KL6outData, KL6outData5b, KL6outData22b, EL6outData22b, PcComOutData). 用ADR() 赋值。
SizeComIn | 使用中硬件输入进程图像的大小。需要用SIZEOF() 赋值。
Error | 只要有错误产生，Error输出变为TRUE。
ErrorID | 当有一个错误产生时，ErrorID 输出将提供一个错误代码。
TxBuffer | 正在使用的硬件发送数据缓冲区。发送缓冲区里有SendByte, SendData或SendString功能模块.
RxBuffer | 正在使用的硬件接收数据缓冲区。接受缓冲区里有ReceiveByte, ReceiveData or ReceiveString功能模块.


PcComControl

接口

VAR_INPUT
    COMin : PcComInData;
END_VAR
VAR_IN_OUT
    COMout : PcComOutData;
    TxBuffer: ComBuffer;
    RxBuffer: ComBuffer;
END_VAR

说明

PcComControl功能块控制数据在数据缓冲区TxBuffer和RxBuffer之间传输，数据结构 PcComInData 和PcComOutData 是全局变量用来连接TwinCAT System Manager和PC接口。

PcComControl无论是不是要发送或者接收数据 (Background Communication)，这个块需要一个足够快的任务获得一个有效的接近于物理波特率的波特率。

注意

background communication功能块最好连接一个快速任务。PC接口的任务周期时间需求是比其他总线端子模块要小很多。因此一个非常快的PC接口通讯任务是不需要的。（比较Supported Hardware）。

这个块可以被通讯库版本2的 SerialLineControl所替代。


KL6Control

接口

VAR_INPUT
    COMin : KL6inData;
END_VAR
VAR_IN_OUT
    COMout : KL6outData;
    TxBuffer: ComBuffer;
    RxBuffer: ComBuffer;
END_VAR

说明

KL6Control是控制数据在PLC内部数据缓冲区TxBuffer和RxBuffer之间传输，硬件方面和PcComControl块相同。

注意

background communication功能块最好在一个快速任务中 （比较Supported Hardware）。

这个块可以被通讯库版本2的 SerialLineControl所替代。


KL6Control5B

接口

VAR_INPUT
    COMin : KL6inData5B;
END_VAR
VAR_IN_OUT
    COMout : KL6outData5B;
    TxBuffer: ComBuffer;
    RxBuffer: ComBuffer;
END_VAR

说明

KL6Control5B是控制数据在数据缓冲区TxBuffer和RxBuffer之间传输，PLC内部和硬件方面和 KL6Control相同，但是这个是在5-byte mode总线端子模块下的。

注意

background communication功能块最好在一个快速任务中 （比较Supported Hardware）。

这个块可以被通讯库版本2的 SerialLineControl所替代。


ComReset

ComReset是硬件的复位。这会清除内部硬件的发送和接收缓冲区。该功能块支持多种硬件，比如PC接口和 KL6xxx 总线端子模块。

2.0及以上版本，该功能块可以用KL6Init功能块代替。

注意: 该功能块不能清除PLC内部ComBuffer的数据缓冲区。如果需要初始化，可以用ClearComBuffer功能块完全清除。

接口

VAR_INPUT
    Execute 	: BOOL;
    pComIn 	: POINTER TO BYTE
    pComOut 	: POINTER TO BYTE
    SizeComIn	: UINT;
END_VAR
VAR_OUTPUT
    Done 	: BOOL;
    Busy 	: BOOL;
    Error 	: BOOL;
    ErrorID 	: UDINT;
END_VAR

Execute: 在Execute输入的上升沿重置已连接串行硬件。

pComIn: 所有硬件过程数据输入变量的指针（数据类型 KL6inData, KL6inData5b, PcComInData）. 用ADR() 赋值。

pComOut: 所有硬件过程数据输出变量的指针（数据类型KL6outData, KL6outData5b, PcComOutData）. 用ADR() 赋值。

SizeComIn: 使用中硬件输入进程图像的大小。取决于SIZEOF()功能模块并由其赋值。

Done: 当功能已经无错误开始，Done输出为TRUE。

Busy: 在Execute响应上升沿时，Busy输出为TRUE，只要功能继续运行，那Busy还是TRUE。

Error: 只要有错误产生，Error输出变为TRUE。

ErrorID: 当有一个错误产生时，ErrorID 提供一个错误代码。


KL6Configuration

KL6configuration功能块用来初始化以及配置KL6xxx 总线端子模块。

2.0及以上版本，该功能块可以用KL6Config and KL6Config5B功能块代替。

注意: 该功能块使用寄存器通讯来配置KL6端子模块. 寄存器通讯不支持EtherCAT端子模块。EL端子模块可以用来自TwincAT EtherCAT library的功能块(FB_EcCoeSdoWrite)配置。

接口

VAR_INPUT
    Execute 		: BOOL;
    Mode 		: ComSerialLineMode_t;
    Baudrate 		: UDINT; 			(* 115200, 57600, 38400, 19200, 9600, 4800, 2400, 1200 *)
    NoDatabits 	: BYTE; 			(* 7 or 8 *)
    Parity 		: ComParity_t; 		(* PARITY_NONE=0, PARITY_EVEN=1, PARITY_ODD=2 *)
    Stopbits 		: BYTE; 			(* 1 or 2 *)
    Handshake 	: ComHandshake_t; 		(* HANDSHAKE_NONE=0, HANDSHAKE_RTSCTS=1, HANDSHAKE_XONXOFF=2 *)
    ContinousMode 	: BOOL; 			(* don't start transmission before transmit buffer is filled *)
    pComIn 		: POINTER TO BYTE; 	(* for universal register communication *)
    pComOut 		: POINTER TO BYTE; 	(* for universal register communication *)
    SizeComIn 	: UINT;
END_VAR
VAR_OUTPUT
    Done 		: BOOL;
    Busy 		: BOOL;
    Error 		: BOOL;
    ErrorId 		: ComError_t;
END_VAR

Execute: 在输入的上升沿重置所有连接中的硬件。

Mode: Mode输入明确了在被使用的硬件。(ComSerialLineMode_t).

Baudrate: 只要串行硬件支持，就可显示波特率。

NoDatabits: 一个字节中用户数据位的字节数。

Parity: 数据字节中奇偶检验位的类型。

Stopbits: 每个数据字节的停止位。

Handshake: 只要串行硬件支持，就可以使用握手类型。

ContinousMode: 只要串行硬件支持，就可以打开连续传输。

如果ContinousMode为TRUE, 传输数据不通过串行硬件发送直到硬件传输缓冲区满。这意味着如果数据大小和硬件发送缓冲区大小相似那么数据在传输中没有时间间隔。连续模式必须在终端设备对超时的时间间隔做出反应。

pComIn: 所有硬件过程数据输入变量的指针（数据类型KL6inData, KL6inData5b, KL6inData22b, PcComInData）。 用ADR() 赋值。

pComOut: 所有硬件过程数据输出变量的指针（数据类型KL6outData, KL6outData5b, KL6outData22b, PcComOutData）。用ADR() 赋值。

SizeComIn: 使用中硬件输入进程图像的大小。取决于SIZEOF()模块并由其赋值。

Done: 当功能块已经无错误开始执行时，Done输出为TRUE。

Busy: 当执行上升沿时，Busy输出为TRUE，只要功能继续运行，那Busy还是TRUE。

Error: 只要有错误产生，Error输出变为TRUE。

ErrorID: 当有一个错误产生时，ErrorID 提供一个错误代码。


KL6ReadRegisters

KL6ReadRegisters功能块读取KL6xxx串行总线端子模块的一个或多个寄存器。

接口

VAR_INPUT
    Execute 		: BOOL;
    FirstRegister 	: UINT;
    RegisterCount 	: UINT;
    Mode 		: ComSerialLineMode_t;
    pComIn 		: POINTER TO ARRAY[0..65] OF BYTE; (* for universal register communication *)
    pComOut 		: POINTER TO ARRAY[0..65] OF BYTE; (* for universal register communication *)
    SizeComIn 	: UINT;
    pRegisterList 	: POINTER TO ARRAY[0..63] OF ComRegisterData_t;
    SizeRegisterList 	: UINT;
END_VAR
VAR_OUTPUT
    Done 		: BOOL;
    Busy 		: BOOL;
    Error 		: BOOL;
    ErrorId 		: ComError_t;
END_VAR

Execute: 在执行输入的上升沿重置所有连接中的硬件。

FirstRegister : 指定第一个寄存器被读取。从这个寄存器编号（1到64之间）开始，RegisterCount 数据读取和储存在ComRegisterData_t寄存器列表中。

如果读取的不是连续的寄存器，数值16#FFFF被储存在FirstRegister中。在这种情况下，用户必须在块被触发之前初始化在寄存器列表中要被读取的寄存器编号。在这种情况下，RegisterCount不工作。

RegisterCount : 指定要被读取的寄存器的编号。该块从FirstRegister 中读取一连续范围的寄存器并把数据储存在寄存器列表。

Mode: Mode输入明确了在被使用的硬件。((ComSerialLineMode_t).

pComIn: 所有硬件过程数据输入变量的指针（数据类型 KL6inData, KL6inData5b, KL6inData22b, PcComInData）。 用ADR() 赋值。

pComOut: 所有硬件过程数据输出变量的指针（数据类型KL6outData, KL6outData5b, KL6outData22b, PcComOutData）。用ADR() 赋值。

SizeComIn: 使用中硬件输入进程图像的大小。取决于SIZEOF() 模块，并由其赋值。

Done: 当功能已经无错误开始，Done输出为TRUE。

Busy: 当执行上升沿时，Busy输出为TRUE，只要功能继续运行，那Busy还是TRUE。

Error: 只要有错误产生，Error输出变为TRUE。

ErrorID: 当有一个错误产生时，ErrorID 提供一个错误代码。


KL6WriteRegisters

KL6WriteRegisters功能块写入KL6xxx总线端子模块的一个或多个寄存器。

接口

VAR_INPUT
    Execute 		: BOOL;
    Mode 		: ComSerialLineMode_t;
    pComIn 		: POINTER TO ARRAY[0..65] OF BYTE; (* for universal register communication *)
    pComOut 		: POINTER TO ARRAY[0..65] OF BYTE; (* for universal register communication *)
    SizeComIn 	: UINT;
    pRegisterList 	: POINTER TO ARRAY[0..63] OF ComRegisterData_t;
    SizeRegisterList 	: UINT;
END_VAR
VAR_OUTPUT
    Done 		: BOOL;
    Busy 		: BOOL;
    Error 		: BOOL;
    ErrorId 		: ComError_t;
END_VAR

Execute: 在执行输入的上升沿重置所有连接中的硬件。

在该块被触发之前，寄存器列表必须初始化。这意味着寄存器编号和寄存器内容比如写入列表中。

Mode: Mode输入明确了在被使用的硬件。((ComSerialLineMode_t).

pComIn: 所有硬件过程数据输入变量的指针（数据类型 KL6inData, KL6inData5b, KL6inData22b, PcComInData）。 用ADR() 赋值。

pComOut: 所有硬件过程数据输出变量的指针（数据类型KL6outData, KL6outData5b, KL6outData22b, PcComOutData）。用ADR() 赋值。

SizeComIn: 使用中硬件输入进程图像的大小。取决于SIZEOF() 模块，并由其赋值。

pRegisterList : ComRegisterData_t寄存器列表起始地址。起始地址用ADR（寄存器列表）赋值。该块被触发前，寄存器列表必须初始化。这意味着寄存器编号和寄存器内容必须写入列表。

SizeRegisterList : 寄存器列表的字节数。字节数取决于通道SIZE(寄存器列表)。列表在1-64之间。

Done: 当功能已经无错误开始，Done输出为TRUE。

Busy: 当执行上升沿时，Busy输出为TRUE，只要功能继续运行，那Busy还是TRUE。

Error: 只要有错误产生，Error输出变为TRUE。

ErrorID: 当有一个错误产生时，ErrorID 提供一个错误代码。


KL6Init

接口

VAR_INPUT
    Start : BOOL;
    SerStatus : BYTE;
END_VAR
VAR_OUTPUT
    Busy : BOOL;
    Ready : BOOL;
END_VAR

说明

KL6Init不改变它的配置来初始化串口总线端子模块KL6xxx。该端子的内部缓冲区将被清理。

SerStatus 和 SerCtrl 输入数据相对的数据是由TwinCAT System Manager将他们与终端相连接。他们规定了COMlib KL6inData和KL6outData数据结构的分别。

发出开始信号后，也就是Busy=FALSE and Ready=TRUE，终端便成功开始初始化。


KL6Config

接口

VAR_INPUT
    Start : BOOL; (* Edge triggered *)
    Baudrate : INT;         (* 19200, 9600, 4800, 2400, 1200 *)
    NoDatabits : BYTE;      (* 7 or 8 *)
    Parity : BYTE;          (* 0=no 1= even 2 = odd *)
    Stopbits : BYTE;        (* 1 or 2 *)
    Handshake : BYTE;       (*0=none,1=RTS/CTS,2=XON/XOFF*)
    COMin : KL6inData;
END_VAR
VAR_OUTPUT
    Err : BOOL;
    ErrId : WORD;
    Busy : BOOL;
END_VAR
VAR_IN_OUT
    COMout : KL6outData;
END_VAR

说明

KL6Config配置总线端子模块KL6xxx的串行接口参数。

注意

只要KL6Config块处于忙碌状态（即为busy）。基于背景通讯的KL6Control块不能被调用。初始化和总线端子模块的正常通讯使用相同的寄存器。

此块可以被2.0版本的通讯库中的KL6configuration 代替。


KL6Config5B

接口

VAR_INPUT
    Start : BOOL; (* Edge triggered *)
    Baudrate : INT;        (* 19200, 9600, 4800, 2400, 1200 *)
    NoDatabits : BYTE;     (* 7 or 8 *)
    Parity : BYTE;         (* 0=no, 1= even, 2 = odd *)
    Stopbits : BYTE;       (* 1 or 2 *)
    Handshake : BYTE;     	(*0=none,1=RTS/CTS,2=XON/XOFF*)
    COMin : KL6inData5B;
END_VAR
VAR_OUTPUT
    Err : BOOL;
    ErrId : WORD;
    Busy : BOOL;
END_VAR
VAR_IN_OUT
    COMout : KL6outData5B;
END_VAR

说明

KL6Config5B工作方式类似于KL6Config块，但是是用在5-byte mode下的总线控制模块。

注意

只要 KL6Config5B块处于忙碌状态（即为busy）。基于背景通讯的KL6Control5B块不能被调用。初始化和总线端子模块的正常通讯使用相同的寄存器。

此块可以被2.0版本的通讯库中的KL6configuration 代替。


Installation

TwinCAT PLC Serial Communication Library - PLC Program

安装

COMlibV2

为了安装，库COMlibV2.lib必须被复制到目录TwinCAT文件夹中的TwinCAT\PLC\LIB中.

COMlib

为了安装，库COMlib.LIB、ChrAsc.LIB和 辅助库ChrAsc.OBJ必须被复制到目录TwinCAT中的TwinCAT\PLC\LIB。

相关的测试程序应该被复制到您选择的项目目录，例如到 TwinCAT\PLC中。

  • 串行通讯示例

Link libraries

在TwinCAT PLC Control中创建一个新的PLC项目用来执行库链接。

进入Library Management 并添加库ChrAsc.LIB和ComLib.LIB.


Global Variables

4个全局数据结构都需奥访问同一个串行接口。2个提供和发送和接收的硬件相连。2个数据缓冲区也需要中间存储。


Background Communication

串行硬件和数据缓冲区ComBuffer之间的通讯是在一个单独的快速任务中处理的。

参考Communication Principle.

with COMlibV2:

with COMlib:


Serial Bus Terminal

KL6xxx in 3-Byte Mode

总线端子模块通过总线耦合器进入系统

然后，输入和输出数据与相应的PLC变量相连(类型KL6inData and KL6outData).

激活新的配置，重启系统。


Serial Bus Terminal

KL6xxx in 5-Byte Mode

总线端子模块KL6xxx可以在5-byte mode下使用，必须进行适当的重新配置。当 ComLib运行是不能重新配置，但是必须在Beckhoff KS2000下配置程序。该终端将永久设置成为5-byte mode.

总线端子模块通过总线耦合器进入系统

然后，输入和输出数据与相应的PLC变量相连(类型KL6inData5B and KL6outData5B).

激活新的配置，重启系统。


Task Assignment

TwinCAT PLC Serial Communication Library - TwinCAT System Manager

任务分配

当在 TwinCAT PLC Control中声明全局变量时，局部变量没有分配到特定的任务中。因此他们最初出现在TwinCAT System Manager的标准任务下。

由于任务的周期时间决定I/O总线周期的更新，至关重要的是快速通讯任务和硬件被分配的任务之间的通讯数据结构。基本任务的输入输出相应的入口可以用鼠标点击并移动到通讯任务中的菜单中。

以下类型所有的数据结构都受影响：

  • KL6inData
  • KL6outData
  • KL6inData5B
  • KL6outData5B
  • KL6inData22B
  • KL6outData22B
  • EL6inData22B
  • EL6outData22B
  • PcComInData
  • PcComOutData

在快速通讯任务中的通讯数据结构