惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

有赞技术团队
有赞技术团队
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
aimingoo的专栏
aimingoo的专栏
IT之家
IT之家
G
Google Developers Blog
爱范儿
爱范儿
博客园 - 司徒正美
Recent Announcements
Recent Announcements
The Register - Security
The Register - Security
J
Java Code Geeks
The Cloudflare Blog
M
MIT News - Artificial intelligence
Apple Machine Learning Research
Apple Machine Learning Research
Microsoft Security Blog
Microsoft Security Blog
博客园 - Franky
雷峰网
雷峰网
酷 壳 – CoolShell
酷 壳 – CoolShell
Blog — PlanetScale
Blog — PlanetScale
Vercel News
Vercel News
宝玉的分享
宝玉的分享
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
B
Blog
小众软件
小众软件
Microsoft Azure Blog
Microsoft Azure Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
T
Troy Hunt's Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
H
Hacker News: Front Page
H
Help Net Security
S
Security @ Cisco Blogs
V
V2EX
Security Archives - TechRepublic
Security Archives - TechRepublic
Stack Overflow Blog
Stack Overflow Blog
O
OpenAI News
L
LINUX DO - 最新话题
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
S
Secure Thoughts
Help Net Security
Help Net Security
F
Full Disclosure
博客园 - 叶小钗
The Hacker News
The Hacker News
Spread Privacy
Spread Privacy
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Jina AI
Jina AI
K
Kaspersky official blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
V
Vulnerabilities – Threatpost
P
Privacy International News Feed
Scott Helme
Scott Helme

贰猹の小窝

个人哔哔: 谈薪时间-该问hr哪些问题 个人哔哔: 秋招与未来 从零开始的异世界主题开发生活-hexo事件管理与扩展使用 个人哔哔: 2022年度总结与全新的大饼 猹的魔改日记-文章页抛弃卡片、丢弃小菜单以及布局重构 猹的魔改日记-小小的重写个页脚 回忆录: 知心友与白月光 rust写个操作系统——课程实验blogos移至armV8深度解析:实验八下 内存管理 rust写个操作系统——课程实验blogos移至armV8深度解析:实验八上 内存管理 rust写个操作系统——课程实验blogos移至armV8深度解析:实验七 死锁与简单处理 rust写个操作系统——课程实验blogos移至armV8深度解析:实验六 GPIO关机 rust写个操作系统——课程实验blogos移至armV8深度解析:实验五 输入 rust写个操作系统——课程实验blogos移至armV8深度解析:实验四 中断 rust写个操作系统——课程实验blogos移至armV8深度解析:实验二 Hello World 关于linux: 设备树浅析(更新中) rust写个操作系统——课程实验blogos移至armV8深度解析:实验一 环境配置 rust写个操作系统——课程实验blogos移至armV8深度解析 猹的魔改日记-小菜单和复制/F12提示栏 个人哔哔: 一年期至,又一年始(不定时写完)
HNU工训综合项目二:基于485总线的评分系统速通指北
noionion · 2022-06-06 · via 贰猹の小窝

发表于|更新于|教程

字数总计:1.8k|阅读时长:6分钟|阅读量:

前言

工训中心如下说:

不用32是成本考虑,毕竟一届600多人,坚持人人做一板,也坚持7-8年了

害,无所谓了。水就完事了。。。

前置

鉴于某带学信科老师觉得:信科学生默认python的态度,我觉得我还是有必要讲一下py的安装。我写下这篇的时候python都3.10了,那就放python3.10的win安装下载链接吧。

python3.10安装程序

安装界面一打开,第一件事千万记得,把添加到path给勾上(py默认是不添加环境变量的),然后一路next,安装完后直接close就行。

然后打开cmd,输入pip install pyserial安装程序的前置包。然后回到这个实验本身

实验测试

对速通没啥用的前置部分

测试方法如下:

  1. 通过杜邦线将51单片机与RS232/RS485转换器连接,再通过USB转RS232/RS485串口通讯线与PC机连接,下载hex文件,并给单片机上电;

  2. 如果直接用某一台单片机做主机,该单片机需要下载上位机程序中的接点软件而不是下位机软件;

  3. 下位机下载后的初始现象为:最左边两个数码管显示00表示从机编号,最右边3个数码管显示000表示评分;

  4. 按下导航按键中心按钮进入设置模式,将从机编号和评分设置完成后再按一次中心键退出设置模式,再按下KEY1,KEY2,标志设置完成;

  5. 通过控制上位机进行从机检测获取下位机编号,并获取其评分,数据显示上位机的主控制器上,最后结束评分,单片机LED灯熄灭。

同时阅读其上位机和下位机之间通信的数据包如下(注:协议中的检验字节,本打分系统采用累加和编码。):

(1)主机检测从机是否正常相关数据包:(主机与单个从机设备通信)

A. 设备正常检测数据包:

方向:上位机—–>下位机

数据包消息:数据包头+从机地址+检测功能码(Fun_CheckSlave)+自定义内容(Check_Content)+校验字节

功能:查询下位机是否正常。正常,下位机发送回应查询数据包;不正常,则下位机不予回应;数据传输过程发生错误,下位机发送回应错误数据包,上位机可以通过设置多次轮询来重新检测该设备是否正常;

B. 回应查询数据包:

方向:下位机—–>上位机

数据包消息:数据包头+从机地址+检测功能码(Fun_CheckSlave)+自定义内容(接收自主机Check_Content)+校验字节

C. 回应错误数据包:

方向:下位机—–>上位机

数据包消息:数据包头+从机地址+检测功能码(Fun_CheckSlave)+错误码(ErrorInfo)+校验字节

(2)主机获取从机评分相关数据包:(主机与单个从机设备通信)

D. 获取多、单机评分数据包:

方向:上位机—–>下位机

数据包消息:数据包头+检测正常从机地址(0x00)+读下位机功能码(Fun_ReadInfo)+从机地址+校验字节

功能:对检测正常的设备,进行一次轮询,获取评分已经准备好的从机的分数。对于单机直接进行通信,没有轮询。

E. 结果返回数据包:

方向:下位机—–>上位机

数据包消息:数据包头+从机地址+读下位机功能码(Fun_ReadInfo)+从机返回的分数值+校验字节(分数值>100:表示上面提及的未准备好,回应错误数据包

(3)此轮评分结束相关数据包

F. 复位数据包:(主机与所有从机通信)

方向:上位机—–>下位机

数据包消息:数据包头+广播地址+复位功能码(Fun_Reset)+从机返回的分数值(0x00)+校验字节

功能:指示所有正常连接的从机进行复位操作,准备下一轮的评分。

如果你只是要速通的话,前面这些都没啥用,可以掠过。下来看怎么做比较实在:

实在一点的速通操作

  1. 连接好你的主机和从机,然后按装工训的说明设置好从机的编号(小数点位代表你在设置那一位),调好左边的编号和右边的分数后,千万记得用k2和k3按键锁定

  2. 然后呢,在主机连接到电脑上运行咱提供的python程序:

import binascii
import serial.tools.list_ports


plist = list(serial.tools.list_ports.comports())
ser = serial.Serial(list(plist[0])[0], 9600, timeout=0.05)

def read_times():
while 1:
dic = []
reading = ser.read(5)
if reading != b'':
a = str(hex(int(binascii.hexlify(reading), 16)))
b = a.replace("0x", "")
for index in range(0, len(b), 2):
dic.append(b[index] + b[index + 1])
return dic

devices = list(map(int, input("请输入设备下位机,中间以' '隔开:").split()))
print(devices)


for device in devices:
data = [0x5A, device, 0x08, 0x13]
data.append(sum(data))
print("{}\n从机设备编号: {:2d} 校验信息为: {}\n尝试校验中...".format('-'*50, device, data))
flag = True
for _ in range(100):
ser.write(data)
retdata = read_times()
if retdata:
print(retdata)
retdata = [int(i,16) for i in retdata]
if retdata == data:
print("返回的校验信息为: {},从机正常。".format(retdata))
else:
print("从机传输结果异常")
flag = False
break
if flag:
print("从机无返回")

print('-'*50)
print('从机分数读取:')
for device in devices:
data = [0x5A, 0x00, 0x03, device]
data.append(sum(data))
print("{}\n从机设备编号: {:2d} 发送信息为: {}\n尝试获取分数中...".format('-'*50, device, data))
flag = True
for _ in range(100):
ser.write(data)
retdata = read_times()
if retdata:
print(retdata)
retdata = [int(i,16) for i in retdata]
print(retdata)
if retdata[1] == device and retdata[4] == sum(retdata[:4]):
print("该从机分数为: {},从机正常。".format(retdata[3]))
elif retdata[3] == 0x6F:
print("从机分数大于100,错误")
else:
print("从机传输结果异常")
flag = False
break
if flag:
print("从机无返回")

print('-'*50)
print('从机复位操作:')
data = [0x5A, 0x00, 0x01, 0x00, 0x5B]
ser.write(data)
print("从机已复位,可以开始下一轮评分。")

在cmd中输入py xxx.py(记得先cd

然后输入你板子上你设置的编号,多机运行的话各个机子的编号用空格隔开

然后回车等着就行了(

这里放个我的实验记录

两个从机的编号分别为1719,分数分别设置为2354

正常的运行结果应该是下面这样的:

答疑

  1. 为什么我程序运行完一直在尝试校验中

可能你线没接好吧……

  1. 为什么我获取到的分数是0x6F(即 111 )

有可能板子问题,你可以试着重置一下板子。实在不行换个板子,换板子大概能解决所有问题

  1. 多机怎么搞?

首先你得弄个可以接多个线的东西(找老师要),然后A口全部线接到一起,B口也是,然后再出现上面问题就不用问我啦,一样的

end

  1. 前言
  2. 前置
  3. 实验测试
    1. 对速通没啥用的前置部分
    2. 实在一点的速通操作
    3. 答疑