最近给驾校做一个考场安检验证的程序。其中有一步就是经过指纹验证后,需要开道闸允许考生进入考试区域。

之前没有串口编程经验。大概搜了一下,了解到pcomm.dll提供了一套接口,方便基于串口做开发。下面就说一下整个过程的粗浅应用。虽然应用不够深入,但是基本流程是想通的。这里姑且把使用过程遇到的问题,梳理一遍,也算是基于串口编程的入门。

  • 准备

一些常识性的东西,放到最后作为附注。先把实用的主要的内容展示出来。

  • 硬件设备提供的参数

通讯协议

  • 硬件协议

通讯信号:RS485,半双工

通讯波特率:9600bps

起始位:1位

停止位:1位

数据位长:8位数据位

奇偶校验位:无

  • 帧协议

1.上位机发送帧格式:同步码+机器地址+命令码+数据+校验码

同步码:235(十进制)

机器地址:机器地址范围为0-255(十进制)

命令码/数据: 1)左向开闸命令        40H    00H

2)右向开闸命令        41H    00H

3)右向开闸命令        48H    00H

4)取消常开命令        49H    00H

校验码=(同步码)XOR(设备地址)XOR(命令)XOR(数据)

(如机器地址为1时则发:EB+01+40+00+AA)注意为十六进制

2.单片机发送帧格式:同步码+机器地址+数据+数据+校验码

同步码:235(十进制)

设备地址:机器地址范围为0-255(十进制)

c) 对于控制命令返回响应码:

  1. 左向开闸命令响应码     C0H   00H
  2. 右向开闸命令响应码     C1H   00H

校验码=(同步码)XOR(设备地址)XOR(数据1)XOR(数据2)。

  • pcomm.dll sdk下载

这里分享一个链接,写得非常详细,收益匪浅。SDK下载链接。下载完成后,解压,安装,一直下一步,完成。看一下安装目录下的结构,安装包里还附带了一些助手程序,可以帮助调试或者测试串口是否可用。结构如下:

  1. example 是一些demo程序,使用不同语言调用pcomm接口程序;
  2. Help 是帮助文档;
  3. Include 是头文件信息;
  4. Lib是需要的动态、静态库;
  5. Utility 就是助手程序;
  • 测试

本地使用VS2010编译运行example程序。编译会报一个COFF转换的错误。

LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

这个链接错误原因不详,也没有深究,解决办法是

复制 C:\Windows\winsxs\x86_netfx-cvtres_for_vc_and_vb_b03f5f7f11d50a3a_6.1.7601.17514_none_ba1c770af0b2031b 目录下的 cvtres.exe 到C:\Program Files\Microsoft Visual Studio 10.0\VC\bin 目录下,直接覆盖替换。

不同的IDE,替换对应安装目录bin目录下的cvtres.exe程序。使用这种办法可以解决这个问题。

这里安利一个工具【everything】,下载后无需安装,可以整个电脑搜索文件,只要包含文件相关的关键字,马上就可以把整个系统所有的相关信息列处理,找东西非常快。这里付一张图片

然后就可以愉快的编译demo程序并运行。pcomm.dll是基于WIN32的一套API。为什么事win32?因为接口实现是基于COM实现的。不了解或者没听说过COM的说明你对Windows系统还不够了解,我自己也了解有限。虽然个人开发用过一段时间。迷失在ATL中间,以前对泛型编程也不够了解,现在也是,哈哈。

  • 以Demo中SIMPLE为例,编译运行结果如下

  • 实现简单的开门指令,下面是win32WndProc消息处理函数,我们借助原来关于的消息,生成响应开门的指令
LRESULT CALLBACK WndProc(HWND hwnd,UINT iMsg,WPARAM wParam,LPARAM lParam)
{switch(iMsg){case WM_COMMAND:switch(LOWORD(wParam)){case IDM_PORT_OPEN:OpenPort();return 0;case IDM_PORT_CLOSE:ClosePort();return 0;case IDM_PORT_SETTING:{COMMDATA bakdata = GCommData;if(DialogBox(GhInst,MAKEINTRESOURCE(IDD_OPEN),hwnd,PortDlgProc)==IDCANCEL)return 0;if(GbOpen)if (!PortSet())GCommData = bakdata;return 0;}case IDM_HELP_ABOUT:// 测试开门指令sio_putch(GCommData.Port, 0xEB);sio_putch(GCommData.Port, 0x01);sio_putch(GCommData.Port, 0x40);sio_putch(GCommData.Port, 0x00);sio_putch(GCommData.Port, 0xAA); //DialogBox(GhInst,MAKEINTRESOURCE(IDD_ABOUT),hwnd,AboutDlgProc);return 0;case IDM_PORT_EXIT:SendMessage(hwnd,WM_CLOSE,0,0L);return 0;}break;case WM_CREATE:GCommData.Port = 1;GCommData.ibaudrate  = 14;GCommData.iparity = 0;GCommData.ibytesize = 3;GCommData.istopbits = 0;GCommData.BaudRate  = B38400;GCommData.Parity = P_NONE;GCommData.ByteSize = BIT_8;GCommData.StopBits = STOP_1;GCommData.Hw = FALSE;GCommData.Sw = FALSE;GCommData.Dtr = TRUE;GCommData.Rts = TRUE;GbOpen = FALSE;hwndedit = CreateWindowEx (WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE,"edit",NULL,WS_CHILD | WS_VISIBLE | ES_LEFT | WS_VSCROLL |ES_MULTILINE |  ES_AUTOVSCROLL,0,0,0,0,hwnd,(HMENU)4,GhInst,NULL) ;_wpOrigWndProc = SubclassWindow(hwndedit,EditSubClassProc);SwitchMenu(hwnd);return 0;case WM_SIZE:MoveWindow (hwndedit,0,0,LOWORD(lParam),HIWORD(lParam),TRUE) ;return 0;case WM_CLOSE:if(GbOpen)SendMessage(hwnd,WM_COMMAND,IDM_PORT_CLOSE,0);break;case WM_SETFOCUS:SetFocus(hwndedit);return 0 ;case WM_DESTROY:PostQuitMessage(0);return 0;}return DefWindowProc(hwnd,iMsg,wParam,lParam);
}

最关键部分如下

// 测试开门指令
sio_putch(GCommData.Port, 0xEB);
sio_putch(GCommData.Port, 0x01);

sio_putch(GCommData.Port, 0x40);
sio_putch(GCommData.Port, 0x00);
sio_putch(GCommData.Port, 0xAA);

指令格式按照《通信协议》中的说明,指令如下

左向命令:EB 01 40 00 AA
右向命令:EB 01 41 00 AB

左向命令:EB 左开01 40 00 AA
右向命令:EB 右开01 41 00 AB

调用pcomm接口写入,按16进制写入。滴,滴,芝麻开门。。。,然后门就开了。

因为整个过程简单,可以使用pcomm lite 附带的助手做测试,简单说一下使用流程。先上图直观

如果打开串口成功,会跳出一个新界面,然后可以发数据了,指令类似“EB014000AA”,然后就芝麻开门了。

总结一下,是不是很简单,我可能只有了5个接口,然后就可以实现简单的串口通信了。

  • 附注,提供一些参考的信息

  1. Pcomm lite 串口库介绍

  2. Pcomm.dll(串口通讯库)中流控函数操作的说明手册

  3. delphi 的简单调用--这个提醒了我可以直接传16进制

  4. 官网--貌似说是一家台湾做硬件的公司做的,在这方面我们真的有很多需要学习的

使用pcomm.dll控制道闸开关相关推荐

  1. php控制道闸,基于物联网的道闸控制开启方法

    基于物联网的道闸控制开启方法 [技术领域] [0001]本发明属于停车区域内车辆进出控制技术领域,具体涉及一种基于物联网的道闸控制开启方法. [背景技术] [0002]2010年10月,中国汽车保有量 ...

  2. 工业级串口编程利器:Pcomm lite 串口库介绍 (Pcomm.dll)

     PComm Lite是家叫moxa的公司出的,做了几十年工业串口卡.串口服务器之类设备了.提供的pcomm易用性.可靠性久经考验. 下载地址:http://www.moxa.com/produc ...

  3. android 通过adb命令控制wifi开关

    android 通过adb命令控制wifi开关 2017年08月23日 17:47:46 刘国栋 阅读数:14598 版权声明:本文为博主原创文章,转载请声明文章出处. https://blog.cs ...

  4. 用html和js制作一个控制灯泡开关效果

    用html和js制作一个控制灯泡开关效果 **用css样式来控制div图片和文本的位置,然后用js里面onclick点击事件来控制图片的更换效果来实现当前运行图的效果** 1.以下是运行的效果图 2. ...

  5. 后台控制游戏开关_今天购买这些开关游戏

    后台控制游戏开关 There's always seems to be something on sale in the Nintendo Switch eShop. Unfortunately, u ...

  6. MT6771/6761/6762 dconfig控制mrdump开关去除SOCID绑定

    [DESCRIPTION] mrdump如果设定为dconfig控制(参考[FAQ13786]ramdump如何开启?),那么boot_para.img生成是需要绑定SOCID,也就是说,这个boot ...

  7. ESP8266+Arduino实现控制【开关外设装置-记录一】

    具体实现功能:网页+APP 实现控制舵机等IO操作. 1.使用 AP 模式提供WiFi接入,终端设备通过 Web 网页实现舵机控制: 2.使用串口连接蓝牙模组,提供蓝牙接入,终端设备通过手机APP实现 ...

  8. pcomm.dll计算机,pcomm.dll 64位

    pcomm.dll是系统或者游戏运行时经常用到一个文件,如果缺少这个文件的话可能会造成无法正常运行的问题,假如出现了"pcomm.dll已经损坏"或者"pcomm.dll ...

  9. 单片机加红外编解码模块(自带破解空调遥控器功能)实现控制空调开关

    单片机加红外编解码模块(自带破解空调遥控器功能)实现控制空调开关 获取空调遥控器的红外编码(制冷模式) 格力空调遥控器:YAP0F3型号 制冷开机编码 制冷关机编码 制冷调高一度编码 制冷调低一度编码 ...

最新文章

  1. 编译osdrv的uboot 内核 文件系统(Hi3516a)
  2. Spark2.x写入Elasticsearch的性能测试
  3. R语言基础与入门实践
  4. VMware VCenter模板不显示问题
  5. boost::mpl::size相关的测试程序
  6. perl学习之:编译、执行与内存关系(转)
  7. Linux安装使用redis
  8. 转!!存储过程和触发器
  9. 【mysql】mysql常用语句
  10. 【C语言】计算器实现
  11. 梯形图c语言编程比较,PLC编程语言梯形图与结构化文本的比较
  12. nserror 自定义错误_iOS NSError详解 NSError错误code对照表 自定义、定制NSError 一看就懂...
  13. 微信公众号教程(1)微信公众账号注册、设置、登陆
  14. 下载Google瓦片地图并在Unity中作为场景底图
  15. 11_JavaWeb三大组件之Filter拦截器与Listener监听器
  16. ubuntu20 关闭防火墙_ubuntu中如何关闭防火墙
  17. bzoj1812[Ioi2005] riv
  18. 日程表mysql_web编程之日程表模块(PHP+Mysql+Ajax)
  19. linux中fq格式转fa,fasta/fq文件处理万能工具——Seqkit学习记录
  20. 会计初级可以自己报名吗_初级会计考试可以自学吗?我刚完成报名

热门文章

  1. Java | 学习系列 Java1.8 新特性详解( 包含学习代码 )
  2. torch的cumsum
  3. 生命游戏和细胞自动机的学习笔记
  4. 王者荣耀服务器维护1月9号,王者荣耀1月9日更新了什么
  5. 纯硬菜,大厂常用软件测试面试题二(附答案)
  6. powerDesigner的一些记录
  7. java beanlisthandler_Java篇-DBUtils与连接池
  8. day01-2021-08-23
  9. 电脑上自己的账户被删了,使用之前的密码无法登录
  10. Django项目开发:图书后台管理系统