西门子1215与1212项目实战分享
西门子1215与1212做的程序,成功项目,一个程序包含modbus rtu通讯,与库卡C2机器人的profibus通讯,两个1200之间的S7通讯,与威纶通触摸屏的以太网通讯,包含变频器控制,伺服控制(伺服功能块本人将PTO控制常用指令集成在一个FB块里),使用4个台达伺服和2个步进,仅供各位参考最近完成了一个基于西门子1215与1212的超有趣项目,跟大家分享下其中的技术要点和实现过程,希望对
西门子1215与1212做的程序,成功项目,一个程序包含modbus rtu通讯,与库卡C2机器人的profibus通讯,两个1200之间的S7通讯,与威纶通触摸屏的以太网通讯,包含变频器控制,伺服控制(伺服功能块本人将PTO控制常用指令集成在一个FB块里),使用4个台达伺服和2个步进,仅供各位参考

最近完成了一个基于西门子1215与1212的超有趣项目,跟大家分享下其中的技术要点和实现过程,希望对各位有所帮助。
一、通讯架构
1. Modbus RTU通讯
Modbus RTU是一种在工业领域广泛应用的串行通讯协议。在西门子1200系列PLC中实现它,需要调用相应的库函数。以下是简单的代码示例(以TIA Portal编程环境为例):
// 定义Modbus RTU通讯相关变量
VAR
mb_master : "MB_MASTER";
mb_slave_address : USINT := 1;
mb_req : BOOL := FALSE;
mb_addr : UINT := 40001;
mb_len : UINT := 10;
mb_data : ARRAY[0..9] OF INT;
END_VAR
// 调用Modbus主站功能块
mb_master(
REQ := mb_req,
MB_ADDR := mb_slave_address,
MB_MODE := 1,
ADDR := mb_addr,
LEN := mb_len,
DATA_PTR := PWR_TO_DWORD(mb_data),
DONE => done_mb,
ERROR => error_mb,
STATUS => status_mb
);
在这段代码中,我们先定义了Modbus主站功能块 mbmaster 以及相关的参数,如从站地址 mbslaveaddress,请求标志 mbreq,寄存器地址 mbaddr 和读取长度 mblen 等。然后调用 mbmaster 功能块,根据不同的返回值,如 donemb 表示通讯完成,errormb 表示通讯出错,statusmb 包含具体状态信息,来处理后续逻辑。
2. 与库卡C2机器人的Profibus通讯
Profibus是一种用于自动化系统的现场总线标准,用于与库卡C2机器人通讯时,要先配置好硬件连接,确保PLC与机器人都能识别彼此。在软件编程上,配置Profibus从站设备的GSD文件是关键步骤。以库卡机器人为例,在TIA Portal中导入其对应的GSD文件后,就可以像配置其他I/O模块一样配置机器人的通讯接口。
// 读取库卡机器人的输入数据
VAR
kuka_inputs : ARRAY[0..15] OF BOOL;
BEGIN
kuka_inputs := P#DB1.DBX0.0 BOOL 16; // 假设库卡机器人输入数据映射到DB1.DBX0.0开始的16个位
END
这里通过简单的数组赋值,将库卡机器人输入数据映射到我们定义的数组 kuka_inputs 中,方便后续程序逻辑使用。
3. 两个1200之间的S7通讯
S7通讯是西门子PLC之间常用的通讯方式,分为单边通讯和双边通讯。在本项目中,采用单边通讯方式。

西门子1215与1212做的程序,成功项目,一个程序包含modbus rtu通讯,与库卡C2机器人的profibus通讯,两个1200之间的S7通讯,与威纶通触摸屏的以太网通讯,包含变频器控制,伺服控制(伺服功能块本人将PTO控制常用指令集成在一个FB块里),使用4个台达伺服和2个步进,仅供各位参考

主站端代码:
// 定义S7通讯连接
VAR
tsend_c : "TSEND_C";
connection_id : UINT := 1;
partner_ip : ARRAY[0..3] OF USINT := [192, 168, 0, 10]; // 从站IP地址
send_data : ARRAY[0..9] OF INT;
BEGIN
tsend_c(
CONNECT := TRUE,
ID := connection_id,
ADDR := PWR_TO_DWORD(partner_ip),
DATA := PWR_TO_DWORD(send_data),
REQ := TRUE,
DONE => done_send,
ERROR => error_send,
STATUS => status_send
);
END
从站端代码:
// 定义S7通讯连接
VAR
trcv_c : "TRCV_C";
connection_id : UINT := 1;
receive_data : ARRAY[0..9] OF INT;
BEGIN
trcv_c(
CONNECT := TRUE,
ID := connection_id,
DATA := PWR_TO_DWORD(receive_data),
NDR => ndr_receive,
ERROR => error_receive,
STATUS => status_receive
);
END
主站通过 TSENDC 功能块向从站发送数据,从站通过 TRCVC 功能块接收数据。CONNECT 用于建立连接,REQ 触发发送,NDR 表示有新数据到达。
4. 与威纶通触摸屏的以太网通讯
以太网通讯是实现PLC与触摸屏数据交互的常用手段。威纶通触摸屏配置相对简单,在触摸屏软件中设置好PLC的IP地址,数据地址对应关系后,PLC这边无需太多额外编程。但为了更好地展示数据交互,假设我们要向触摸屏发送一个实时数据。
// 定义要发送给触摸屏的数据
VAR
touchscreen_data : INT := 0;
BEGIN
touchscreen_data := Get_System_Value(); // 假设Get_System_Value()函数获取系统某个实时值
END
触摸屏通过读取PLC中对应的地址,就能实时获取 touchscreen_data 的值并显示。
二、运动控制
1. 变频器控制
变频器控制一般通过模拟量输出或通讯方式实现。以模拟量输出为例,通过PLC的模拟量模块输出一个对应频率的电压或电流信号给变频器。
// 定义模拟量输出变量
VAR
analog_output : REAL := 0.0;
frequency : REAL := 50.0; // 设定频率
BEGIN
analog_output := frequency / 50.0 * 27648.0; // 将频率值转换为模拟量输出值(假设0 - 50Hz对应0 - 27648)
"AQW0".VALUE := INT(analog_output); // 假设模拟量输出通道为AQW0
END
这里先将设定频率转换为模拟量模块能识别的数值,然后输出到对应的模拟量通道。
2. 伺服控制
伺服控制在本项目中至关重要。我将PTO(脉冲串输出)控制常用指令集成在一个FB块里,方便复用。
// FB块接口定义
INTERFACE
VAR_INPUT
enable : BOOL;
position : DINT;
velocity : DINT;
END_VAR
VAR_OUTPUT
done : BOOL;
error : BOOL;
END_VAR
END_INTERFACE
// FB块内部逻辑
VAR
pto_ctrl : "PTO_CTRL";
BEGIN
pto_ctrl(
ENABLE := enable,
POSITION := position,
VELOCITY := velocity,
DONE => done,
ERROR => error
);
END
在主程序中调用这个FB块时,只需传入相应的使能信号 enable,目标位置 position 和速度 velocity 等参数,就能轻松实现伺服电机的运动控制。
3. 台达伺服和步进电机控制
对于4个台达伺服和2个步进电机,同样是基于上述的PTO控制原理。只不过在参数设置和具体指令细节上,要根据不同品牌和型号做相应调整。比如台达伺服可能需要特定的通讯协议或控制字设置,步进电机则要考虑细分等参数。

通过这次项目,深刻体会到西门子1200系列PLC在工业自动化项目中的强大功能和灵活性。希望这些分享能给大家带来一些启发和帮助,欢迎一起交流讨论。


DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)