OEM嵌入式通訊模塊看這裡!以西門子PLC S7-1200通訊為例




OEM嵌入式通訊模塊

與西門子PLC S7-1200通訊測試

▎OEM嵌入式通訊模塊介紹

OEM嵌入式通訊模塊是一款適用於工業以太網和現場總線協議的嵌入式IC模塊,利用該模塊可快速又輕鬆地把設備集成到工業網路中。目前該系列模塊有支持PROFINET、EtherNet/IP、EtherCAT、Modbus TCP、CANopen、Profibus、DeviceNet、CC-Link等實時通訊協議。OEM模塊對用戶開放了2種串行接口,包括USART接口(標準Modbus RTU協議)和SPI接口,與主控MCU應用程序交換實時網絡數據,從而將設備集成到相應的網路而無需大量的開發工作。另外該模塊還具備32個引腳的IO信號,可以滿足32個點的數字量IO設計,這32個IO引腳可以任意設置成DI或DO。

▍案例說明

本案例以OEM模塊標準評估板(控制器晶片STM32F103VCT6)結合集成PROFINET從站通訊協議的OEM通訊模塊,及西門子S7-1200 PLC作為PROFINET主站為例,進行關於PROFINET通訊模塊的通訊測試。

準備工作

■ OEM模塊標準評估板

功能說明:

1. 開發板上X1端子,直流24V供電。<X1-1:24V、X1-2:0V >。

2. 本開發板支持2種串行接口,包括USART接口和SPI接口。

3. 本開發板具備32個引腳的IO信號,可以滿足32個點的數字量IO設計。

4. 本開發闆對外提供一路RS232信號,用於打印信息。

5. 本開發板主晶片使用STM32F103VCT6,開發例程基於此型號晶片編寫。

6. JP2插針是開發板主晶片的程序燒寫口。

7. 撥動開關S1:撥到ON時,開發板供電;撥到OFF時,開發板斷電。撥動開關S2始終處於OFF狀態。

■ 目標系統

西門子PLC S7-1200作為PROFINET主站,PROFINET通訊模塊插在標準評估板上作為從站,透過網線連接兩個設備進行通訊。評估板上的RS232端口與電腦連接,用Modbus Slave軟體查看接收到的來自PROFINET網路中數據,或者向開發板發送數據從而發送給PLC。

▍通訊測試

OEM嵌入式通訊模塊的通訊測試實際上包括兩個部分:PLC主站與OEM模塊之間的通訊,以及OEM模塊與評估板之間通過USART(Modbus RTU)或者SPI的數據交互,本示例以USART通訊為例說明。

1. 基本配置

(1) OEM 模塊J1~J3 全部斷開,開發板撥碼1~8 全部OFF;
(2) 使用交換機將西門子PLC、開發板、電腦連到一起,PLC 程序下載到PLC;
(3) 使用RS232 連接線,將電腦與開發板的DB1 端口連接;
(4) 電腦打開Modbus Slave 軟體,建立連接。

2. OEM模塊與PLC通訊

 2.1 導入對應PROFINET通訊模塊的gsd文件到博圖軟體中,便於之後網路組態與設備配置使用

2.2 選擇–>添加新設備–>找到並添加所使用的PLC型號,這里以S7-1200為例

2.3 找到所導入的GSD文件對應的設備,並添加到設備組態中,並連接PLC與通訊模塊

 2.4 配置PLC的IP地址與設備名稱(這裡使用“自動生成PROFINET設備名稱”)

2.5 配置OEM模塊的IP地址與設備名稱,這裡使用預設的GSD文件中sast名稱,也可以對設備額外設置其他名稱,但需注意與網路組態中的一致,否則無法找到設備。

2.6 在設備視窗中添加輸入輸出模塊,這里分別添加32 bytes input和32 bytes outputs為例

2.7 選擇“編譯”,檢查是否有報錯:

2.8 選擇“下載”,在出現的窗口中分配對應的子網,點擊“開始搜索”找到可訪問的設備,並“下載”

2.9 “裝載”配置

2.10 選擇“轉至在線”可監控網路狀態,所添加設備後顯示綠色對勾代表通訊狀態正常。

▍OEM模塊與評估板通訊

3.1 狀態機

3.1 數據區定義

根據功能的不同,OEM模塊用到的數據區劃分為5個區域,分別是:通訊訊息區、下發數據區、下發參數區、設備訊息區、上傳數據區。OEM模塊在“S1 握手”階段讀取設備信息區的數據,由於PROFINET模塊目前未使用此區域的內容,所以用戶僅需要正確回覆報文即可,OEM模塊忽略數據值的內容。

下發數據區(4xxxx區- 10H功能碼)(最大1000字節)

上傳數據區(3xxxx區- 04H功能碼)(最大1000字節)

3.2 USART通訊

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

2) OEM模塊上電後,在S1握手階段,通過握手報文,OEM模塊可以自動適應用戶的波特率。用戶使用的波特率需要在以上7種波特率之中。

3) USART接口數據幀格式:8 個數據位、偶校驗、1 個停止位。

4) USART使用標準MODBUS協議。

5) OEM模塊做為USART通訊主站,用戶做為USART通訊從站。

6) 用戶串口的處理機制:用戶做為標準的MODBUS從站,只需要在收到OEM模塊的報文命令後,按照相應命令回复報文即可。

7) 通訊報文約定

 

A. 下發數據

板卡發送

用戶應答:

A. 上傳數據

板卡發送

用戶應答:

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 數據交互模型

3.5 數據交互測試

在“PLC變量”中添加需要在線監視或修改的變量,在“監控與強製表”中添加監控表,並添加對應的變量,可進行變量的監測。另外,這裡可以透過Modbus Slave軟體監測從站開發板的收發數據。在博途和Modbus Slave可以分別查看相應的收發數據,PROFINET模塊通訊正常,並完成PROFINET數據交互。(注意OEM嵌入式通訊模塊數據區Modbus寄存器地址從0x100開始)