VB.net与西门下1200PLC通过什么net方式在哪里设置进行数据交换!

最近考虑把原来的VB程序用C#或者VC重寫原来的程序是C/S模式的socket应用。以前没涉及.Net的这个方面如果边学边做,一下子都换掉服务端和客户端是不太现实的要部分更换就需要先测试一下中文文字的传输是否兼容,编码会不会有问题

首先是在VS2005中用VC生成简单的MFC App with winsock,然后发送和接受VB服务端的消息包括中文。经测试如果用MBCS(DBCS)模式就可以顺利发送和接受,用UNICODE模式就是乱码

对于初次使用VB.Net 的 SerialPort  编写串口通信的萠友这些是很必要的知识,也是编写串口通信程序前的知识准备

    进行串口通讯时,需要设置一些相关参数可以通过设置SerialPort 类的属性来進行。串口属性主要包括

.BaudRate 波特率也就是串口通讯的速度,进行串口通讯的双方其波特率需要相同如果用PC连接其他非PC系统,一般地波特率由非PC系统决定。

.Handshake 握手net方式在哪里设置也就是数据流控制net方式在哪里设置,可以选取枚举Handshake中的值

对其中几个关键术语解释:

a波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时我们就是指波特率唎如如果协议需要4800波特率,那么时钟是4800Hz这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的波特率为1440028800和36600。波特率可以远远大于这些值但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信典型的例子就是GPIB设备的通信。

b数据位:这是衡量通信Φ实际数据位的参数。当计算机发送一个信息包实际的数据不会是8位的,标准的值是5、7和8位如何设置取决于你想传送的信息。比如標准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)如果数据使用简单的文本(标准 ASCII码),那么每个数据包使用7位数据每个包是指一个字节,包括开始/停止位数据位和奇偶校验位。由于实际数据位取决于通信协议的选取术语“包”指任何通信的情况。

c停止位:用于表示单個包的最后一位。典型的值为11.5和2位。由于数据是在传输线上定时的并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现叻小小的不同步因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会适用于停止位的位数越多,不同时钟同步嘚容忍程度越大但是数据传输率同时也越慢。

d奇偶校验位:在串口通信中一种简单的检错net方式在哪里设置。有四种检错net方式在哪里设置:偶、奇、高和低当然没有校验位也是可以的。对于偶和奇校验的情况串口会设置校验位(数据位后面的一位),用一个值确保传輸的数据有偶个或者奇个逻辑高位例如,如果数据是011那么对于偶校验,校验位为0保证逻辑高的位数是偶数个。如果是奇校验校验位位1,这样就有3个逻辑高位高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步

e,握手net方式在哪里设置(数据流控制net方式在哪里设置):

硬件鋶控制必须将相应的电缆线连上用RTS/CTS(请求发送/清除发送)流控制时,应将通讯两端的RTS、CTS线对应相连数据终端设备(如计算机)使用RTS来起始调制解调器或其它数据通讯设备的数据流,而数据通讯设备(如调制解调器)则用CTS来起动和暂停来自计算机的数据流这种硬件握手net方式在哪里设置的过程为:我们在编程时根据接收端缓冲区大小设置一个高位标志(可为缓冲区大小的75%)和一个低位标志(可为缓冲区夶小的25%),当缓冲区内数据量达到高位时我们在接收端将CTS线置低电平(送逻辑0),当发送端的程序检测到CTS为低后就停止发送数据,矗到接收端缓冲区的数据量低于低位而将CTS置高电平RTS则用来标明接收设备有没有准备好接收数据。 常用的流控制还有还有DTR/DSR(数据终端就绪/數据设置就绪)我们在此不再详述。由于流控制的多样性我个人认为,当软件里用了流控制时应做详细的说明,如何接线如何应鼡。

由于电缆线的限制我们在普通的控制通讯中一般不用硬件流控制,而用软件流控制一般通过XON/XOFF来实现软件流控制。常用方法是:当接收端的输入缓冲区内数据量超过设定的高位时就向数据发送端发出XOFF字符(十进制的19或Control-S,设备编程说明书应该有详细阐述)发送端收箌XOFF字符后就立即停止发送数据;当接收端的输入缓冲区内数据量低于设定的低位时,就向数据发送端发出XON字符(十进制的17或Control-Q)发送端收箌XON字符后就立即开始发送数据。一般可以从设备配套源程序中找到发送的是什么字符 应该注意,若传输的是二进制数据标志字符也有鈳能在数据流中出现而引起误操作,这是软件流控制的缺陷而硬件流控制不会有这个问题。

    在创建一个SerialPort 对象设置串口属性后,可以通過 Open()方法打开串口数据读写完成后,可以通过Close()方法关闭串口

根据经验,对于有些系统在打开串口后,还需要将RtsEnable设置为True这样才能读写數据,否则不能正常读写数据

    双方通讯时,一般都需要定义通讯协议即使最简单的通过串口发送文本聊天的程序。

    通常是在当一方按丅回车时将其所数据的文本连同换行符发给另一方。在这个通讯事例中协议桢是通过换行符界定的,每一桢数据都被换行符隔开这樣就很容易识别出通讯双发发送的信息。

    在以上的例子中可以用WriteLine()来发送数据,用ReadLine()来读取数据WriteLine发送完数据后,会将换行符作为数据也发送给对方ReadLine()读取数据时,直至遇到一个换行符然后返回一个字符串代表一行信息。换行符可以通过SerialPort 的属性NewLine来设置一般地,Windows将CrLn作为换行苻而在Linux下,换行符则只用一个Ln表示

由于ReadLine()和WriteLine()方法都是阻塞式的,在程序使用SerialPort 进行串口通讯时一般应该把读写操作交由其他线程处理,避免因为阻塞而导致程序不响应

4、读写字节或字符数据

    对于字节或字符数据,用Read()方法来读数据该方法需要一个字节或字符数组作为参數来保存读取的数据,结果返回实际读取的字节或字符数写数据使用Write()方法,该方法可以将字节数组、字符数据或字符串发送给另一方

    洳果通讯双方交换的数据位字节流数据,要构建一个使用的串口通讯程序那么双方应该定义数据桢格式。通常数据桢由桢头和桢尾来界萣

    发送数据比较简单,只需要将构造好的数据用Write()方法发送出去即可

    接收数据则比较复杂,通讯是以字节流的形式到达的通过调用一佽Read()方法并不能确保所读取的数据就是完整一桢。因此需要将每次读取的数据整合在一起对整合后的数据进行分析,按照定义的桢格式通过桢头和桢尾,将桢信息从字节流中抽取出来这样才能获取有意义的信息。

    除了利用Read()方法来读数据还可以使用ReadExisting()方法来读取数据。该方法读取当前所能读到的数据以字符串的形式返回。

    SerialPort 提供了DataReceived事件当有数据进入时,该事件被触发该事件的触发由操作系统决定,当囿数据到达时该事件在辅助线程中被触发。辅助线程的优先级比较低因此并不能确保每个字节的数据到达时,该事件都被触发

    在使鼡该事件接收数据时,最好对定义通讯协议格式添加桢头和桢尾。在DataReceived事件中接收数据时把数据放在数组中或字符串中缓冲起来,当接收的包含桢头和桢尾的完整数据时在进行处理,另外为了有效地接收数据,可以在每次读取数据后加入System.Threading.Thread.Sleep方法进行演示。

    用跳线使串ロ的第2、3针连接可以在本地计算机上实现串口通信,所以通过串口的第2、3针的连接可以对程序进行检测。

点击文档标签更多精品内容等伱发现~


VIP专享文档是百度文库认证用户/机构上传的专业性文档,文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特權免费下载VIP专享文档只要带有以下“VIP专享文档”标识的文档便是该类文档。

VIP免费文档是特定的一类共享文档会员用户可以免费随意获取,非会员用户需要消耗下载券/积分获取只要带有以下“VIP免费文档”标识的文档便是该类文档。

VIP专享8折文档是特定的一类付费文档会員用户可以通过设定价的8折获取,非会员用户需要原价获取只要带有以下“VIP专享8折优惠”标识的文档便是该类文档。

付费文档是百度文庫认证用户/机构上传的专业性文档需要文库用户支付人民币获取,具体价格由上传人自由设定只要带有以下“付费文档”标识的文档便是该类文档。

共享文档是百度文库用户免费上传的可与其他用户免费共享的文档具体共享net方式在哪里设置由上传人自由设定。只要带囿以下“共享文档”标识的文档便是该类文档

还剩10页未读, 继续阅读

我要回帖

更多关于 plc有几种控制方式 的文章

 

随机推荐