tag 标签: 串口通信

相关帖子
相关博文
  • 热度 4
    2021-5-19 15:51
    2871 次阅读|
    2 个评论
    为什么有的PLC需要上电停止功能,能防止PLC变砖
    关键词: PLC 可编程控制器 上电停止 串口通信 梯形图 摘要: PLC (可编程控制器)在工业控制中使用非常广泛,型号很多,有一部分 PLC 有上电停止的功能,它们为什么需要这个功能呢?孔丙火(微信公众号:孔丙火)分析了上电停止的具体用途及实现路径,对于没有启停旋钮、没有专用编程口或编程电缆、通信口即作为编程口又作为通用口、通信口同时支持主站和从站设置的 PLC ,上电停止功能是需要的。同时,这种设计,对于单片机的串口通信设计,具有很好的借鉴意义。 1.PLC 与上电停止 PLC 是可编程逻辑控制器( Programmable Logic Controller )的简称,随着技术的不断发展, PLC 已不仅仅在于逻辑控制,因此后来改称为可编程控制器( Programmable Controller ),但由于简称 PC 与个人电脑的简称一样,为了不混淆,依然用 PLC 来简称可编程控制器。从 70 年代第一台 PLC 到目前为止,出现过各种形式的 PLC ,厂家型号众多。你或许用过 PLC ,或许没用过 PLC ,你用的 PLC 或许有上电停止功能,或许没有上电停止功能,那为什么有的 PLC 需要上电停止功能呢。 如图 1 所示,这是某款 PLC 的上电停止功能。 图 1 这是 PLC 编程软件菜单下的一个截图,具体用法是:点击“上电停止 PLC ”,然后把 PLC 断电,通过该款 PLC 指定的可以实现上电停止功能的通信口( 485 或 232 )与计算机连接,然后给 PLC 重新上电,此时编程界面上就会出现“ PLC 上电停止成功”的提示,可以看到 PLC 处于停止状态,且此通信口的通信参数为默认状态(数据手册上标注的上电停止后的通信参数)。 看了上面的描述,孔丙火(微信公众号:孔丙火)相信你对上电停止功能有了一个大概的了解。也许会想,搞得这么啰嗦,有什么用呢,为什么要这样设计呢。 首先,具有上电停止功能的 PLC 不具有启停旋钮,无法通过硬件开关控制 PLC 的启动和停止。至于有的 PLC 为什么不设计启停旋钮,可能是为了节省电路板空间、节省硬件成本,或者其他什么原因,孔丙火(微信公众号:孔丙火)不得而知。没有启停旋钮,要想停止 PLC 的运行,只能通过编程软件进行控制,在计算机与 PLC 正常通信的情况下,可以通过编程软件控制 PLC 的运行与停止。但 PLC 在上电伊始是默认进入运行状态的,要想要 PLC 上电就进入停止状态,就需要上电停止功能,这是上电停止功能的第一个用途。 其次,具有上电停止功能的 PLC 一般不具有专用的编程接口或者专用的编程电缆,任何一个通信口都可以下载程序,同时,任何一个通信口也都可以用作通用的通信口,用户程序可以操作使用。一旦用户把通信口的通信参数改乱了,或者记不清通信参数了,那么计算机上的编程软件就无法与 PLC 通信了, PLC 岂不是变砖了?这个时候,就需要上电停止功能,上电停止成功后,具有上电停止功能的通信口的参数变为默认参数,此时编程软件可以与 PLC 通信,查看当前的通信参数或者修改通信参数,以恢复 PLC 的正常功能。 还有一种情况,这种 PLC 的通信口一般都支持 Modbus 协议,且均支持设置为主站或从站,当所有的通信口都被设置为了主站,主站口会主动向外发数据,此时,程序下载无法完成,因此,在下载程序的时候,需要计算机上的编程软件主动发起数据通信,此时的 PLC 应当相当于从站。这个时候同样需要上电停止功能来解决, PLC 上电伊始便停止运行了,通信口不会再向外发数据,程序下载就可以正常进行了。这是上电停止功能的第二个用途。 总结:孔丙火(微信公众号:孔丙火)认为,对于没有启停旋钮、没有专用编程口或编程电缆、通信口即作为编程口又作为通用口、通信口同时支持主站和从站设置的 PLC ,上电停止功能是需要的,也是必须的,否则 PLC 有可能会变砖。 2. 实现路径分析 孔丙火(微信公众号:孔丙火)做过一些单片机的设计项目,现在很多小型的 PLC 都是用单片机实现,这里就来分析一下 PLC 的上电停止功能的实现路径。 PLC 的程序代码大体可以分为两个部分:固件和用户程序,固件是 PLC 在出厂的时候固化好的,外设、用户程序的解析等功能都在这个部分,用户程序就是用户通过编程软件编写的部分,我们通常写的梯形图程序就属于这个部分。 PLC 上电开始运行,便进入固件部分,然后根据一定的条件,再进入用户程序的运行。 大体猜测一下上电停止的实现方法。 PLC 上电,固件程序开始运行,具有上电停止功能的通信口按照默认参数设置,在这个过程中,检测具有上电停止功能的通信口是否接收到上电停止指令,如果接收到了上电停止指令,则不进入用户程序(即 PLC 处于停止状态),这个时候,编程软件可以建立与 PLC 的通信,可以查看通信口参数,可以修改通信口参数,可以下载或上传程序。如果在一定的时间内(较短时间,例如 500ms )没有收到上电停止指令,则进入用户程序, PLC 正常运行。 有了上面的分析,也就知道了,为什么在执行上电停止的时候,一定要先打开编程软件上的上电停止功能,正确连接 PLC 的通信口,然后才能给 PLC 上电,这样才能确保 PLC 在刚开始运行在固件程序阶段的时候能接收到上电停止指令。 3. 单片机设计借鉴 在涉及到 Modbus 串口通信的单片机项目中,孔丙火(微信公众号:孔丙火)认为,这种上电停止的设计方法是具有借鉴意义的。一般情况下,串口的通信参数是需要开放修改的,修改的方法大致可以分为两种。第一种是通过硬件的方法,在电路上设计一些拨码开关或编码开关,以实现通信参数的设定。第二种方法是通过软件设计,将通信参数存在 flash 或 EEPROOM 中,计算机或 HMI 等设备通过串口通信来改变参数。 对于软件设计的方法,存在两个问题:第一,用户把串口参数改乱或记不清通信参数的情况下,只用重新下载单片机程序,清空 flash 或 EEPROOM ,很不方便;第二,如果串口作为 Modbus 主站口,单片机运行过程中,无法通过串口修改通信参数。 类似 PLC 上电停止功能的设计方法可以很多解决上面两个问题。在我的 FreeModbus 从站设计的系列文章中,后续会有关于上电停止功能的分享,实现一个简单的上电停止功能,以便可以方便地修改通信参数。欢迎持续关注。 文章在公众号( 孔丙火 )同步推出,欢迎查看更多系列文章。 单片机、 ARM 、现场总线、 PLC 、嵌入式软硬件的设计经验分享,秉承“点点滴滴皆智慧”的理念,以实际项目为单元阐述知识点,一起分享,共同交流。
  • 热度 17
    2015-12-9 23:52
    2106 次阅读|
    2 个评论
    写在前面:转载请注明出处,如果对您有帮助,请您点个赞。 这是我13年上大学时候上单片机课写的一个题目,是: 按一次按,一个灯亮2秒(另外一个不亮),同时发送1到电脑端;同一个键按两次,刚才亮的现在暗,另外一颗亮4秒。同时发送2。 废话少说,程序如下: #include #define uint unsigned int #define uchar unsigned char sbit key1=P3^4; sbit ledb=P1^0; sbit ledg=P1^1; uint num,num1,num2; int i,j; uchar code table ={'1','2'}; //先把要发送的东西向定义。记住这个格式。 uchar code 。。。 void inti() { TMOD=0x21; //这里对TMOD赋值 用定时器计数器一的方式2,自动重装 TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=0xfd;// TL1=0xfd;// 这两句诗程序的难点;这需要数据计算,在波特率为9600bit/s 的情况下,初值为0xfd,这需要记住。 ledb=1; ledg=1; EA=1; ET0=1; ET1=1;//在这个程序中,实际上中断不起作用。所以也不写中断函数。 SCON=0xd8;//记住就行 PCON=0x00;//同上 TR1=1;//同上 } void delay(uint x)//延迟函数 { uint a,b; 0;a--) 0;b--); } void keyscan() { if(key1==0) { delay(10); if(key1==0) { num=1;//标志位! while(!key1); 0;i--) 0;j--)//这两句的意思是在200ms的时间内,检测有没有键按下。 { if(key1==0) { delay(10); if(key1==0) { num=2;//标志位! while(!key1); } } } } } } void Time0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; num1++; if(num1==40&&num2==1)//当时间走了两秒且num2为1时 { ledb=1; num1=0; TR0=0; } if(num1==80&&num2==2)//当时间走了4秒且num2为2时 { ledg=1; num1=0; TR0=0; } } void main() { inti(); while(1) { keyscan(); if(num==1) { ledb=0; ledg=1; num2=1;//num2在中断函数中体现作用 TR0=1;//打开计数器 num=0; SBUF=table ;//一下的三句是特定结构 while(TI==0); TI=0; } if(num==2) { ledg=0; ledb=1; TR0=1; num2=2;//num2在中断函数中体现作用 num=0; SBUF=table ; while(!TI); TI=0; } } } 然后,我再重点讲一下 在stc烧写软件下打开窗口助手,然后在串口助手下打开串口(在窗口下方),打开之后会有不同的地方。其他的看图就可以。 ps: 这个刚才看到:定时和计数器的功能区别。 单片机的定时器是用内部时钟信号,计脉冲的个数, 计数器是计外面的脉冲个数, 定时器用的脉冲频率是晶振频率的1/12.当计数个数达到一定值后,产生溢出,产生一个中断信号. 而计数器用的脉冲外面的脉冲,从IO输入,当计数个数达到一定值后,产生溢出,产生一个中断信号. 两者工作原理差不多.都是计数 ,用的信号来源不同.
  • 热度 10
    2015-7-27 15:11
    1405 次阅读|
    0 个评论
    CPLD 学习心得 1. 串口通信 UART PS: 详情可以查看 my_uart_top 文件夹 串口通信是通过串口调试助手发送数据和接收数据来验证的,对于 CPLD\FPGA 设计者而言,只关心与其接口的 RS232_RX (数据接收端口)和 RS232_TX (数据发送端口)两个信号。简单的帧格式为: 该设计分为 4 个模块实现, 4 个模块的划分主要是依据数据流的方向。 my_uart_rx 模块主要是完成数据的接收, speed_select(speed_rx) 模块主要响应 my_uart_rx 模块发出的使能信号进行波特率计数,并且回送一个数据采样使能信号。 my_uart_tx 模块在 my_uart_rx 模块接收好一个完整的数据帧后启动,将接收到的数据返回给对方,它的波特率控制是由 speed_select(speed_tx) 模块产生。 RTL 视图: 个人理解: 该设计的层次: My_uart_top 顶层文件,主要是模块的调用以及定义 wire 型。 注意: .x(y) 表示: x 为子模块的信号, y 为顶层模块的信号。 My_uart_rx: 有三个部分,分别为 4 级缓存,过滤接收数据;打开数据接收中断,波特率启动信号,均是高电平有效;根据 num 值,传输信号。 My_uart_tx: 也有三个部分,分别为 3 级缓存,过滤接收使能信号;从接收端发送到发送寄存器(不是发送端),打开发送使能端和波特率启动信号(两者均为高电平有效);把发送寄存器的数据发到发送端。 Speed_select: 有两个部分,分别为计数器和在时间中点采样数据。 该模块中可以修改波特率参数。   uart 的验证: 使用串口调试助手发送数据, cpld 通过 9pin 通信线与电脑连接。
  • 热度 20
    2012-6-14 09:50
    1295 次阅读|
    0 个评论
    大家好,今天为大家分享WIZnet公司的产品WIZ107SR的用户手册第一部分,后面会继续为大家分享后面的部分。希望对大家能有帮助~   1. 简介 WIZ107SR 是串口设备与以太网之间的网关模块,它能将串口数据转换成以太网数据,反之亦然。通过 WIZ107SR 提供的接口将串口设备与以太网相连,不仅快速简便,而且缩短了开发周期,从而可以获取更多的利益。 我们同样为 WIZ107SR 提供了全功能的配置工具。在 WIZ107SR 处于串口配置模式下,根据自己的需求,你可以使用串口配置命令设置 WIZ107SR ,或者使用我们提供的配置工具,通过以太网让 WIZ107SR 更好的植入你们的产品。   1.1  主要特征 小尺寸串口连接以太网 高速简便的连接因特网和串口设备 根据客户需求,可提供固件定制服务 使用 W7100A 芯片解决方案确保稳定可靠的数据通信 提供容易操作的配置工具程序 支持用户设定识别码,确保安全性 支持串口配置命令 支持 10/100Mbps 以太网,串口通信速率高达 230Kbps 支持静态 IP 和 DHCP 设置 支持 DNS 尺寸: 48mm x 30mm x 18mm (长 x 宽 x 高) RoHS 标准 1.2  产品规格 1.2.1 WIZ107SR模块规格 WIZ107SR 的特征在于它不仅支持快速的全硬件 TCP/IP 协议栈和大部分的 TPC/IP 协议 ( 例如 TCP 、 UDP 、 IP 、 ARP 、 ICMP 和以太网 MAC 层 ) ,同样也支持 10/100Mbps 的以太网,并且安装了一个标准的以太网 Jack 。 WIZ107SR 通过具有标准的 RS-232 规范的 12 引脚的接头连接一个串口,并通过 3.3V 、 250mA 的直流电源直接供电,详细说明如表 2 所示。   结构 TCP/IP W7100A 物理层 包含在 W7100A 中 自动协商(全双工与半双工) 自动配置 MDI/MDIX 串口 RS-232C MCU 包含在 W7100A 中 (软件与工业标准的 8051 完全兼容) 内置 2kBytes 启动 ROM 内置 64kBytes 嵌入式程序闪存 内置 256kBytes 嵌入式数据闪存 内置 64kBytes 的嵌入式静态随机存储器 内置 32kBytes 的 TCP/IP 数据交互 串口 接口 包含 RS-232C 无线电收发机 信号 TXD, RXD, RTS, CTS, GND 参数 奇偶校验位: None, Odd, Even 数据位: 7, 8 bit 流控制: None, RTS/CTS, XON/XOFF 速率 最高可达 230Kbps 尺寸 48mm × 30mm × 18mm (包括接头尺寸) 接头类型 间距为 2.54mm 的针头, 12 引脚 (2*6) 输入电压 3.3V 直流电 功耗 低于 250mA 温度 0 ° -70 °(操作), -40 ° -85 °(存储) 湿度 10-90%   表 1.  WIZ107SR 模块详细说明 1.2.2  WIZ107SR模块接口 图 1 . WIZ107SR接口   2.  入门指南 2.1 配置工具 2.1.1  网络配置 图 3.  WIZ107SR 配置工具(网络配置页) 1) 搜索 搜索功能可以搜索在同一局域网的所有设备或者在广域网中的一个指定的设备。如图 4 ,使用 UDP 广播可以找到在同一子网下的所有连接的设备。如果检测到使用 TCP 单播方式,就必须使用特定的 IP 地址,如图 5 所示。在“Serial to Ethernet”下会显示搜索到设备的 MAC 地址。 请注意,如果给设备配置了识别码,就必须输入识别码。 图 4. 使用UDP广播方式搜索 图 5. 使用TCP单播方式搜索 2) 设置 这个功能是为了完成配置的修改。 如果你从“Serial to Ethernet”中选择了一个MAC地址,系统会自动显示模块的默认配置,改变配置并单击“Setting”按钮完成配置。模块会根据更改的配置重新初始化,修改的值会保存在模块的EEPROM中,这样一来,即使断电,数据也不会被清除。 3) 烧录 通过网络烧录固件。 4) 复位 如果你从列表中选择了 MAC 地址并单击“ Reset ”按钮,模块会重新设定并重启。 5) 恢复出厂设置 如果你从列表中选择了 MAC 地址并单击“ Factory ”按钮,所有的值会恢复设备出厂时的默认值。 6) Ping 你可以在弹出的简单 Ping 应用程序中执行 Ping 测试。 图 6. 简单的 Ping 测试程序 7) 防火墙 弹出 Windows 防火墙设定程序。 8) 退出 关闭配置工具程序。 9) 搜索窗口 如果单击“ Search ”按钮,会显示所有在同一子网下的 MAC 地址。你可以看到一些基本信息,例如模块名和固件版本等等。 10 )网络设置方法            选择 IP 设置模式,你可以选择静态地址,动态主机配置协议。            ( PPPoE 模式在当前版本下被禁用)            - 使用以下 IP 地址(静态 IP ) 这个选项通过静态 IP 地址设定 WIZ107SR 模块的 IP 。首先,在开发板的列表中选择你想设定为静态 IP 的设备的 MAC 地址,然后配置“ Device IP, Subnet, Gateway box ”。输入静态 IP 地址并单击“ setting ”按钮,设备就设定成你想要的 IP 地址。            -DHCP 设定使用DHCP模式选项。先选择“DHCP”,并单击“Setting”按钮。如果从DHCP服务器获取IP地址成功,配置窗口下会显示MAC地址,(从DHCP服务器获取IP地址需要一定的时间)当选定一个列表上的模块后,会自动显示IP地址、子网掩码和默认网关。如果不能从DHCP服务器获取IP地址,IP地址、子网掩码和默认网关会被初始化为0.0.0.0。 11 ) 网络操作模式 客户/服务器/混合模式:这是基于TCP的选择通信方法。TCP是在在数据通信之前建立连接的协议,但是UDP则不需要建立连接就能进行数据通信。WIZ107SR的网络模式根据不同的连接方法可分为TCP客户端、TCP服务器端和混合模式。在TCP服务器模式下,WIZ107SR在连接中扮演服务器的角色,等待客户端的连接。在TCP客户模式下,客户端在连接中扮演客户的角色,并尝试通过IP地址和端口连接主机。在混合模式下,WIZ107S同时支持服务器和客户端,每个模式的通信进程如下所示。 TCP服务器通信模式 在TCP服务器通信模式下,WIZ107SR等待连接请求。 TCP服务器模式为了检测状态和提供命令而在监控中心尝试连接设备(已安装 WIZ107SR )时是非常有用的。通常情况下,WIZ107SR处于等待状态,如果有任何监控中心的连接请求,首先建立连接,然后开始数据通信,最后关闭连接。 为了实现这种模式,先要配置本地IP、子网掩码、默认网关以及端口号。 数据传输过程如下: 1.    主机连接到WIZ107SR(配置成TCP服务器模式)。 2.    连接建立后, 就可以在主机与WIZ107SR之间进行双向的数据传输。 TCP客户通信模式 如果设置成TCP客户端,WIZ107SR会尝试与服务器建立连接。 为了实现这种模式,需要设置它的本地IP地址、子网掩码、默认网关以及服务器的IP地址和端口号。如果服务器IP具有域名,则使用DNS功能。 在TCP客户模式下,当连接电源时,WIZ107SR可以主动与本地主机建立TCP连接。 数据传输过程如下: 1.    当供应电源时,WIZ107SR扮演客户端并主动与服务器建立连接。 2.    建立连接后,就可以在主机与WIZ107SR之间进行双向的数据传输。 混合通信模式 该模式下,WIZ107SR通常作为服务器,并等待客户端的连接请求。然而,如果在未建立连接时就从串口设备接收数据,WIZ107SR就转换成客户模式,并发送数据给服务器。因此,在混合模式下,服务器模式优先于客户模式,像TCP服务器模式,混合模式对于监控中心为了检测设备状态而尝试连接使用WIZ107SR的串口设备是非常有用的。除此之外,如果串口设备出现任何的紧急情况,模块会自动转换成客户模式,并与服务器建立连接并发送设备的状态。 使用 UDP模式 UDP是一个不定向的通信协议,但需要定义好通信端口。如果选择了UDP模式,串行接口的数据可以被定义从“服务器IP地址”和“端口”进行传输,而且WIZ107SR可以定义成从“远程设备IP地址”接收以太网数据。如果数据接收端与数据源是一样的,那么两个IP地址也就相同,请注意数据接收端与数据源使用相同的端口号。 12 ) DDNS 设置        本版本不支持 DDNS 。  
  • 热度 17
    2012-4-4 12:33
    5639 次阅读|
    0 个评论
    8.1 认识串口原理图 这里所说的串口也叫RS232或这UART(Universal Asynchronous Receiver/Transmitter)。 下面的两个图是串口通信的两种应用场合。   三线制,用于一般的数据收发; 九线制,用于Modem(调制解调器)功能,应用于拨号上网设备,手机等通信设备中。 我们这里主要讨论三线制。 8.2 设置串口 也许很多人在XP下面用过串口,我们在“设备管理器”里面,有一个端口属性,里面就是串口设备,   这些基本的配置,在单片机和ARM里面也有。 8.2.1 波特率 这里第一个要设置的是串口波特率,波特率就是每秒传输的数据位数,用bps来表示。在LPC2136中,波特率通过公式 计算得到。 pclk指CPU的peripheral devices clock。 U0DLM是指UART0除法锁存器(Divisor Latch Register)的高八位; U0DLL是指UART0除法锁存器(Divisor Latch Register)的低八位; (注意:U0DLL的复位值为0) LPC2136 datasheet提供了一个表,我们可以根据这个表设置这两个寄存器的值就行了,很方便。 8.2.2 设置串口数据格式 我们一般设置8位数据位,1个停止位,无奇偶校验位,禁止间隔发送。 注意,我们在设置波特率之前必须,使能访问除数锁存。
相关资源