目录
一、简介
二、环境介绍
三、接线连接
四、创建TwinCAT3程序工程
1、IO扫描和参数设置
2、创建PLC程序
(1)库文件添加
(2)创建任务和程序
(3)变量关联
(4)重新激活工程、运行
3、运行和测试
(1)运行PLC程序
(2)串口调试助手和PLC程序测试
五、测试问题
六、程序工程下载链接
一、简介
EL6021是倍福推出的RS422/485串口通信模块,一般用作Modbus RTU通信的主站也可以做串口自由协议通讯,EL6021是单口RS422/485模块,EL6022是双口(DB9)RS422/485模块,且两个口可独立设置,互不影响。
EL6021支持2400…115200 kbuds的标准波特率,默认波特率为9600,8N1配置。 RS422支持全双工的通信模式,其发送数据线采用差分线对TxD+和TxD-,接收数据线也采用差分线对RxD+和RxD-,这样的设计方式增强了通信的抗干扰能力。 RS485支持半双工的通信模式,不支持全双工模式,只使用一对差分线进行数据传输,一般称为A和B或者TxD和RxD,这样的设计导致设备在发送数据的时候是无法接收数据的,因为总线被占用且正在进行发送操作。
EL6021出厂默认的工作模式是RS422。
二、环境介绍
1、PLC端:CX5130-0125、EL6021,Twincat3
2、PC端:USB转232、232/485转换器,win10系统(USB转232驱动安装好)、串口调试助手
三、接线连接
485模式 接线说明:
1和2短接然后跟第三方设备485正连接
5和6短接然后跟第三方设备485负连接
422模式 接线说明:
四根线分开依次连接。
首先确保接线正确,将EL6021上面的1、2短接,5、6短接,然后将EL6021的1和5管脚连接到电脑USB转485/422口的RXD+和RXD-上面,USB转485/422的驱动必须装好,这种方式采用485的接线方式,EL6021默认的COEONLINE设置就是485的方式。
EL6021和485的地GND,可以接也可以不接。建议都接0V。
四、创建TwinCAT3程序工程
1、IO扫描和参数设置
(1)配置模式下,在IO-Device进行硬件扫描。找到EL6021硬件模块。
(2)CeE-OnLine参数设置
(3)设置自启动初始化时候参数值
2、创建PLC程序
(1)库文件添加
在References中添加Tc2_SerialCom库文件
(2)创建任务和程序
添加全局变量
VAR_GLOBAL
(*
*xBuffer 的作用是,在 PLC 要发送的数据和串行通讯的硬件 Process Data 之间设置一个缓存区。
*比如 KL6outData22B 类型的接口,每个 PLC 周期只能发送 22 字节。假如程序需要发送的数据为 100 个,
*那么实际上 PLC 程序是把这些数据放到 TxBuffer 中,再由硬件分几个 PLC 周期发送出去
*)
TxBuffer_PC: ComBuffer;
RxBuffer_PC: ComBuffer;
COMin AT%I* :KL6inData22B;
COMout AT%Q* :KL6outData22B;
COMportControl :SerialLineControl;
END_VAR
在Main程序中添加代码
(*
*功能块的作用,把 TxBuffer 缓存区的数据经过 Process Data 的 ComOut 发送出去,
*而把 ComIn 中的数据接收到 RxBuffer。引用这个功能块的程序执行周期越短,
*数据交换的效率就越高,所以这段程序应该放在快速任务中作为 Backgroud 代码无条件执行。
*)
COMportControl(
Mode:= SERIALLINEMODE_KL6_22B_STANDARD,
pComIn:= ADR(COMin),
pComOut:= ADR(COMout),
SizeComIn:= SIZEOF(COMin),
Error=> ,
ErrorID=> ,
TxBuffer:= TxBuffer_PC,
RxBuffer:= RxBuffer_PC );
在SerialSend程序中添加局部变量
PROGRAM SerialSend
VAR
send1: SendString;
receive1: ReceiveString;
Timer1: TON;
_sendString: STRING:='4567';
_receive1string: STRING;
_recvLast: STRING; //保存上一个周期接收的字符
END_VAR
在SerialSend程序中添加程序
//3000ms发送一次
Timer1(IN:= NOT timer1.q, PT:=T#3000MS , Q=> , ET=> );
IF timer1.Q THEN
SEND1(
SendString:=_sendString ,
TXbuffer:=TxBuffer_PC ,
Busy=> ,
Error=> );
END_IF
//接收
Receive1(
Timeout:= t#100ms,
ReceivedString:=_receive1string ,
RXbuffer:=RxBuffer_PC , );
//保存上一个周期接收的字符
IF Receive1.Busy THEN
_recvLast:=_receive1string;
END_IF
然后,重新编译、生成工程,没有错误、没有警告。
(3)变量关联
EL6021中输入输出的21个IO变量分别和PLC程序中的变量关联起来
(4)重新激活工程、运行
3、运行和测试
(1)运行PLC程序
①程序设置3000ms发送一次
②设置发送的字符串
(2)串口调试助手和PLC程序测试
串口参数要和PLC的EL6021配置的串口参数一致。
①打开串口
②串口调试助手接收PLC发送的数据。
③串口调试助手发送数据,在PLC中观测。
五、测试问题
1、RS485通讯,发送的数据又返回来了
解决:由于 BECKHOFF 提供 RS485 和 RS422 通讯是同一个硬件,所以当用作 RS485 通讯 时, 必须发送和接收短接在一起, 并设置参数为半双工“Half Duplex”,
如果是 EL602x, 参 数 8000: 06 置 True 即为半双工。
2、发送和接收数据都没有
解决:
①检查PLC程序配置是否正确
②PLC程序是否执行
③IO中EL6021的变量是否关联起来了,有X表示关联成功、没有X需要再次关联然后重新激活工程。
六、程序工程下载链接
https://download.csdn.net/download/panjinliang066333/87408302