四川凉山彝族自治州西门子工控机(授权)总代理 西门子IPC一级经销商
3.编写轮询程序
所谓轮询就是依次询问,假设我们有3个设备作为modbus从站,从站地址(站号)依次为1,2,3,使用case语句依次对这3个设备进行读写操作,而读出和写入的数据分别存入3套不同的变量当中。
建立设备变量
使用一个结构体来描述一个设备的所有信息,包括5个状态字(states:Array[0..4] ofWord)和5个控制字(ctrl:Array[0..4] of Word),将结构体声明为数量为3的数组,存放3个设备的数据。
在整个循环开始前,设定起始设备地址,然后按照“读操作触发,读数据,读设备地址+1,延时,写数据,写操作触发,写设备地址+1,延时”的顺序持续循环,按照设备地址号选择上面的结构体变量:
读操作
iStep=0时,关闭读写触发,设定读写设备地址为1;
iStep=10时,读操作触发,模块发出读数据命令,模块置位busy信号;
iStep=11时,等待读操作完成,模块读到设备数据后会置位done信号,复位busy信号,根据信号状态将读到的数据(Read_Data)写入设备数据结构体(DeviceData.states),如果设备地址=1,则写入DeviceData[1].states,设备地址变化,写入的结构体也会相应的变化,保证不同设备的数据不会互相干涉。这里加一个判断,一段时间读不到数据返回10步骤重新进行读操作。
iStep=12时,用计数的方式做一个简单的延时功能,避免因读写频率太快导致设备反应不过来。