news 2026/4/17 15:09:12

中科易联Profinet OEM嵌入式通讯模块之西门子PLC S7-1200通讯应用指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
中科易联Profinet OEM嵌入式通讯模块之西门子PLC S7-1200通讯应用指南

OEM嵌入式通讯模块与西门子PLC S7-1200通讯测试指南

一、

OEM嵌入式通讯模块介绍

OEM嵌入式通讯模块是一款适用于工业以太网和现场总线协议的嵌入式IC模块,利用该模块可快速又轻松地把您的设备集成到工业网络中。目前该系列模块有支持PROFINET、EtherNet/IP、EtherCAT、Modbus TCP等实时通信协议。OEM模块对用户开放了2种串行接口,包括USART接口(标准Modbus RTU协议)和SPI接口,与主控MCU应用程序交换实时网络数据,从而将您的设备集成到相应的网络而无需大量的开发工作。另外该模块还具备32个引脚的IO信号,可以满足32个点的数字量IO设计,这32个IO引脚可以任意设置成DI或DO。

二、

案例说明

本案例以OEM模块标准评估板(主控芯片STM32F103VCT6)结合集成PROFINET从站通讯协议的OEM通讯模块,及西门子S7-1200 PLC作为PROFINET主站为例,进行关于PROFINET通讯模块的通讯测试。

2.1 准备工作

① OEM模块标准评估板

功能说明:

开发板上X1端子,直流24V供电。<X1-1:24V、X1-2:0V >。

本开发板支持2种串行接口,包括USART接口和SPI接口。

本开发板具备32个引脚的IO信号,可以满足32个点的数字量IO设计。

本开发板对外提供一路RS232信号,用于打印信息。

本开发板主芯片使用STM32F103VCT6,开发例程基于此型号芯片编写。

JP2插针是开发板主芯片的程序烧写口。

拨动开关S1:拨到ON时,开发板供电;拨到OFF时,开发板断电。拨动开关S2始终处于OFF状态。

② 目标系统

西门子PLC S7-1200作为PROFINET主站,PROFINET通讯模块插在标准评估板上作为从站,通过网线连接两个设备进行通讯。评估板上的RS232端口与电脑连接,用Modbus Slave软件查看接收到的来自PROFINET网络中数据,或者向开发板发送数据从而发送给PLC。

三、

通讯测试

OEM嵌入式通讯模块的通讯测试实际上包括两个部分:PLC主站与OEM模块之间的通讯,以及OEM模块与评估板之间通过USART(Modbus RTU)或者SPI的数据交互,本示例以USART通讯为例说明。

3.1 基本配置

1) OEM 模块 J1~J3 全部断开,开发板拨码 1~8 全部 OFF;

2) 使用交换机将西门子 PLC、开发板、电脑连到一起,PLC 程序下载到 PLC;

3) 使用RS232 连接线,将电脑与开发板的 DB1 端口连接;

4) 电脑打开 Modbus Slave 软件,建立连接。

3.2 OEM模块与PLC通讯

① 导入对应PROFINET通讯模块的gsd文件到博图软件中,便于之后网络组态与设备配置使用

② 选择–>添加新设备–>找到并添加所使用的PLC型号,这里以S7-1200为例

③ 找到所导入的GSD文件对应的设备,并添加到设备组态中,并连接PLC与通讯模块

④ 配置PLC的IP地址与设备名称(这里使用“自动生成PROFINET设备名称”)

⑤ 配置OEM模块的IP地址与设备名称,这里使用默认的GSD文件中

HI-TOP

名称,也可以对设备额外设置其他名称,但需注意与网络组态中的一致,否者无法找到设备。

⑥ 在设备视图中添加输入输出模块,这里分别添加32 bytes input和32 bytes outputs为例

⑦ 选择“编译”,检查是否有报错:

⑧ 选择“下载”,在出现的窗口中分配对应的子网,点击“开始搜索”找到可访问的设备,并“下载”

⑨ “装载”配置

⑩ 选择“转至在线”可监控网络状态,所添加设备后显示绿色对勾代表通讯状态正常。

3.3 OEM模块与评估板通讯

① 状态机

无论使用USART还是SPI,OEM模块都

为主站运行,遵循下面的状态机:

② 数据区定义

根据功能的不同,OEM模块用到的数据区划分为5个区域,分别是:通讯信息区、下发数据区、下发参数区、设备信息区、上传数据区。OEM模块在“S1 握手”阶段读取设备信息区的数据,由于PROFINET模块目前未使用此区域的内容,所以用户仅需要正确回复报文即可,OEM模块忽略数据值的内容。

下发数据区(4xxxx区 – 10H功能码)(最大1000字节)

上传数据区(3xxxx区 – 04H功能码)(最大1000字节)

③ USART通讯

USART接口波特率支持:9.6Kbps、12Kbps、38.4Kbps、57.6Kbps、115.2Kbps、230.4Kbps、460.8Kbps。

OEM模块上电后,在S1握手阶段,通过握手报文,OEM模块可以自动适应用户的波特率。用户使用的波特率需要在以上7种波特率之中。

USART接口数据帧格式:8 个数据位、偶校验、1 个停止位。

USART使用标准MODBUS协议。

OEM模块做为USART通讯主站,用户做为USART通讯从站。

用户串口的处理机制:用户做为标准的MODBUS从站,只需要在收到OEM模块的报文命令后,按照相应命令回复报文即可。

通讯报文约定

A.下发数据

板卡发送:

用户应答:

B.上传数据

板卡发送:

用户应答:

④ Modbus程序示例:

//*******************Modbus数据接收********************//

int

user_modbus_deal_rev

(

void

)

{

unsigned

int

i , tem_start_adr , tem_num ;

unsigned

int

tem_crc ;

unsigned

char

tem_hi , tem_lo ;

tem_crc = modbus_crc( URXDBuf , UART_rev_num-2 );

tem_lo = tem_crc & 0xff ;

tem_hi = (tem_crc>>8) & 0xff ;

//**CRC校验

if

( ( URXDBuf[UART_rev_num-2]==tem_hi ) && ( URXDBuf[UART_rev_num-1]==tem_lo ) )

{

if

( URXDBuf[1] == 0x10 ) // 功能码10H

{

tem_start_adr = ( URXDBuf[2] << 8 ) + URXDBuf[3] ;

tem_start_adr = tem_start_adr << 1 ;

tem_num = URXDBuf[6] ;

for

( i=0 ; i<tem_num ; i++ )

{

modbus_4_data[ tem_start_adr+i ] = URXDBuf[7+i] ;

}

}

user_modbus_deal_txd();

}

return

1 ;

}

//*******************Modbus数据发送********************//

int

user_modbus_deal_txd

(

void

)

{

unsigned

int

tem , i ;

unsigned

int

function_code , tem_start_adr , tem_num1 , tem_num2 ;

function_code = URXDBuf[1] ;

// 04H

if

( function_code == 0x04 )

{

tem_start_adr = ( URXDBuf[2] << 8 ) + URXDBuf[3] ;

tem_start_adr = tem_start_adr << 1 ;

ַ

tem_num1 = ( URXDBuf[4] << 8 ) + URXDBuf[5] ;

tem_num2 = tem_num1 << 1 ;

for

( i=0 ; i<tem_num2 ; i++ )

{

modbus_3_data[ tem_start_adr+i ] = modbus_3_data[ tem_start_adr+i ] + 1 ;

UTXDBuf[3+i] = modbus_3_data[ tem_start_adr+i ] ;

}

UTXDBuf[0] = modbus_adr ;

UTXDBuf[1] = 0x04 ;

UTXDBuf[2] = tem_num2 ;

tem = modbus_crc( UTXDBuf , tem_num2+3 );

UTXDBuf[tem_num2+3] = tem >> 8 ;

UTXDBuf[tem_num2+4] = tem ;

UART_trx_num = tem_num2+5 ;

}

// 10H

else

if

( function_code == 0x10 )

{

for

( i=0 ; i<6 ; i++ )

{

UTXDBuf[i] = URXDBuf[i] ;

}

tem = modbus_crc( UTXDBuf , 6 );

UTXDBuf[6] = tem >> 8 ;

UTXDBuf[7] = tem ;

UART_trx_num = 8 ;

}

UART_trx_ctr = 0 ;

UART_rev_ctr = 0 ;

Modbus_TR_State = TR_TURE ;

for

( i=0 ; i<10 ; i++ )

USART_SendData( RTU_USART , UTXDBuf[0] );

monitor_print(UTXDBuf[0]);

return

1 ;

}

④ 数据交互模型

3.4 数据交互测试

在“PLC变量”中添加需要在线监视或修改的变量,

在“监控与强制表”中添加监控表,并添加对应的变量,可进行变量的监测。另外,这里可以通过Modbus Slave软件监测从站开发板的收发数据。在博途和Modbus Slave可以分别查看相应的收发数据,PROFINET模块通讯正常,并完成PROFINET数据交互。(注意OEM嵌入式通讯模块数据区Modbus寄存器地址从0x100开始)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 14:57:38

JiYuTrainer:如何在被控制的电脑教室中重新获得操作自由

JiYuTrainer&#xff1a;如何在被控制的电脑教室中重新获得操作自由 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 你是否曾在电脑教室中遇到过这样的困扰&#xff1a;老师启动全…

作者头像 李华
网站建设 2026/4/17 14:54:37

别再手动调权重了!用PyTorch实现多任务损失自适应加权(附代码)

多任务学习中损失权重的自动化调参实战&#xff1a;PyTorch实现与工程细节 当你的神经网络需要同时预测用户点击率和购买金额时&#xff0c;分类损失和回归损失应该如何平衡&#xff1f;这个困扰无数算法工程师的问题&#xff0c;其实有更优雅的解决方案。传统手工调整损失权重…

作者头像 李华
网站建设 2026/4/17 14:54:36

串口如何控制大彩串口屏

一、进入官网查看大彩组态指令集 大彩组态指令集 然后下载大彩串口屏指令集PDF中 在指令集PDF中&#xff0c;可以查找各个指令 二、串口指令如何控制大彩串口屏 具体这个指令看前面的目录 想看具体的指令&#xff1a;比如切换画面 更新文本控件数值

作者头像 李华