今天看了一遍手册,好累呀!!!!
要解决通讯问题,需要注意以下几个方面
1。确认接线是否正确。这需要查PCL-740的手册。我印象中试1脚接DATA-,2脚接DATA+,和上面的一位朋友给出的是相反的。
2。设置温控器的通讯模式。可参考手册的第5到15页,有图,应该容易看懂。注意,设置完后要重新加电。
3。软件编程。在这里我假设温控器的设置是地址:00,波特率 9600 ,8位数据位,1位停止位。
Const SETTINGS = "9600,n,8,1" '定义串口的状态
Const COMPORT = 4 '定义串口号
Const ADDRESS1 = "00" '定义地址号
Const EOT=CHR$(04)
Const ENQ=CHR$(05)
Const STX=CHR$(02)
Const ETX=CHR$(03)
Const ACK=CHR$(06)
Const NAK=CHR$(21)
Const MSCOMM_EV_RECEIVE = 2 '收到了MSComm1.RThreshold个字符
Const MSCOMM_ER_RXOVER = 1008 '接收缓冲区溢出
Const MSCOMM_ER_TXFULL = 1010 '传输缓冲区溢出
Const TIME = 0 '设定扫描时间
Dim Volume, Flow, Temperature, Pressure As Double '定义双精度变量
Dim i As Single '定义循环变量
Dim InData, OutData As String '定义字符串变量
Private Sub Form_Load() '窗体初始化
Call InitPort '初始化端口
Timer1.Interval = TIME '设定定时器时间
Timer1.Enabled = True '启动定时器
End Sub
Private Sub InitPort() '端口初始化
MSComm1.SETTINGS = SETTINGS
MSComm1.CommPort = COMPORT
MSComm1.InputLen = 32
MSComm1.InBufferSize = 512
MSComm1.InBufferCount = 0
MSComm1.OutBufferSize = 512
MSComm1.OutBufferCount = 0
MSComm1.PortOpen = True
End Sub
Private Sub SendAddress() '发送流量计地址
MSComm1.Output = OutData
Do '等待发送完成
Loop Until MSComm1.OutBufferCount = 0
MSComm1.InBufferCount = 0 '清空接收缓冲区
MSComm1.RThreshold = 32 '设定接收字符数
End Sub
Private Sub MSComm1_OnComm() '等待完成接受
这里我省略了错误判断的内容
InData = MSComm1.Input
If Left(InData, 1) = STX And Left(Right(InData, 2),1) = ETX Then '判断接收数据的头和尾,如果想进一步判断,还可以计算BBC ,并和得到的BBC进行比较,这里我没做。
Volume = Val(Mid(InData, 3, 8)) 数值转换,Volume为读到的数据
OutData=ACK,确认收到
Call SendAddress
Else
OutData=NAK,确认未收到,重发
Call SendAddress
End If
End Sub
Private Sub Timer1_Timer() '定时器到设定时间后,开始发送启动和地址码
OutData = EOT + ADDRESS1 + "M1" +ENQ , 读取M1所定义的数据,M1的定义在手册28页
Call SendAddress
End Sub
匆忙之中,如果有不对的地方,还请海涵,这里我只实现了polliing 的一个功能,其余的就举一反三吧
由于手头没有设备,没有调试!!