[西门子] 西门子MODBUS TCP通讯(下)

[复制链接]
查看86130 | 回复0 | 2024-3-11 07:49:26 | 显示全部楼层 |阅读模式
一、配方写入PLC

IF "1秤_配方使用".配方写入 = TRUE THEN

    "1_MODBUS TCP数据".MC1.MB_DATA_PTR[0] := "1秤_配方数据块".自动清零间隔;

    "1_MODBUS TCP数据".MC1.MB_DATA_PTR[1] := "1秤_配方数据块".运行判稳超时;

    "1_MODBUS TCP数据".MC1.MB_DATA_PTR[2] := "1秤_配方数据块".定值方式;

    "1_MODBUS TCP数据".MC2.MB_DATA_PTR[0] := "1秤_配方数据块".配方号;

    "1_MODBUS TCP数据".MC2.MB_DATA_PTR[1] := "1秤_配方数据块".目标值;

    "1_MODBUS TCP数据".MC2.MB_DATA_PTR[2] := "1秤_配方数据块".快加提前量;

    "1_MODBUS TCP数据".MC2.MB_DATA_PTR[3] := "1秤_配方数据块".中加提前量;

    "1_MODBUS TCP数据".MC2.MB_DATA_PTR[4] := "1秤_配方数据块".落差值;

    "1_MODBUS TCP数据".MC2.MB_DATA_PTR[5] := "1秤_配方数据块".零区值;

    "1_MODBUS TCP数据".MC3.MB_DATA_PTR[0] := "1秤_配方数据块".加料前延时;

    "1_MODBUS TCP数据".MC3.MB_DATA_PTR[1] := "1秤_配方数据块".快加禁判时间;

    "1_MODBUS TCP数据".MC3.MB_DATA_PTR[2] := "1秤_配方数据块".中加禁判时间;

    "1_MODBUS TCP数据".MC3.MB_DATA_PTR[3] := "1秤_配方数据块".慢加禁判时间;

    "1_MODBUS TCP数据".MC3.MB_DATA_PTR[4] := "1秤_配方数据块".定值保持时间;

    "1_MODBUS TCP数据".MC3.MB_DATA_PTR[5] := "1秤_配方数据块".夹袋后延时;

    "1_MODBUS TCP数据".MC3.MB_DATA_PTR[6] := "1秤_配方数据块".松袋前延时;

    "1_MODBUS TCP数据".MC3.MB_DATA_PTR[7] := "1秤_配方数据块".卸料延时;

    "1_MODBUS TCP数据".MC4.MB_DATA_PTR[0] := "1秤_配方数据块".加料关闭至慢加所需脉冲个数;

    "1_MODBUS TCP数据".MC5.MB_DATA_PTR[0] := "1秤_配方数据块".加料关闭至快加所需脉冲个数;

    "1_MODBUS TCP数据".MC6.MB_DATA_PTR[0] := "1秤_配方数据块".加料电机加速时间;

    "1_MODBUS TCP数据".MC6.MB_DATA_PTR[1] := "1秤_配方数据块".加料电机减速时间;

END_IF;

二、个别数据,点击写入数据时触发定时器,设定若干秒时间进行写入,平时更新该数据

"IEC_Timer_0_DB_130".TP(IN:="1秤_配方使用".配方写入,

                        PT:=#设定时间,

                        Q=>#脉冲输出,

                        ET=>#计时);

IF NOT "IEC_Timer_0_DB_130".Q THEN  

   "1_MODBUS TCP数据".MC2.MB_DATA_PTR[4] := "1_MODBUS TCP数据".MC8.MB_DATA_PTR[0];

ELSE

    "1_MODBUS TCP数据".MC2.MB_DATA_PTR[4] := "1秤_配方数据块".落差值;

  END_IF;

三、配方根据配方号进行保存

IF "1秤_配方使用".配方保存 = TRUE AND "1秤_配方使用".配方号 = 1 THEN

    "1秤_配方1" := "1秤_配方数据块" ;

END_IF;

IF "1秤_配方使用".配方保存 = TRUE AND "1秤_配方使用".配方号 = 2 THEN

    "1秤_配方2" := "1秤_配方数据块" ;

END_IF;

IF "1秤_配方使用".配方保存 = TRUE AND "1秤_配方使用".配方号 = 3 THEN

    "1秤_配方3" := "1秤_配方数据块" ;

END_IF;

IF "1秤_配方使用".配方保存 = TRUE AND "1秤_配方使用".配方号 = 4 THEN

    "1秤_配方4" := "1秤_配方数据块" ;

END_IF;

IF "1秤_配方使用".配方保存 = TRUE AND "1秤_配方使用".配方号 = 5 THEN

    "1秤_配方5" := "1秤_配方数据块";

END_IF;

IF "1秤_配方使用".配方保存 = TRUE AND "1秤_配方使用".配方号 = 6 THEN

    "1秤_配方6" := "1秤_配方数据块" ;

END_IF;

IF "1秤_配方使用".配方保存 = TRUE AND "1秤_配方使用".配方号 = 7 THEN

    "1秤_配方7" := "1秤_配方数据块" ;

END_IF;

IF "1秤_配方使用".配方保存 = TRUE AND "1秤_配方使用".配方号 = 8 THEN

    "1秤_配方8" := "1秤_配方数据块" ;

END_IF;

IF "1秤_配方使用".配方保存 = TRUE AND "1秤_配方使用".配方号 = 9 THEN

    "1秤_配方9" := "1秤_配方数据块" ;

END_IF;

IF "1秤_配方使用".配方保存 = TRUE AND "1秤_配方使用".配方号 = 10 THEN

    "1秤_配方10" := "1秤_配方数据块" ;

END_IF;

四、配方根据配方号进行写入

IF "1秤_配方使用".配方读取 = TRUE AND "1秤_配方使用".配方号 = 1 THEN

    "1秤_配方数据块" := "1秤_配方1" ;

END_IF;

IF "1秤_配方使用".配方读取 = TRUE AND "1秤_配方使用".配方号 = 2 THEN

    "1秤_配方数据块" := "1秤_配方2" ;

END_IF;

IF "1秤_配方使用".配方读取 = TRUE AND "1秤_配方使用".配方号 = 3 THEN

    "1秤_配方数据块" := "1秤_配方3" ;

END_IF;

IF "1秤_配方使用".配方读取 = TRUE AND "1秤_配方使用".配方号 = 4 THEN

    "1秤_配方数据块" := "1秤_配方4" ;

END_IF;

IF "1秤_配方使用".配方读取 = TRUE AND "1秤_配方使用".配方号 = 5 THEN

    "1秤_配方数据块" := "1秤_配方5" ;

END_IF;

IF "1秤_配方使用".配方读取 = TRUE AND "1秤_配方使用".配方号 = 6 THEN

    "1秤_配方数据块" := "1秤_配方6";

END_IF;

IF "1秤_配方使用".配方读取 = TRUE AND "1秤_配方使用".配方号 = 7 THEN

    "1秤_配方数据块" := "1秤_配方7" ;

END_IF;

IF "1秤_配方使用".配方读取 = TRUE AND "1秤_配方使用".配方号 = 8 THEN

    "1秤_配方数据块" := "1秤_配方8" ;

END_IF;

IF "1秤_配方使用".配方读取 = TRUE AND "1秤_配方使用".配方号 = 9 THEN

    "1秤_配方数据块" := "1秤_配方9" ;

END_IF;

IF "1秤_配方使用".配方读取 = TRUE AND "1秤_配方使用".配方号 = 10 THEN

    "1秤_配方数据块" := "1秤_配方10" ;

END_IF;

写配方数据DB块时,注意数据格式及数据命名是一样的,相同的DB块数据类型,可以使用UDT数据类型(这个本人一开始每想到,简练的DB块都是复制粘贴,如果添加一个数据或减少一个数据,那么相关DB块都用更改,很玛法)。

以上知识是个人在书本学习或在实践中学习到的,为了后续查找,故此在公众号分享。喜欢此类知识分享的朋友可以关注,谢谢。
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则