<span style="font-family:Microsoft YaHei;">不懂怎么写博客:</span>
<span style="font-family:Microsoft YaHei;"><img src="https://img-blog.csdn.net/20140829112750138?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGxpbWl0ZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
</span>
<span style="font-family:Microsoft YaHei;">Imports System.IO.Ports
Imports IronPython.Hosting
Imports Microsoft.Scripting.Hosting
Imports Microsoft.Scripting.Runtime
Imports System.Threading
Module Test
Sub Main()
Dim obj As Object
Dim sciptrt As ScriptRuntime = Python.CreateRuntime()
obj = sciptrt.UseFile("testpy.py")
REM 本来是想传递串口类给Python的,但是对象不能通用。
REM Dim sp As New SerialPort("COM3", 9600)
REM sp.Open()
REM 创建Python串口对象
Dim pysp As Object
REM 初始化Python串口,这个要看Python脚本怎么写了
pysp = obj.initCOM(1)
REM 串口返回的数据,跟Byte数组也不一样
REM Imports Microsoft.Scripting.Runtime
Dim receive As IronPython.Runtime.Bytes
Dim r() As Byte
Dim tmpstr As String
For i = 0 To 255
REM Python串口发送,返回到receive中,这个也要看Python脚本怎么写
receive = obj.send01(pysp, i)
REM 类型转换
r = receive.ToArray()
REM 格式化输出
For n = 0 To r.Length - 1
tmpstr += r(n).ToString("X2") + " "
Next
Console.WriteLine("receive:" + tmpstr)
tmpstr = ""
Thread.Sleep(1000)
Next
Console.ReadKey()
End Sub
End Module</span>
python script("testpy.py"):
<span style="font-family:Microsoft YaHei;">#THIS PYTHON SCRIPT IS CONTROL HSC8D8D IO CARD
import serial
import string
import time
clock01check= [0xAA ,0xF9, 0x01, 0xFE, 0x01, 0xFE, 0x00, 0xAB]
hs01check=[0x01 ,0x02 ,0x00 ,0x00 ,0x00 ,0x08 ,0x79 ,0xCC]
hs02check=[0x02 ,0x02 ,0x00 ,0x00 ,0x00 ,0x08 ,0x79 ,0xFF]
hs03check=[0x03 ,0x02 ,0x00 ,0x00 ,0x00 ,0x08 ,0x78 ,0x2E]
################################################
def crc16(data):
ret=[]
lo=0xff
hi=0xff
cl=0x01
ch=0xa0
#print ("data size:%d"%len(data))
for i in data:
ret.append(i)
#print(" LO:%d"%lo)
lo=lo ^ int(i)
#print(" LO:%d"%lo)
for flag in range(0,8):
savehi=hi
savelo=lo
hi=hi>>1
lo=lo>>1
if((savehi & 0x01)==0x01):
lo=lo | 0x80
if((savelo & 0x01)==0x01):
hi=hi ^ ch
lo=lo ^ cl
#print("%d-%d"%(hi,lo))
else:
ret.append(lo)
ret.append(hi)
return ret
def printonX(data):
print "write:"+" ".join(["0x%02x" %ord(chr(x)) for x in crc16(data)])
return "write:"+" ".join(["0x%02x" %ord(chr(x)) for x in crc16(data)])
################################################
def check01(sp):
sp.write(hs01check)
return sp.read(6)
def check02(sp):
sp.write(hs02check)
return sp.read(6)
def check03(sp):
sp.write(hs03check)
return sp.read(6)
def initCOM(nCode):
return serial.Serial(nCode)
def setBaduRate(sp,baudrate):
sp.serBaudrate(baudrate)
def setTimeOut(sp,t):
sp.timeout=t
def close(sp):
sp.close()
################################################
def send01(sp,c):
data=[0x01,0x0F,0x00,0x00,0x00,0x08,0x01]
data.append(c)
if(sp.isOpen):
print sp.portstr +"State: IsOpen"
try:
sp.write(bytes(crc16(data)))
except Exception,e:
print e
finally:
print "write:"+" ".join(["0x%02x" %ord(chr(x)) for x in crc16(data)])
return sp.read(8)
################################################
def send02(sp,c):
data=[0x02,0x0F,0x00,0x00,0x00,0x08,0x01]
data.append(c)
if(sp.isOpen):
print sp.portstr +"State: IsOpen"
try:
sp.write(bytes(crc16(data)))
except Exception,e:
print e
finally:
print "write:"+" ".join(["0x%02x" %ord(chr(x)) for x in data])
return sp.read(8)
################################################
def send03(sp,c):
data=[0x03,0x0F,0x00,0x00,0x00,0x08,0x01]
data.append(c)
if(sp.isOpen):
print sp.portstr +"State: IsOpen"
try:
sp.write(bytes(crc16(data)))
except Exception,e:
print e
finally:
print "write:"+" ".join(["0x%02x" %ord(chr(x)) for x in data])
return sp.read(8)
################################################
</span>
把testpy.py生成在文件夹中。并添加python的第三方库.pyserial。目前好像只支持2.7。所用的IronPython版本2.7.4。
资源下载:http://download.csdn.net/detail/llimite/7837853