关于荣威项目积累经验

         对于荣威的项目,更多的是对于数据的处理,以及与客户沟通交流的经验,对于此次项目

总结如下:

        第一次去面见客户,关于听需求的问题:

        听需求的时候,一定不能不懂装懂,在听了客户自己述求后,通过自己的理解,复述一遍,跟客户对其颗粒度,才能保证回来做项目时,理解没有偏差,导致后期着急忙慌的更改错误。最好带上笔记本,或者提前录音,便于事后复盘。

        阅读协议需求,了解协议传输机制:

        数据传输是通过那种方式,串口,UDP,或是NTP。这一次的NTP协议传输是通过UDP传输方式传输数据。所以预写了一个UDP类,用于处理UDP传输:

# -*- coding: utf-8 -*-
# !/usr/bin/env python
"""udp_server.py

This module demonstrates a server of udp.

"""
import socket   
import logging
import threading


class UDP_Server:
    """Class for UDP Server."""
    def __init__(self, rcvCallBack):
        self.udpSocket = None
        self.isUdpServerRunning = False
        self.udpServerWorker = None
        self.udpServerRcvCallBackHandle = rcvCallBack

    def udp_server_start(self, serverIP, serverPort):
        """udp server start to run."""
        # creat the socket for udp server
        self.udpSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        self.udpSocket.bind((serverIP, serverPort))
        self.udpServerWorker = threading.Thread(target=self.udp_server_receiver, name="LoopThread_udp_receive")
        self.udpServerWorker.setDaemon(True)
        self.udpServerWorker.start()
        self.isUdpServerRunning = True

    def udp_server_send(self, data, addr):
        """Send data through udp server."""
        # logging.info(addr)
        self.udpSocket.sendto(data, addr)
        # logging.info(ret)

    def udp_server_hex_send(self, data, addr):
        """Send hex data through udp server."""
        hex_data = bytes.fromhex(data)
        self.udpSocket.sendto(hex_data, addr)

    def udp_server_stop(self):
        """stop the udp server."""
        logging.info("start close socket")
        self.udpSocket.close()
        self.udpServerWorker.join()
        self.isUdpServerRunning = False

    def udp_server_receiver(self):
        """Read the data from udp server."""
        while True:
            try:
                data, addr = self.udpSocket.recvfrom(1024)
                # logging.info("Receive from %s:%s", addr, data)
                self.udpServerRcvCallBackHandle(data, addr)
            except Exception as e:
                logging.info(e)

然后通过回调函数,控制不同IP以及不同端口号收到的数据,并作出协议内相应的处理,其中关于数据的处理较多:

        处理int型转16进制:

ipAddrList = ipAddr.split(".")
    ipAddr_hex = '{:02x}'.format(int(ipAddrList[0])) + ' '
    ipAddr_hex += '{:02x}'.format(int(ipAddrList[1])) + ' '
    ipAddr_hex += '{:02x}'.format(int(ipAddrList[2])) + ' '
    ipAddr_hex += '{:02x}'.format(int(ipAddrList[3])) + ' '

        以及把接收到的16进制转换成两个字节的列表:

def icd_hex_to_list(data):
    # 将16进制的字符串划分为 两字节一组的列表
    hexdata = data.hex()
    hexlist = [hexdata[i: i + 2] for i in range(0, len(hexdata), 2)]
    return hexlist

        通过wireshark去查看软件发送数据:

        打开wireshark,并且打开应用软件,点击软件里面的按键,筛选出具体数据,根据数据对症下药。

        通过底板线路查看TX,RX以及接地:

        TTL信号的串口,一般TX和RX在底板上会有两条线,分别就是TX和RX,可以挨个试。

        完成NTP client功能:

        NTP功能主要是用了chrony软件来实现NTP的分发,通过配置chrony的配置文件chrony.config,在用户通过切换状态时,更改配置文件即可,配置文件中的server源。

        在完成后,与客户交谈时:

        切忌说谎!做了就是做了,没做就是没做,千万不能撒谎,一个谎言可能导致严重的后果。

都只是阐述一下内心心得,具体操作未描述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值