项目的基本结构如图:
设备有两个柜子,现场控制柜和中控室控制柜
仪表和它下面的HMI在现场柜里面,SMART 200PLC和它下面的HMI在中控室
我现在采用如图的方法,仪表和HMI之间通过232连接走rtu通信,仪表和smart200之间通过485连接走rtu通信,smart和hmi之间走profinet连接。
要达到的目的就是不管在现场还是中控室的HMI更改数据,两边的HMI上数据同时更改,并且更改的数据存储进仪表的EEPROM里面。
我现在程序里在SMART200里面开辟了4个存储区域 VW100-VW200 VW300-VW400 VW500-VW600 VW700-VW800
VW100-VW200用来存储smart200从仪表读过来的所有参数
vw300-vw400存储上一次vw100-vw200的值,用来比较vw100-vw200数据是否发生变化,它们之间是一一对应的关系,比如说本次从仪表读过来的数据VW100发生变化(现场触摸屏更改),那么它和存储它上次数据的VW300必然不想等,然后我通过比较指令判断到这个条件之后,就将vw300,vw500,vw700都刷新成最新的vw100的值。
Vw700-vw800用来和它之间的HMI通信的数据区。
VW500-VW600的作用和vw300-vw400类似,也是用来储存vw700-vw800上一次的数据,当vw700的数据变化(中控HMI更改),它和vw500储存的数据不一致,然后通过比较指令判断到这个条件之后,调用modbus主站指令将数据发送仪表,仪表对最新的数据进行存储,现场的HMI也会显示最新的数据。
上面就是现在运用的方法,运行起来也没有什么问题,就是程序太乱了,读写几个数据通过这种方法也还可以,但是当数据多了之后,就要写很多这样的比较指令,程序就会显的很杂乱。
请问有没有好的算法,来简化程序。
贴一小段程序:
标识和上面的代码可能不太对的上,不过就是这个意思了