1,背景简介
应客户要求,我们需要设计一个烘箱,烘箱有四个仓,每个仓单独加热控制,PID调节温度。温度差别是+-0.5,硬件是S7-1200+西门子温度模块,以及必要的温度感应器。
温度控制这一块 除了PID参数自整定耗费一点时间外,其它部分的PLC程序非常简单。但是由于客户有其他的设备是PLC作为Server,上位机发特殊的指令给PLC,PLC根据
自定协议回复相应的信息。所以这篇文章主要讲的是:S7-1200做server,pc作为clilent去连接PLC,并发送自定义协议给PLC,PLC根据相应的自定义协议去回传相应的数据
2,硬件和协议
2.1 硬件设备
PLC:S71200,温度控制模块AI8-TC
2.2 自定义协议
协议0:上位机向PLC发送获取状态命令: ffcommand:state;#
PLC向上位机返回状态:
- 0-无料;1-正在高温固化;2-高温固化完成等待取料;3-设备停止状态
0;1;2;2;1;0;#
6个数字分别代表6个料仓当前状态
上位机解析字符串从第三个字节开始,前两个字节忽略。
- 上位机向PLC发送获取温度命令:
ffcommand:temperature;#
PLC向上位机返回状态:
94.5;95.0;94.8;94.7;94.6;95.0;#
6个数字分别代表6个料仓当前温度
上位机解析字符串从第三个字节开始,前两个字节忽略。
上位机向PLC发送开关门命令:
command:door;***;$$$;#
***—代表几号料仓,范围1-6
$$$—代表状态;0—关门,1开门
PLC回复上位机料仓门状态:
ffcommand:door;result:open;#
ffcommand:door;result:close;#
- 上位机向PLC发送获取仓门状态命令:
ffcommand:door_state;#
PLC回复上位机料仓门状态:
0-未知;1-仓门开;2-仓门关;
1;2;2;2;2;2;#
6个数字分别代表6个仓门当前状态
3,程序及步骤 3.1,使用到的指令
1.jpg,用来连接服务器指令
2.jpg 断开与服务器的链接
3.jpg 用来接受服务器发送来的数据,注意:该指令的ADHOC设为true,接受动态指令长度,应为各个指令的数据长度不一样
4.jpg 用来给服务器发送数据的指令
5.jpg 因为接收到的数据是字节数组,所以需要一个指令能把接收指令接收到的字节数组转换为字符串的指令
6.jpg,接受到数据后再对比是哪一个指令,然后做出对应的数据回传
6.1预先定义好的指令字符串常量
6.2,把接收数据和常量指令做对比,只截取部分
7.jpg 当然,接收到的数据是字节数组,那么发出去的也应该是字节数组,那么就需要一个连接字符的指令和把字符串转换成字节数组的指令
7.1 连接字符串
7.2把字符串转换成字节数组
以上这些只是大概步骤,具体的详细实现步骤请看程序