Tia Portal 安装,1200 仿真,上位机读写数据
1.安装TIA Portal 16和 PLCSIM16
链接:https://pan.baidu.com/s/1hcFn18KvlIQqMt9tChfo2A
提取码:5ahd
安装过程都是下一步即可,遇到不停提示重启计算机,在
计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager删除
PendingFileRenameOperations即可。
注册
找到TIA Portal 下面的TIA Portal v16 中的3211注册即可。再注册PLCSIM
2.仿真的设置
打开Tia Portal,新建一个工程。
根据当前网络,设置下CPU
写一个测试程序
监视变量
下面操作注意顺序:
A: 管理员权限打开NetToPLCsim,点击“是”。
B:点击开始仿真
C:点击NetToPLCsim的Add,
第一个IP地址是本机IP,也是上位机要连接的地址,第二个是在Portal中设置的PLCSIM的地址。
D:点击Start Server
3.上位机读写
Nuget安装s7netplus,
连接后将M0.1写为1,
Plc plc = null; public Form1() { InitializeComponent(); } private void Connect_Click(object sender, EventArgs e) { try { plc = new Plc(CpuType.S71200, this.IP.Text, 0, 1); plc.Open(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); return; } this.Text = "Connection OK"; this.Connect.Enabled = false; } private void SetM01_Click(object sender, EventArgs e) { plc.WriteBit(DataType.Memory, 0, 0, 1, true); }
DB块的使用
新建一个DB块,右键,属性,取消勾选 优化的块访问
重新编译下载。
4读写例子说明
单个数据
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#region 单个数据项读取 var db1Bool1 = plc.Read("DB1.DBX0.0"); Console.WriteLine("DB1.DBX0.0: " + db1Bool1); bool db1Bool2 = (bool)plc.Read("DB1.DBX0.1"); Console.WriteLine("DB1.DBX0.1: " + db1Bool2); // Int int intVariable = (ushort)plc.Read("DB1.DBW2.0"); Console.WriteLine("DB1.DBW2.0: " + intVariable); // Real var realVariabl = ((uint)plc.Read("DB1.DBD4.0")).ConvertToFloat(); Console.WriteLine("DB1.DBD4.0: " + realVariabl); // DInt var dIntVariable = (uint)plc.Read("DB1.DBD8.0"); Console.WriteLine("DB1.DBD8.0: " + dIntVariable); // DWord var dWordVariable = (uint)plc.Read("DB1.DBD12.0"); Console.WriteLine("DB1.DBD12.0: " + dWordVariable); // Word var wordVariable = (ushort)plc.Read("DB1.DBW16.0"); Console.WriteLine("DB1.DBW16.0: " + wordVariable); #endregion
批量
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#region 批量数据项读取 / 读取整个DB // DataType: 数据类型,DB或Memory等 // DB : DataBlock=1,Memory=0 // count : 偏移量(offset),设置多少就获取到具体位置的数据 // eg: 比如最后一个DBW是16,那么数据类型长度为2,count就需要传18才能获取到 var bytes = plc.ReadBytes(DataType.DataBlock, 1, 0, 18); Console.WriteLine(bytes); var bool1 = bytes[0].SelectBit(0); Console.WriteLine("DB1.DBX0.0: " + bool1); var bool2 = bytes[0].SelectBit(1); Console.WriteLine("DB1.DBX0.0: " + bool2); // Int int intVariable = S7.Net.Types.Int.FromByteArray(bytes.Skip(2).Take(2).ToArray()); Console.WriteLine("DB1.DBD2.0: " + intVariable); // Real Double realVariable = S7.Net.Types.Double.FromByteArray(bytes.Skip(4).Take(4).ToArray()); Console.WriteLine("DB1.DBD4.0: " + realVariable); // DWord uint dWordVariable = S7.Net.Types.DWord.FromByteArray(bytes.Skip(12).Take(4).ToArray()); Console.WriteLine("DB1.DBD12.0: " + dWordVariable); // Word var wordVariable = S7.Net.Types.Word.FromByteArray(bytes.Skip(16).Take(2).ToArray()); Console.WriteLine("DB1.DBW16.0: " + wordVariable); #endregion