tcpg通信

1、客户端

from socket import *

def main():
    #  创建套接字
    tcp_socket = socket(AF_INET,SOCK_STREAM)
    #  链接服务端
    ip = input('请输入链接ip:')
    port = int(input('请输入链接port:'))
    dest_addr = (ip,port)
    tcp_socket.connect(dest_addr)
    #  发送内容
    while True:
        sent_date = input('请输入发送内容:')
        date = tcp_socket.send(sent_date.encode('utf-8'))
    #  关闭套接字
    tcp_socket.close()

if __name__ == '__main__':
    main()

 

2、tcp_服务端

from socket import *
def main():
    #  创建套接字
    tcp_service = socket(AF_INET,SOCK_STREAM)
    #  绑定端口地址
    tcp_service.bind(('',5060))
    #  listen是套接字变被动连接
    tcp_service.listen(128)
    #  accept 等待客户段接入
    client_socket,client_addr = tcp_service.accept()
    #  接收内容
    while True:
        rec_date =  client_socket.recv(1024)

        print('接收到的内容:',rec_date.decode('utf-8'))
    #  关闭套接字
    client_socket.close()


if __name__ == '__main__':
    main()

 

转载于:https://www.cnblogs.com/tylmd/p/10504200.html

根据要求,提供源代码、仿真代码,以及在xc7a35tcpg236-1芯片运行的约束文件,还有其他实现目的的步骤: 要怎么是实现Basys 3 上的 UART 通信,FPGA 开发板由 Xilinx Artix 7提供支持,Digilent Basys 3 是⼀款Xilinx FPGA 开发板,具有⼀个 USB-UART 连接器。为了学习如何在FPGA板和数据终端设备(DTE(如计算机终端)之间建⽴UART 通信,我构建了两个项⽬ - UART发射器和 UART 接收器。第 I 部分重点介绍UART 发射器。我们将通过Basys 3 上的USB-UART连接器将Basys 3 的8 位数据传输到计算机。当⽤⼾打开/关闭任何开关时,这将形成ASCII字符的⼆进制值。⼀个字符(8位)字符将通过 UART传输到计算机。该字符将显⽰在终端(Terterm)中。按下按钮时,将触发所有传输。:发射器模块的输⼊和输出 输⼊: clk - 主时钟 reset - 重置信号 transmit - 触发 UART 通信的 btn 信号 [7 : 0]data - 传输的 8 位数据。⽆奇偶校验位 输出: TxD - 发射器串⾏输出。串⾏数据帧通过此引脚传输。 TxD 将在重置期间或未发⽣传输时保持⾼电平 第 4 步:第 4 步:发射器模块的内部变量 reg [3 : 0]bitcounter - 4 位计数器,⽤于计算 10 位数据传输是否完成 reg [3 : 0]counter - ⽤于计算波特率的 14 位计数器 reg [1 : 0]state - Mealy State Machine 的初始状态变量 reg [1 : 0]nextstate - Mealy State Machine 的下⼀个状态变量 reg [9 : 0]rightshiftreg - 传输过程中需要移出 10 位数据。⽤于存储串⾏包并逐个发送其位。 当加载信号为 1 时,它会加载⼀个要传输的新字符( 8 位)。最低有效位使⽤⼆进制值 “0” (起始位) 初始化 ⼆进制值 “1” 在最⾼有效位中引⼊ reg shift - 显⽰偏移数据已准备就绪的信号 reg load - 显⽰加载数据已准备就绪的信号 reg clear - 清除所有信号的信号 第 5 步:第 5 步:波特率⽣成器 Basys 3 上的主时钟频率为 100MHz 。我们需要 9600 的波特率才能进⾏ UART 传输。 要制作波特率⽣成器,我们将使⽤计数器。例如,波特率仅为 9600 位 / 秒 ( bps )。 波特率 * 计数器 主时钟频率 因此,对于波特率 9600 ,我们创建⼀个计数器值为 10,416 。 计数器 主时钟频率 / 波特率 当波特率计数达到 10415 (从 0 到 10415 = 10416 )时,波特率为 9600 ,我们会将计数器重置为 0 ,然后更改有限状态机中的状态。换句话说,计数器⽤于减慢 100MHZ FPGA 时钟, 以便我们的程序以 9600 波特率⼯作。这样做的原因是使程序与 clock (或 counter ) 同步。 第 6 步:第 6 步:传输逻辑 在第 5 步中,我们为波特率⽣成器创建了⼀个计数器。⼀旦计数器计数达到 10,416 , 检查是否逐个置位 clear 、 shift 和 load 信号 ( “1” )。 i ) 如果加载信号被置位 ( “1” ),则 rightshiftregister 加载要传输的数据并添加开始位和停⽌位。 这就是为什么⼀旦状态从 IDLE 变为 TRANSMIT ,负载就会变⾼。 它确保数据已加载到寄存器中并准备好传输。 ii ) 如果置位 shift ( “1” ),则 rightshiftreg = rightshiftreg>>1 。这会将数据向右移动⼀次。 Bitcounter 也递增⼀次。这告诉程序已经发送了⼀个位。 iii ) 如果置位 clear ( “1” ),则已完成传输, bitcounter 返回零 ; 等待另⼀次新的传输。 我们还创建了⼀个同步的 Mealy State Machine 1. 空闲状态 ( S0 ): 如果传输为零,我们将保持 IDLE 状态并继续等待,直到按下该按钮。 将 load , shift 和 clear 信号设置为 0 。这可以防⽌在变速器未启动时换档。不要将 bitcounter 设置为零。否则,我们在传输数据时⽆法增加 bitcounter 。我们⽬前还没有任何数据可以加载。 TxD 保持⾼位以表明没有传输任何内容( IDLE 状态)。 当输⼊传输为 1 时,我们移动到 TRNSMIT 状态。此传输是 Basys 3 上的按钮, 我们按下它来告诉程序我们将要传输。将负载设置为 “1” (⾼),但保持 shift 并将 Clear 信号设置为 “0” (低)。 2. TRANSMIT 状态 ( S1 ): 请记住,我们有 8 个数据位, 1 个起始位和 1 个停⽌位。当 bitcounter 达到 10 (等于或⼤于 10 ) 时,表⽰它已完成传输任务。当我们达到 10 bit 传输的⽬标时,清除必须为 “1” (⾼)才能将 bitcounter 清除回零并为下⼀次传输做好准备。此外,下⼀个状态必须返回到 IDLE 。将 load 和 shift 保持为 “0” (低) 如果 bitcounter ⼩于 10 ,则保持 TRANSMIT 状态。此外,我们必须将 shift 设置为 1 , 因为我们想移动我们的右移位寄存器,以便下⼀个位可以移位到我们的 TxD 输出引脚上以进⾏ UART 传输。这是在 TxD = shiftreg[0] 中完成的。负载和偏移为 “0” (低)。 第 7 步:第 7 步:发射器模块的 Verilog 代码 该逻辑引⽤⾃ http://www.ehow.com/how_5667684_create-uart-transm… 附件是发射器模块的 verilog 代码 第 8 步:第 8 步:创建 Top 模块 例化 transmitter 和 top module 。此外,我们创建了以下输出,并分配通过 Logic Analyzer 进⾏调试 输出 TxD_debug - TxD 信号 output transmit_debug - 传输信号 output button_debug - 按钮输⼊信号 output clk_debug - 主时钟信号 分配 TxD_debug = TxD; assign transmit_debug = 传输 ; 分配 button_debug = btn1; 分配 clk_debug = clk; attached 是顶部模块。 步骤 9 :步骤 9 :修改主约束⽂件 为了实现设计,我们需要创建约束。 Digilent 为 Basys 3 提供主约束⽂件。 我们需要完成以下任务。 Attached 是修改后的主约束⽂件。 1 ) 通过删除 “set property…” 前⾯的 来取消注释我们需要的 pin ,例如,在顶部模块中, 我们的输⼊是 [7 : 0] sw ,因此我们转到 switches 并取消注释 “set property…” 从 sw[0] 到 sw[7] 的语句 2 ) 更改信号名称,例如,我们有两个按钮输⼊ BTN0 和 BTN1 。在主约束⽂件中,我们将 BTNU 和 BTNL 更改为 btn 0 和 btn 1 set_property PACKAGE_PIN U18 [get_ports btn0] set_property IOSTANDARD LVCMOS33 [get_ports btn0] set_property PACKAGE_PIN T18 [get_ports btn1] set_property IOSTANDARD LVCMOS33 [get_ports btn1] 3 ) 将调试信号通过 Pmod JA 端⼝从 JA1 放到 JA4 ##Sch 名称 = JA1 set_property PACKAGE_PIN J1 [get_ports TxD_debug] set_property IOSTANDARD LVCMOS33 [get_ports TxD_debug] ##Sch 名称 = JA2 set_property PACKAGE_PIN L2 [get_ports transmit_debug] set_property IOSTANDARD LVCMOS33 [get_ports transmit_debug] ##Sch 名称 = JA3 set_property PACKAGE_PIN J2 [get_ports button_debug] set_property IOSTANDARD LVCMOS33 [get_ports button_debug] ##Sch 名称 = JA4 set_property PACKAGE_PIN G2 [get_ports clk_debug] set_property IOSTANDARD LVCMOS33 [get_ports clk_debug] 第 10 步:第 10 步:运⾏ Synthesis 、 Implementation 和 Generate Bitstream 附件是项⽬⽂件。 如果您忘记了如何在 Xilinx Vivado 中运⾏综合、实现和⽣成 bitstream ,您可以在 https://www.instructables.com/id/Simple-Logic-Design-w-Digilent-Nexys-4-Field-Progr/ 中查看最后⼏个步骤 步骤 11 :步骤 11 :将⽐特流编程到 Basys 3 上的 Xilinx FPGA 并运⾏ Teraterm 通过 USB 端⼝将 Basys 3 连接到计算机(⻅附图),并将 .bit ⽂件编程到板上的 FPGA 。 确保串⾏ USB 端⼝已连接。您可以在设备管理器中找到正确的端⼝(如果您有 Window PC )。 端⼝设置应为 9600 波特率,(⻅附图
05-27
计及风电并网运行的微电网及集群电动汽车综合需求侧响应的优化调度策略研究(Matlab代码实现)内容概要:本文研究了计及风电并网运行的微电网及集群电动汽车综合需求侧响应的优化调度策略,并提供了基于Matlab的代码实现。研究聚焦于在高渗透率可再生能源接入背景下,如何协调微电网内部分布式电源、储能系统与大规模电动汽车充电负荷之间的互动关系,通过引入需求侧响应机制,建立多目标优化调度模型,实现系统运行成本最小化、可再生能源消纳最大化以及电网负荷曲线的削峰填谷。文中详细阐述了风电出力不确定性处理、电动汽车集群充放电行为建模、电价型与激励型需求响应机制设计以及优化求解算法的应用。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事新能源、微电网、电动汽车等领域技术研发的工程师。; 使用场景及目标:①用于复现相关硕士论文研究成果,深入理解含高比例风电的微电网优化调度建模方法;②为开展电动汽车参与电网互动(V2G)、需求侧响应等课题提供仿真平台和技术参考;③适用于电力系统优化、能源互联网、综合能源系统等相关领域的教学与科研项目开发。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注模型构建逻辑与算法实现细节,同时可参考文档中提及的其他相关案例(如储能优化、负荷预测等),以拓宽研究视野并促进交叉创新。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值