TwinCAT3串口通讯EL6021模块使用-和串口调试助手自由协议通讯
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
目录
一、简介
EL6021是倍福推出的RS422/485串口通信模块一般用作Modbus RTU通信的主站也可以做串口自由协议通讯EL6021是单口RS422/485模块EL6022是双口DB9RS422/485模块且两个口可独立设置互不影响。
EL6021支持2400…115200 kbuds的标准波特率默认波特率为96008N1配置。 RS422支持全双工的通信模式其发送数据线采用差分线对TxD+和TxD-接收数据线也采用差分线对RxD+和RxD-这样的设计方式增强了通信的抗干扰能力。 RS485支持半双工的通信模式不支持全双工模式只使用一对差分线进行数据传输一般称为A和B或者TxD和RxD这样的设计导致设备在发送数据的时候是无法接收数据的因为总线被占用且正在进行发送操作。
EL6021出厂默认的工作模式是RS422。
二、环境介绍
1、PLC端CX5130-0125、EL6021Twincat3
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硬件模块。
2CeE-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