1.串口通讯介绍
CP340/CP34模块是西门子S7-300系列PLC中的串行通讯模块,这些模块具有1个串行通讯口(RS232C或TTY或RS485/422)。可以使用这种通讯模块实现S7-300与其他串行通讯设备的数据交换。同样,将PLC功能和运动控制器结合起来的SIMOTION也可以支持CP340和CP341
对于SIMTOIN C,CP340/341可以直接通过背板总线相连。对于SIMOTION P和SIMOTION D,可以带ET200M作为其远程IO,而ET200M上可以带CP340和CP341,因而也可以通过CP340和CP341进行串行通讯。
与s7-300相比较,SIMOTION目前还不支持“MODBUS”和“DATA HIGHWAY”通讯,其它功能和PLC类似。
软件版本要求:
SIMOTION SCOUT V4.0或更高
SIMOTION Kernel V4.0或更高
SIMOTION technology packages V4.0 或更高
本文将以SIMOTION和S7-300之间利用CP341进行通讯为例,介绍SIMOTION中如何实现Point-to-Point通讯。
2.PLC侧组态和设置
2.1参数化CP341模板:
新建STEP 7项目,在硬件组态窗口中插入CPU和CP341模块,双击CP341模板,打开CP341模板的属性窗口:
图1 CP341模块属性窗口
点击属性窗口上的Parameters按钮:
图2 协议选择
选择ASCII协议,双击信封图标:
西门子精简面板代理商
图3 协议参数设置
弹出ASCII协议通讯参数设置窗口,保持默认值:9600 bit/s, 8 data bits, 1 stop bit, even parity。对硬件组态存盘编译,下载硬件组态。
2.2 编写通讯程序:
在安装完串口通讯的驱动程序后,可在PLC程序库中找到用于串口通讯的程序:
图4 串口通讯程序块
在OB1调用FB7实现字符收发功能:
EN_R为TRUE时始能接收
在OB35中调用FB8实现字符发送功能
其中REQ需要正跳沿来触发通讯。
3.SIMOTION侧组态与编程
3.1 硬件组态
在SIMOTION打开所建立的STEP 7项目,插入D435,建立一个DP网络,并在网络中添加一个ET200M站,并在ET200M站中插入CP341
图5 SIMOTION侧硬件组态
然后对CP341进行参数化,过程和PLC中完全相同。
3.2 软件编程
3.2.1程序块介绍
SIMOTION中的串行通讯程序是集成在标准库里的,*安装相应的驱动,如下:
图6 SIMOTION串口通讯程序块
_CP341_send用于数据的发送。
_CP341_send的参数含义如表1所示。
表1 _CP341_send功能块参数含义
参数名
|
输入
|
数据类型
|
含义
|
输出
|
execute
|
IN
|
BOOL
|
触发发送,上升沿有效
|
reset
|
IN
|
BOOL
|
为True时表示取消当前发送
|
moduleAddress
|
IN
|
DINT
|
模块地址
|
dataOffset
|
IN
|
UDINT
|
**字节的位置偏差
|
dataLength
|
IN
|
UDINT
|
发送的数据长度
|
periIn
|
IN
|
ARRAY [0..15]
|
用于CP卡IO输入的背景数据块
|
of BYTE
|
periOut
|
IN/OUT
|
ARRAY [0..15]
|
|
of BYTE
|
用于CP卡IO输出的背景数据块
|
data
|
IN/OUT
|
ARRAY [0.0.1023]
|
发送的数据区
|
of BYTE
|
done
|
OUT
|
BOOL
|
完成标志位
|
error
|
OUT
|
BOOL
|
错误标志位
|
errorID
|
OUT
|
WORD
|
故障详细信息,如果error=TRUE,
|
那么errorID 中将显示事件等级和故障号
|
errorIdTransfer
|
OUT
|
DINT
|
数据传送给CP卡时产生故障(如果errorID中显示16#1E0F时,那么errorIdTransfer中会有更详细的诊断信息
|
startup
|
OUT
|
BOOL
|
CP启动完成标志位,为False标志启动完成
|
_CP341_receive用于数据的接收,其参数含义表2所示
表2 _CP341_received功能块参数含义
参数名
|
输入
|
数据类型
|
含义
|
输出
|
enable
|
IN
|
BOOL
|
接收使能
|
reset
|
IN
|
BOOL
|
取消接收
|
moduleAddress
|
IN
|
DINT
|
模块地址
|
dataOffset
|
IN
|
UDINT
|
**字节的位置偏差
|
periIn
|
IN
|
ARRAY[0..15]
|
用于CP卡IO输入的背景数据块
|
of BYTE
|
periOut
|
IN/OUT
|
ARRAY[0..15]
|
|
of BYTE
|
用于CP卡IO输出的背景数据块
|
dataCl3964
|
IN/OUT
|
ARRAY[0.0.1023]
|
接收数据区
|
of BYTE
|
dataCl512
|
IN/OUT
|
ARRAY[0..6] of
|
RK 512 的数据区
|
Struct_CP341
|
_Cl512Data
|
comFlags
|
IN/OUT
|
ARRAY [0 to 31]
|
RK 512通讯标志
|
of BYTE
|
newDataReceived
|
OUT
|
BOOL
|
新数据接收标志位
|
error
|
OUT
|
BOOL
|
错误标志位
|
dataLength
|
OUT
|
UDINT
|
接收长度
|
errorID
|
OUT
|
WORD
|
故障详情,如果error=TRUE,
|
那么errorID 中将显示 事件等级和故障
|
errorIdTransfer
|
OUT
|
DINT
|
数据传送给CP卡时产生故障(如果errorID中
|
显示16#1E0F时,那么时会有更详细的诊断信息
|
startup
|
OUT
|
BOOL
|
CP启动状态标志位
|