本人将MODBUS命令操作总结为以下几步:
1 确定帧内容:一帧的内容包含命令帧与响应帧两部分,需要明确命令帧与响应帧中的各个字节的内容。
For example:在这个例子中,想通过MODBUS传送一个关于温度的消息帧,帧内容如表1所示:
表1 一帧数据的内容
2 定义一个存放帧内容的数组:数组的长度要大于帧内容的长度。比如g_pucModbusMsgFrame[50]。
3 用数组来表示帧内容:根据表1得:
g_pucModbusMsgFrame[0]=0x01;
g_pucModbusMsgFrame[1]=71;
g_pucModbusMsgFrame[3]=低点温度的16进制高2位;
g_pucModbusMsgFrame[4]=低点温度的16进制低2位;
g_pucModbusMsgFrame[5]=高点温度的16进制高2位;
g_pucModbusMsgFrame[6]=高点温度的16进制低2位;
以此类推。
值得注意的是,在这个例子中,命令帧与相应帧在数组中的表示是独立的,即g_pucModbusMsgFrame[7]表示完命令帧后就结束,再要表示相应帧的第一个字节,又从g_pucModbusMsgFrame[0]=0开始。
4 将命令帧中的高点温度与低点温度内容赋值给一个变量,比如一个名为g_dwLowTempCaliPower和g_dwHighTempCaliPower的变量:
在这里,make16()这个函数是将数据的高八位与低8位连接起来表示一个完整的温度数据。
结合3可以看出,将用来表示帧内容的g_pucModbusMsgFrame[]数组中存放温度内容的数取出即可,经过make16()表示成完整的高点温度与低点温度,赋值给表示高点温度g_dwHighTempCaliPower与低点温度g_dwLowTempCaliPower这两个变量。
5 将变量写入或读出存储器。