MODBUS通讯上了,目前实现如下功能:
- //检查站号
- if(mb_rsp16_adu.StationNumber == MODBUS_STATION_NUMBER_DEFAULT)
- {
- //检查命令
- if(mb_rsp16_adu.cmd == 16)
- {
- //检查数量
- tmp16 = ((u16)mb_rsp16_adu.WriteLen[0]<<8) | mb_rsp16_adu.WriteLen[1];
- if((tmp16 << 1) == mb_rsp16_adu.Bytelen)
- {
- //检查crc
- tmp16 = ((u16)mb_rsp16_adu.crc[1]<<8) | mb_rsp16_adu.crc[0];
- if(tmp16 == CRC16_calculation((u8*)&mb_rsp16_adu,sizeof(mb_rsp16_adu)-2))
- {
- switch(((u16)mb_rsp16_adu.WriteAddr[0]<<8) | mb_rsp16_adu.WriteAddr[1])
- {
- case 0: //清屏
- HUB08_ClearScreen(mb_rsp16_adu.data[0][0],mb_rsp16_adu.data[0][1]);
- break;
- case 10000: //第一行字符串
- memcpy(HUB08Data.string[0].str,mb_rsp16_adu.data[0],mb_rsp16_adu.Bytelen);
- HUB08_StringToBuf(0);
- break;
- case 20000: //第二行字符串
- memcpy(HUB08Data.string[1].str,mb_rsp16_adu.data[0],mb_rsp16_adu.Bytelen);
- HUB08_StringToBuf(1);
- break;
- case 30000: //开关、亮度等系统设置
- HUB08Data.DisplaySwitch = mb_rsp16_adu.data[0][0]?1:0; //显示屏开关
- HUB08Data.brightness = mb_rsp16_adu.data[0][1]; //亮度
- break;
- default:
- break;
- }
- }
- }
- }
- }
用起来感觉越来越方便了,串口直接发送字符串,不过还有一些细节功能要慢慢完善,比如字体设置,颜色设置等等,,甚至动画效果。。
|