最近在设计一款标准控制箱产品,控制箱的控制器选用的是200Smart,多个控制箱可以通过以太网的方式连接1200或1500主站实现设备连锁控制。控制箱与1500 主站的通讯方式有的客户喜欢使用Put/Get方式,主站编程灵活性较高;有的客户喜欢使用Profinet智能从站的方式,通讯速率快并且连接数量不受S7通讯连接数线制。因为是标准产品,不想每次都根据客户喜好更改通讯配置,最好能同时支持两种通讯方式。但是Put/Get通讯的地址要求映射V区,PN通讯的地址要求映射I和Q区,接收主站命令的时候就需要判断哪个命令有效。为了解决这个问题我使用心跳检测方式判断PN通讯是否正常,如果PN通讯正常则优先选择PN通讯方式,并把接收数据move给V区,如果不使用PN通讯方式则使用Put/Get通讯直接赋值到V区,编程时只使用V区变量,具体做法如下:
1、在200Smart子站里按照同样的结构设置PN通讯和Put/Get通讯地址区,第一个bool量为通讯心跳信号,使用Clock_1Hz秒方波信号作为心跳源。

2、在子站编程判断PN通讯输入的心跳信号是否周期变化,如果大于5秒不变化则判断PN通讯异常或者未使用,如果PN通讯输入心跳正常则将PN输入数据同步到V区。

3、在博图中导入从站GSD文件,配置模拟主站及智能从站和通讯地址。

4、主站将Clock_1Hz秒方波信号输出至PN从站作为通讯心跳源,如果PN通讯断开或者PN没有使用则从站接收不到PN心跳,从而可以方便区分PN通讯是否在用。

通过以上方法,从站可以自动判断远程主站的通讯方式,当PN通讯有效时默认优先使用PN通讯数据,当PN通讯失效或者未使用时自动转为Put/Get通讯方式。参考这种方法还可以实现两种方式的冗余备份通讯或者双通道通讯,希望对大家能有帮助。