求VB2010与松下PLC串口通信的代码

lyh0528 2013-07-18 10:58:32
求VB2010与松下PLC串口通信的代码
...全文
365 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xpowerrock 2013-07-23
想当年我也是学计算机的
回复
sosoben 2013-07-22
引用 5 楼 u011344309 的回复:
谢谢楼上两位的帮助,我是个新手,会试着用下先,看能不能达到工作中的要求,主要是控制PLC命令,再由PLC控制电机转动,向上,向左,和向右,不知两们有没有例子的代码给我看看?
plc控制电机转动是要输脉冲的,你先编好PLC的程序吧,要不输出脉冲那里电脑很难控制。 一般控制电机我是用运动控制卡,或者电机的带串口或USB口的驱动盒
回复
lyh0528 2013-07-22
PLC的程序由同事负责,我主要是做VB程序 新手啊,啥都不知道
回复
lyh0528 2013-07-21
谢谢楼上两位的帮助,我是个新手,会试着用下先,看能不能达到工作中的要求,主要是控制PLC命令,再由PLC控制电机转动,向上,向左,和向右,不知两们有没有例子的代码给我看看?
回复
sosoben 2013-07-19
我就是用**代替校验位的,plc能正确接收 当然你一定要算出校验位也行,校验码是将指令中的各个ASCII字符的16进制(00~FF)进行异或求和后生成的. 该校验码也以两个ASCII码表示

serialPort1.NewLine = "\r";
serialPort1.Open();
serialPort1.WriteLine("%01#WCSR00011**");//控制开关R0001的打开
System.Threading.Thread.Sleep(100);
serialPort1.WriteLine("%01#WCSR00010**");//控制开关R0001的关闭
回复
良朋 2013-07-19
它这份资料里有点bug, 按它的写,你的校验位只好用*号代替了,我是反复尝试才写出上面正确代码的。楼主请按我的写,没有比这个更简单的代码了
回复
sosoben 2013-07-19
回复
良朋 2013-07-19
Dim Spiecal_Text_1 As String = "%01#WCSR030" & (i + 1).ToString & "1"
                    Dim Spiecal_Text_0 As String = "%01#WCSR030" & (i + 1).ToString & "0"

                    Dim PLC_Command_1 As String = Spiecal_Text_1 & calculate_for_plc(Spiecal_Text_1) & vbCr
                    Dim PLC_Command_0 As String = Spiecal_Text_0 & calculate_for_plc(Spiecal_Text_0) & vbCr

                    SerialPort1.WriteLine(PLC_Command_1)
                    Thread.Sleep(10)
                    SerialPort1.WriteLine(PLC_Command_0)
 '将asc码后转换成16进制后相与
    Function calculate_for_plc(ByVal str)
        Dim s As String = Nothing
        For i As Integer = 1 To Len(str)
            s = s Xor AscW(Mid(str, i, 1))
        Next
        Return Hex(s)
    End Function
回复
相关推荐
发帖
VB
创建于2007-09-28

1.6w+

社区成员

VB技术相关讨论,主要为经典vb,即VB6.0
申请成为版主
帖子事件
创建了帖子
2013-07-18 10:58
社区公告
暂无公告