小弟初学PLC通讯,想用Visual来实现对PLC1500的数据读写练一练手,但是出现了一些问题,想向各位大佬请教一下:
首先我用博图V15组了1515T的CPU,然后利用NettoPLCsim工具将本机地址和PLCSIM的地址连接在一起,利用网上找来的一些基础程序进行实验(程序放到最后),这时我可以进行对数据的读写。
成功后,我使用网线连接了实体CPU1515T,这次没有使用NettoPLCsim工具,把地址更改为了CPU地址,但是这次并不能对PLC里的数据进行读写了,读取数据时报错为:System.InvalidCastException:“指定的转换无效。”向请教各位这是因为什么?
成功的效果图:


失败的图:
附程序:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using S7.Net;
using S7.Net.Types;
using static System.Net.Mime.MediaTypeNames;
namespace LinkPLC
{
public partial class Form1 : Form
{
Plc S71500;//声明一个类型为PLC的内部变量
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
comDT.Items.Add("Int");
comDT.Items.Add("DInt");
comDT.Items.Add("Real");
comDT.Text = "Real";
}
//连接
private void btnLink_Click(object sender, EventArgs e)
{
//创建连接对象
S71500 = new Plc(CpuType.S71500, txtAddress.Text, Convert.ToInt16(textBox3.Text), Convert.ToInt16(textBox2.Text));
S71500.Open();
}
//断开
private void btnBreak_Click(object sender, EventArgs e)
{
S71500.Close();
}
//读数据
private void btnRead_Click(object sender, EventArgs e)
{
//浮点
if(comDT.Text=="Real")
{
double MyPlcData = ((uint)S71500.Read("DB" + txtDB.Text + "." + "DBD" + txtStart.Text)).ConvertToDouble();
MessageBox.Show(MyPlcData.ToString());
}
}
}
}