大致这样给宏培你改:
Private Function Com_return(str As String) As String
MSComm1.Output = str &Chr$(13)
Do
DoEvents
Buffer$ = Buffer$ &MSComm1.Input
Loop Until InStr(Buffer$, vbCr)'读取数据直到回车芹返符响应。
Com_return = Buffer$ '返回数据
End Function
'然后你调用该函数就嫌绝饥返回值了
port0与adam4017/4018用RS-485线路连接,为半双工通信,同一时间只能发送数据或者接收数据,必须确保发送完后才能开始接收数据,接收完数据后才能发送数据。此例设置发送数据标志为m1.0和接收数据标志位m1.0,在主程序按一定时间间隔发出XMT指令,并把M1.0置1,在XMT msg完成中断9里置0,并发出RCV指令,置位M1.1;在RCV msg完成中断里将M1.1清零
读取4018/4017模块,地址为06/07,发送字符串读取指令 “#06”+ 0x0D,其中0x0D为字符串末尾字符,4018返回的数据为:
>+0023.7+0023.7+0023.7+0023.7+0023.7+0017.5+0023.5+0023.7 +0x0D ;该回应以字符“>”开始,以 0x0D结束,每个模块一共8个通道,每个通道占7个字节,因而接收缓冲 区大小1+7*8+1=58字节,因S7-200字符串的第一个字节表示长度,所以一共需要59字节。
在9600bps、无奇偶校验位、1位停止位情况下,最大的传输速率是960字节/秒,(4+58)/960*1000=65ms,其中4位发送字节数,58位接收字节数,XMT发送完成后立即执行RCV指令,在执行XMT之前使用BGN_TIME,在RCV完成中断里使用CAL_TIME,计算一个查询/回应所需的时间,经测试4018需87ms,4017需79ms。回应超时时间设为正常读取信息首液桐所要求时间的1.5倍,取100ms,赋埋散值给寄存器smw92。
Port0 XMT 信息发送完成中断号为9,RCV 信息接收完成中断号为23
因有的s7200cpu只有port0,使用sm0.7位(TERM)来启动和关闭自由口通讯,在term状态下可以使用ppi通信
此程序用两个变量记录XMT发送的次数和RCV成功接收的次数,因为者坦采用先发送再接收的方式查询,若成功接收,这两个变量的值应该相等。
因为有2个模块,将XMT发送次数对2求模,值为0是查询4017,值为1时查询4018,轮流查询。多个模块一次类推;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)