Windows下快递投递柜、寄存柜的软件初探

最近又有人再询问快递柜软件开发的事情。闲来没事就琢磨琢磨。先了解下快递柜电子部分的组成。
Windows下快递投递柜、寄存柜的软件初探

硬件的简略功能是主控机通过显示触摸屏和外部交互,通过监控抓取和录制图像,通过网络模块和服务器通讯,通过锁控板来开锁和检测锁开关状态。
 

现在主要是主控机的软件,主控机可以为工业主板运行windows或其他操作系统。
软件主要功能如下:
一、用户端口
1、快递寄件2、快递取件 3、个人中心

二、快递员端口
1、快递存件 2、快递取件

三、管理端口
 
  看起来不算复杂。不过硬件部分的锁控板以前没有用过,就丛网上搜了下,资料不多。在电商平台搜了下,有些厂家卖这东西。看了介绍,基本上都是通过串口发送命令,锁控板就开锁或者查询锁的开合情况,也有是通过网口给锁控板发送指令的,但形式都差不多。网口的价格要高点。

 
下面研究下这个锁控板的驱动编程。
  串口收发数据,前几年弄过,采集一个仪表数据到计算机。记得当时用Vb开发,界面很好设计,串口通讯用的是一个控件mscomm。只需要设置好参数,打开串口,就可以收发数据,根据协议分析数据,不用时关闭串口就可以了。在MFC中没有用过串口通讯。先看看锁控板。经过比较选了这种锁控板。
Windows下快递投递柜、寄存柜的软件初探
型号还算全,8、12、16、20、24门的都有。某宝链接https://item.taobao.com/item.htm?id=581917013199
 
通过串口通讯开锁和查询锁状态。在网上搜了有关VS 串口通讯的有关文章。方法也有多种,有通过ActiveX控件通讯,有调用Windows的API函数封装类来操作。调用Windows的API函数封装类的方法比较灵活,结合网上别人的代码比较方便。再来看锁控板的指令形式,可以简化为发送一串十六进制的数据,格式如下
Windows下快递投递柜、寄存柜的软件初探

  这里说的锁控板地址一般为1。多块的时候,硬件可以通过拨码开关设置为其它值2,3等,这里填入N就是对硬件设置为N的电路板发送指令。锁编号是锁控板上锁的通道号,填入M就开M号锁,数据最后两字节是校验。这样就明确了,通过《锁控板地址》区分不同的板,再通过《锁编号》区分和锁板连接的不同锁。这样的话如果是60门的柜子,用5块12门的锁控板,发送指令就容易了,先确定门锁连接的板子的编号,再定锁连接的板子上的编号,填入数据到上面格式的数据帧中,计算校验后更新校验数据,通过串口发送出去,对应门就开了。

 
 
使用VS2010 MFC编程,采用按钮控件组的方法,视图如下
Windows下快递投递柜、寄存柜的软件初探

 
代码如下

void CrockdemoDlg::OnButton(UINT   nID)
{
    DWORD rtlen;
    BOOL fright=TRUE;
    UINT CrcCheck,temp1;
    BYTE rbuf[100]={0};
    BYTE sbuf[] = {0xAA,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x0A};
    if(f_common)
    {
        UpdateData(TRUE);
        sbuf[1]=setadd;//锁控板的地址
        sbuf[3]=nID-IDC_BUTTON1+1; //开锁控板的第几个锁
        CrcCheck=Crc16(sbuf,7);
        sbuf[7]=BYTE(CrcCheck%256);
        sbuf[8]=BYTE(CrcCheck/256);
        serial.SendData(sbuf,9);
    }
    else
    {   
    MessageBox(_T("数据接收错误,请检查线有没连接好"),_T("提示"), MB_OK); 
    }

}

经过测试能顺利的开锁。经过上面试验,已了解锁控板的驱动,整个软件开发也更心里有数。
 
关于串口通讯,网上有些资料不错,可以参考下

Windows 串口通信简单示例
https://blog.csdn.net/horizons_kong/article/details/54412339

VC++实现串口通信的应用程序设计
https://blog.csdn.net/crjmail/article/details/91043991

  

好了今天先写到这里。

猜你喜欢

转载自blog.51cto.com/14612907/2547370