在实际生活中,有很多不能完成的工作,一般会交给各种控制系统,例如交通红绿灯。
人们并不能实时监督,所以体现出了控制系统的重要性。
本项目设计了四种大棚,分别为植物大棚、鸟禽大棚、畜牧大棚、水产大棚
其中人机交互界面为现场触摸屏,用于现场实时查看数据
智能终端ui界面为管理员控制界面,可以远程查看大棚数据和修改预设值
植物大棚需要采集光照,鸟禽大棚需要采集温湿度和烟雾值,畜牧大棚需要采集温湿度和烟雾状态,水产大棚需要采集水温
四个继电器作为中间继电器,连接不存在的四个报警灯
当植物大棚内光照值小于预设值时,植物大棚报警灯打开
当鸟禽大棚内温度大于预设值或者湿度大于预设值或者烟雾大于预设值,鸟禽大棚报警灯打开
畜牧大棚、水产大棚同理
四个按钮指示灯分别代表四个大棚,按下按钮即可在人机交互界面中切换至对应大棚
再次按下即可将该大棚的数据采集至历史数据表格中,当有第一个按钮与最后一个按钮同时按下时,即可切换会主界面
一、设备选型
1.西门子PLC(S7-200 SMART)
2.威纶通触摸屏(TK8071IP)
3.数字量5入5出模块(ETH-MODBUS-IO5R)
4.开关量模块:
4只指示灯
4只按钮
4只继电器
5.采集模块:
485型温湿度变送器
485型烟感火灾探测报警器
模拟量型光照变送器(0-5V)
CAN 总线导轨式温湿度传感器(SM1810C)





热电偶
6.树莓派(Raspberry PI400)*注:其他的终端也行,例如电脑
7.TP-Link路由器
8.5口导轨式交换机
9.端子排(样式自选)
二、线路设计
一套完善的通信控制系统是十分复杂的,需要熟悉各个模块的作用以及在不同的通信方式之间建立连接,因此,我们应该先绘制拓扑图和接线图,才能进入下一步。
通信拓扑图
PLC、触摸屏、按钮、指示灯接线图
详解: 指示灯一端接地,另一端接在PLC的地址位上,可以实现当PLC发出指令时,指示灯跟随指令改变;同理,按钮需要一端接在电源上,另一端接在PLC上,可实现当按钮按下时,PLC实时监测按钮状态。
采集区接线图
详解:根据拓扑图将所有485通信的模块建立485总线,将所有CAN通信的模块建立CAN总线
再根据拓扑图将所有直连模块连接即可。
中间继电器电路图
中间继电器触点
按钮控制继电器闭合控制负载
三、地址配置
在这套系统中,拥有两种总线,分别是485总线和CAN总线
485总线采用标准modbus协议,因此需要为每个485通信的模块配置地址
模块 | 地址 |
485型温湿度变送器 | 0x01 |
模拟量转485(0-5V) | 0x02 |
模拟量转485(0-10V) | 0x03 |
485型烟感火灾探测报警器 | 0x04 |
另一条总线为CAN总线,需要配置帧ID与波特率,但是两个模块的帧ID并不相同,因此帧ID可以不用配置
SM1810C的波特率配置方法如下:
更改设备速率
可以用主站通过命令重新设置设备速率,速率编号值范围为1~11。重新设置节点号后,速率立即生效。因通讯都为十六进制格式,表格里的速率编号都为16进制格式。
速率值 | 实际速率 | 速率值 | 实际速率 |
1 | 10kbps(未用) | 2 | 20kbps |
3 | 25kbps(未用) | 4 | 40kbps |
5 | 50kbps | 6 | 100kbps |
7 | 125kbps | 8 | 200kbps |
9 | 250kbps | A | 400kbps |
B | 500kbps | C | 1M |
不在上述范围的速率,暂不支持,若有特殊需求,可订制。比如设备速率为50k,根据上表,编号为05,要将速率更改为40k,40k的编号为04,则操作的通讯报文如下:01 06 0A 05 00 04,如下图所示。
PCTA-4018波特率配置需要拨动模块上的拨码开关,配置如下:
拨码开关 | ADR0 | ADR1 | ADR2 | ADR3 | ADR4 | ADR5 | ADR6 |
ON | 1 | 2 | 4 | 8 | 16 | 32 | 32 |
OFF | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
DR0 | DR1 | DR2 | CAN波特率 | 最大通信距离 |
OFF | OFF | OFF | 1Mbps | 25m |
ON | OFF | OFF | 800Kbps | 50m |
OFF | ON | OFF | 500Kbps | 100m |
ON | ON | OFF | 250Kbps | 250m |
OFF | OFF | ON | 125Kbps | 500m |
ON | OFF | ON | 50Kbps | 1000m |
OFF | ON | ON | 20Kbps | 2500m |
ON | ON | ON | 10Kbps | 5000m |
根据上述表格,进行CAN总线配置,配置如下
模块 | 帧ID | 波特率 |
SM1810C | 0x00000001 | 500Kbps |
PCTA-4018 | 0x00000601 | 500Kbps |
*注:PCTA-4018帧ID下面会解释,SM1810C帧ID默认为0x00000001
四、协议解读
1.485型温湿度变送器
地址码 | 功能码 | 起始地址 | 数据长度 | 校验位_L | 校验位_H |
0x01 | 0x03 | 0x00 , 0x00 | 0x00 , 0x02 | 0xC4 | 0x0B |
地址码 | 功能码 | 有效字节数 | 湿度 | 温度 | 校验位_L | 校验位_H |
0x01 | 0x03 | 0x04 | 0xSh,0xSl | 0xWh,0xWl | ** | ** |
例如获取的湿度值为 0x02 0x92,那么换算成10进制就是658,
所以湿度=292H=>658=>65.8%RH,温度同理
2.模拟量转485模块(0-5V)
地址码 | 功能码 | 起始地址 | 数据长度 | 校验位_L | 校验位_H |
0x02 | 0x03 | 0x00 , 0x00 | 0x00 , 0x02 | 0xC4 | 0x38 |
地址码 | 功能码 | 有效字节数 | 数据1 | 数据2 | 校验位_L | 校验位_H |
0x02 | 0x03 | 0x04 | 0xLh,0xLl | 0x00,0x00 | ** | ** |
例如获取的光照模拟量为 0x00 0x3C
那么获得的模拟量为3C H=>60
除以量程4096可得电压(V) 60/4096=0.0146484375
最终光照值=电压(mV)*13.107 0.0146484375*1000*13.170 ≈ 192 Lux
3.模拟量转485模块(0-10V)
地址码 | 功能码 | 起始地址 | 数据长度 | 校验位_L | 校验位_H |
0x03 | 0x03 | 0x00 , 0x00 | 0x00 , 0x02 | 0xC5 | 0x38 |
地址码 | 功能码 | 有效字节数 | 数据1 | 数据2 | 校验位_L | 校验位_H |
0x03 | 0x03 | 0x04 | 0xYh,0xYl | 0x00,0x00 | ** | ** |
为节省时间,烟雾只求电压值,通过判断电压的大小来开启或关闭报警灯
电压求法同上
烟雾ppm求法
4.485型烟感火灾探测报警器
地址码 | 功能码 | 起始地址 | 数据长度 | 校验位_L | 校验位_H |
0x04 | 0x03 | 0x00 , 0x10 | 0x00 , 0x01 | 0x85 | 0x9A |
地址码 | 功能码 | 有效字节数 | 数据1 | 烟雾状态 | 校验位_L | 校验位_H |
0x04 | 0x03 | 0x02 | 0x00,0x00,0x00 | 0x00 无烟雾 0x01 有烟雾 | ** | ** |
5.SM1810C(CAN温湿度采集器)
*若从CAN总线转换至485总线,DLC、帧ID和末尾保留需补位
地址码 | 功能码 | 起始地址 | 数据长度 |
0x03 | 0x03 | 0x00 , 0x00 | 0x00 , 0x02 |
0xDLC | 帧ID | 地址码 | 功能码 | 起始地址 | 数据长度 | 保留位 |
0x06 | 0x00000001 | 0x01 | 0x03 | 0x00 , 0x00 | 0x00 , 0x02 | 0x00 , 0x00 |
0xDLC | 帧ID | 地址码 | 功能码 | 有效字节数 | 温度 | 湿度 | 保留 |
0x07 | 0x00000001 | 0x01 | 0x03 | 0x04 | 0xWh,0xWl | 0xSh,0xSl | 0x00,0x00 |
例如收到温度为 0x08 0xAD
则实际温度=8AD H => 2221 => 22.1 ℃
6.PCTA-4018(8路模拟量采集器)
如果成功,服务器的应答如下
例如模块地址拨码拨至0x01,那么发送协议的帧ID需+600,因此,模块准确的帧ID是0x06 0x01
因为PCTA-4018模块使用的是CANopen协议,因此需要借助CAN分析仪来解析他的协议
详情请见8路热电偶采集,Can协议,通道独立设置 (bjpct.com.cn)
0XDLC | 帧ID | 固定 | Index_L | Index_H | 采集口 | 固定 | 保留 |
0x06 | 0x00000601 | 0x40 | 0x30 | 0x71 | 0x02 | 0x00,0x00 | 0x00,0x00 |
0xDLC | 帧ID | 固定 | Index_L | Index_H | 采集口 | 温度 | 固定 | 保留 |
0x08 | 0x00000581 | 0x4B | 0x30 | 0x71 | 0x02 | 0xWl,0xWh | 0x00,0x00 | 0x00,0x00 |
例如获取的温度为0xF0 0x00
则实际温度为 00F0 H => 240 => 24.0℃
******************************************************注释***************************************************
0xDLC值=帧ID后面有多少个字节
例如PCTA-4018的DLC值包括固定值、index_L、Index_H、采集口、固定。一共6字节,最后的两位为协议保留位
Index值为对象字典,在PCTA-4018的使用手册中有所收录,0x7130为采集通道数据的索引,采集口是热电偶所接入的通道口
五、智能终端数据采集
1.数据采集
运用node-red的节点控制以及dashboard节点的网页显示,可以便捷的访问和维护系统
在树莓派终端中输入node-red并打开路由器输入127.0.0.1:1880即可进入node-red界面
或者与电脑连接至同一局域网,然后输入"树莓派IP":1880即可在电脑进入树莓派的node-red界面
首先,要把刚刚整理的协议全发出去,要注意发送的时间间隔,不然会导致数据丢失。
请求协议数据流
请求协议
2.数据处理
然后在dashboard栏中创建一个tab,然后在tab中创建7个group,并依次为这些group命名为"主界面","报警界面","设置","植物类","鸟禽类","畜牧类","水产类"。
紧接着就是数据处理部分,通过前文的接收协议分析、模块模拟量数据分析,进而获取各个大棚的数据,一定要进行数据调整,否则数据乱流会扰乱真实数据。
数据处理流
数据处理1
数据处理2
数据调整
3.页面处理
然后是页面处理部分,因为要接收PLC传来的实时按钮状态,因此,需要对PLC的数据进行判断并且将处理完成的数据以二进制流的形式返回至PLC,实现PLC与node-red的数据共享
页面控制流
页面控制方法
*hide表示隐藏该group,show表示显示该group。
PLC数据发送
PLC发送协议
*通过拆除高低位的方式发送给PLC做下一步运算
4.报警判断
通过对比采集数据与设定值,来判断是否打开报警灯
报警灯判断流
判断函数
5.预设值设置区
各数据设置流
数据保存函数
6.node-red dashboard-ui界面
至此,node-red界面部署完毕,配置好485转wifi模块和CAN转485模块,连上路由器即可采集到数据,这是各个界面
主界面
报警界面
设置界面
植物大棚
鸟禽大棚
畜牧大棚
水产大棚
由于预设值全是0,因此各个报警灯会因为判断函数而点亮
六、PLC与人机交互界面编程
1.PLC编程
首先建立node-red的tcp通信和数字量5入5出(ETH-MODBUS-IO5R)的tcp通信
使用PLC自带的TCP通信块,再稍微配置即可
node-red通信
数字量5入5出通信(ETH-MODBUS-IO5R)
*因为LAD图不能截全,因此截取FBD图。
接下来就是按钮控制人机交互界面跳转以及控制node-redUI界面跳转,要求第一次按下按钮时,跳转至对应的大棚数据界面,再次按下按钮即可将该大棚采集的数据存入人机交互界面的历史数据表格,同时,对应指示灯闪烁3s
数据采集设计
*本设计只运用了字节位移块,原理如下
指示灯工作原理
最后便是数据处理部分,将从node-red获取的数据进行数据处理,因为PLC独特的地址结构,就可以直接将拆分好的高低字节组装成一个字的数据,如图所示
高低位组合
数据处理
最后判断预设值与采集数据,是否启用报警灯
报警判断
2.人机交互界面部署
人机交互界面部署在现场,由现场工作人员进行监视。PLC获得的数据通过交换机发送至人机交互界面,以实时获取数据。首先需要在easybuilder中配置好PLC的参数
配置界面
*IP地址一定是在同一网段上的不同地址中,例如192.168.1.101,192.168.1.102,端口号102
主界面包含各个大棚的数据,设置按钮只能由现场管理员进入
主界面设计
登录界面设计
登录设计原理
登录功能演示
设置界面设计
在人机交互界面中也应该遵循这按下按钮切换至对应页面,使用在PLC中的VB1寄存器来实时切换页面
页面切换设计
在现场控制中,按第二次按钮后会将数据储存至历史数据表格中,而人机交互界面的历史数据需要先资料取样,才能存储
资料取样1
资料取样2
历史数据表格
然后设计4各大棚的数据界面
植物类
鸟禽类
畜牧类
水产类
页面切换演示
至此,全部功能已经完善