首页 > 全部分类 > 技术问答 > 帖子内容

西门子PLC 1200如何和其他品牌做DP 通讯,请写一段代码

联系人:16446453327260

电话/手机:联系客服

发布时间:2023-05-11 09:58

浏览:266次

明扬工控技术客服2025-09-04 20:56:13
答复内容:

西门子S7-1200 PLC本身并不自带原生的Profibus-DP接口。它的标准以太网接口可以非常方便地做Profinet通讯。如果要作为从站与其他品牌的主站(如ABB、施耐德、汇川等的主PLC)进行Profibus-DP通讯,需要增加一个DP通信模块

最常用的模块是:CM 1243-5


第一步:硬件和软件准备

1.    硬件配置

o    S7-1200 CPU(如CPU 1214C)

o    S7-1200 电源模块(可选,根据需要)

o    CM 1243-5 Profibus-DP 从站模块

o    Profibus总线连接器及Profibus电缆

o    其他品牌的主站设备(如ABB AC500 PLC、施耐德Quantum PLC等)

2.    软件

o    TIA Portal (博途) - 版本需要支持您的S7-1200 CPU和CM 1243-5模块。

o    其他主站设备的编程软件(如ABB的Automation Builder等)。


第二步:在TIA Portal中的组态步骤

代码的实现依赖于正确的硬件组态。请先完成以下步骤:

1.    创建新项目并添加硬件

o    在TIA Portal中创建一个新项目。

o    在“设备与网络”视图中,将您的S7-1200 CPU拖放到机架上。

o    在硬件目录中,找到“通信模块” -> “PROFIBUS” -> “CM 1243-5”,并将其拖放到CPU左侧的插槽中。

2.    配置CM 1243-5模块

o    选中机架上的CM 1243-5模块。

o    在模块的属性窗口中,选择“操作模式”选项卡。

o    勾选“DP从站模式

o    在“分配参数”中,设置您的站地址(例如,地址为3),这个地址必须与主站中配置的从站地址一致。

o    设置传输速率(例如 1.5 Mbps),这个速率必须与主站网络上设置的速率一致。

3.    配置从站通信接口区

o    这是最关键的一步。您需要定义主站和从站交换数据的区域。

o    在模块属性的“操作模式” -> “智能从站通信”下,点击“新增”来创建传输区。

o    通常需要配置一致性数据块:

§  主站从站 (OUT): 主站发送给S7-1200的数据区。在S7-1200中,这被映射为输入(I)区

§  从站主站 (IN): S7-1200发送给主站的数据区。在S7-1200中,这被映射为输出(Q)区

o    例如,您可以创建一个长度为 10 个字节的输出区和 10 个字节的输入区。

4.    编译和下载

o    完成硬件组态后,编译并将硬件配置下载到S7-1200 PLC中。


第三步:编写S7-1200程序(代码示例)

假设我们按照上述步骤组态了:

·         主站发给从站(OUT: 10字节,映射到S7-1200的 IB100 到 IB109。

·         从站发给主站(IN: 10字节,映射到S7-1200的 QB100 到 QB109。

您的任务就是在S7-1200的程序中,去读写这些特定的地址,从而实现与主站的数据交换。

以下是一个简单的示例程序,通常写在 OB1(主循环组织块) 中:

javascript

复制

下载

// 示例:将主站发送来的第一个字节(控制字)存入全局数据块

// 假设有一个全局数据块"DB_DataExchange"

// “Control_Word_from_Master” DB_DataExchange 中的一个 Word 变量

// “Status_Word_to_Master” DB_DataExchange 中的另一个 Word 变量


// 1. 读取主站发送来的数据 (位于输入映像区)

#DB_DataExchange.Control_Word_from_Master := #IB100; // 读取主站发来的控制字(2字节)

#DB_DataExchange.Speed_Setpoint := #IW102;          // 读取主站发来的速度设定值(假设在IW102

#DB_DataExchange.Some_Byte := #IB104;               // 读取一个字节


// 2. 您的实际控制逻辑可以在这里处理这些数据

// 例如,根据控制字和速度设定值去控制一个驱动器

// ...


// 3. 准备要发送回主站的数据 (写入到输出映像区)

#QB100 := #DB_DataExchange.Status_Word_to_Master;  // 将状态字(2字节)发送给主站

#QW102 := #DB_DataExchange.Actual_Speed;           // 将实际速度值发送给主站

#QB104 := #DB_DataExchange.Some_Other_Byte;        // 发送一个字节


// 您也可以直接操作这些地址

// IF #IB100 = 16#01 THEN  // 如果主站发来的第一个字节等于1

//    #QB100 := 16#FF;     // 则给主站回应的第一个字节设置为255

// END_IF;

关键点说明:

·         IB100 / QB100 这些地址是在第二步的硬件组态中自定义的,您需要根据您的实际组态来修改这些地址。

·         数据交换是自动进行的,由CM 1243-5模块和PLC的背板总线自动完成,无需在程序中调用任何通信功能块。您要做的只是在程序中处理 I 区和 Q 区的数据。

·         对于长度超过4字节且需要一次性完整传输的数据(即“一致性”数据),建议使用GET和PUT指令,或者使用SFC14和SFC15的系统功能(在S7-1200中通过“程序扩展指令”->“分布式I/O”->DPRD_DAT和DPWR_DAT来访问),以避免数据在更新过程中被切割。对于简单的字节、字、双字操作,直接读写即可。


第四步:在对方主站中的配置

在对方品牌的主站编程软件(如ABB的软件)中,您需要:

1.    安装西门子S7-1200(CM 1243-5)的GSD文件。这个文件可以从西门子官网下载,搜索“CM 1243-5 GSD”即可找到。

2.    在硬件配置中,导入该GSD文件,并将S7-1200从站添加到Profibus网络中。

3.    设置与S7-1200中完全一致的站地址和传输速率。

4.    根据在TIA Portal中定义的接口区(10字节输入,10字节输出),在主站配置中定义对应的映射地址(例如,主站的QW10对应从站的IB100-IB109,主站的IW10对应从站的QB100-QB109)。

总结

整个过程的核心是硬件组态,代码反而相对简单。一旦硬件组态正确,通信链路就会自动建立,您的程序只需要处理映射好的输入/输出地址即可。

请务必注意站地址波特率在两端的设备上必须设置一致,否则通信无法建立。

希望这个详细的说明和代码示例能帮助您成功实现通信!

ChatGPT问答2023-05-11 10:26:03
答复内容:

ChatGPT问答2023-05-11 10:25:30
答复内容:以下是一个简单的西门子PLC 1200与其他品牌的DP通讯的示例代码,使用的是MPI通讯协议:

scss
MPI_Init(NULL, NULL);  
MPI_Comm_size(MPI_COMM_WORLD, &numProcs);  
MPI_Comm_rank(MPI_COMM_WORLD, &procNum);  
 &nbs
ChatGPT问答2023-05-11 10:24:47
答复内容:MPI_Init(NULL, NULL);  
MPI_Comm_size(MPI_COMM_WORLD, &numProcs);  
MPI_Comm_rank(MPI_COMM_WORLD, &procNum);  
  
if (procNum == 0) {  
    // 连接到西门子PLC
对不起,请登录后再发表评论!

触屏端
扫一扫手机也能发信息
明扬工控商城-工控网-工控自动化真品,一站式专业服务!