当前位置:编程学习 > C#/ASP.NET >>

请教门禁控制器串口操作问题

现在需要对一个门禁控制器进行串口操作
目前连接串口没有任何问题
还未解决的问题是
说明书上说数据格式为1起始位,8数据位,1停止位,无校验,19200的波特率
同时说信息包格式为
1字节起始位,1字节IP地址位(标识IP地址中最后一个数字),1字节设备类型位(一般设置成0X40,标识是对门禁进行控制),1字节指令类型位(设置为0X49的时候标识是设置门禁设备参数指令,否则为从门禁设备读取数据指令),1字节数据位长度位,N字节数据位(N字节数据位中其中前2字节标识指令,后续N-2个字节标识指令携带具体数据),2字节校验位,1字节结束位

假设现在要将门禁的时间设置为2008年12月21日,星期日,下午13点34分32秒,同时设置日期指令为0XE0

则需要计算机(上位机)发送字节流为

01 01 40 49 12 45 30 32 30 30 38 31 32 32 31 30 37 31 33 33 34 33 32 8C 1E 0D
其中各个字节解释如下
01 表示起始位
01 表示门禁设备在lan内地址为192.168.0.1
40 表示当前操作设备为门禁
49 标识当前指令类型为设置参数类型指令
12 表示当前数据长度为18个字节,其中12为16进制数,转换为10进制后标识18个字节
45 30为指令E0 ASCII码的16进制表示 45的10进制为69,表示E    30的十进制为48,表示0
32 30 30 38 31 32 32 31 30 37 31 33 33 34 33 32  表示2008122107133432字符串中每个字符ASCII的16进制
BC 1E 表示2字节校验位
0D 表示1字节结束位

现在的问题是当向串口写数据的时候是应该所有的字节流(例如上述26个字节)全部写到串口,还是只写类似“45 30 32 30 30 38 31 32 32 31 30 37 31 33 33 34 33 32”这18个字节的数据位数据

门禁类型为深圳创新通用TY-200S

有做过类似开发的朋友帮忙看下

另外,通过测试表明此设备串口通信方式无连续方式,因为SerialPort的DataReceived事件在不发送指令的情况下是完全不触发的。







--------------------编程问答-------------------- 关注。。。。 --------------------编程问答-------------------- 持续关注。。。 --------------------编程问答-------------------- 没做过,不过看上面的说明,很明显应该全写!

SerialPort的DataReceived事件在不发送指令的情况下是完全不触发的 --------------------编程问答-------------------- 这个不是用来写的格式吧?

我看你说的这个应该是门禁跟上位机通信时,门禁发给上位机的数据格式 --------------------编程问答-------------------- 狗日的门禁 --------------------编程问答-------------------- 应该全写吧 --------------------编程问答-------------------- 传说顶贴能得分 --------------------编程问答-------------------- 关注中... --------------------编程问答-------------------- 他不提供DLL的吗? --------------------编程问答--------------------
引用 9 楼 drk928 的回复:
他不提供DLL的吗?

很明显不提供,要是提供估计楼主就不问了。。哈哈 --------------------编程问答-------------------- to drk928

  不提供DLL
  这种纯粹串口编程的问题难度其实不大,关键是怎么解析RS类协议的帧到数据包。 --------------------编程问答-------------------- OK,问题已经全解决,狗日的厂家发错了说明书,害的老子搞了5天搞不出一个返回数据

正确说明书发过来更麻烦,厂家不提供DLL,只有指令解析格式,而且指令是交互式的.先发指令类型指令,然后发参数,再发确认或结束,很麻烦.目前指令已经全部解析成功,有花了快10天时间,数据转换麻烦死了.

还需要自己做线程锁来控制指令连续发送时候的前后干扰问题.很是麻烦. --------------------编程问答-------------------- 我的门禁设备是广州的,只能用每秒触发得到,每秒发送一个标准格式的指令,串口返回指令,
但是DataReceived事件不会主动返回值,请问你做到打卡后主动发送了吗
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,