连接PLC(2)

S7配置:
TIA Portal V14 显示授权不完整,已经重启后直接管理员身份运行
选择s7-1500,PLC右键-general-protection and security-connection mechanisms-properties选择允许外部put/get操作
新建program block-data block,这是要传输的数据,按照数据类型编写,测试每一种数据类型是否能传输。右键DB1-properties-general-Attributes-取消优化的块访问,才能显示offset
编写完数据compile计算偏移量,simulation.
download the setting ,finish

NetToPLCSIM
sim连接 127.0.0.1,192.168.0.1,
Plcsim Rack/Slot中Rack为机架号,Slot为插槽号,这两个可以在PLC的设备组态属性->项目信息中找到
Start Server开启服务
“Port 102 is in use!”的警告,如果遇到这个情况,点击是,之后在将PLCSIM关掉重新启动一下就可以了。

VS code 部分:

  1. 导入S7.net通信文件:打开tool->NuGet包管理器->管理解决方案得NuGet程序包,搜索S7,安装S7netplus

  2. 在需要的cs文件中加入using S7.Net;比如建立一个SiemensPLC类

  3. massageBox在using System.Windows;里,弹窗提示框

  4. Plc plc = new Plc(CpuType.S71500, "127.0.0.1", 0, 1);//连接使用回环地址

  5. 配置完成后,使用plc.Open()来打开,在最早的一个版本中,Open有返回值,可以通过返回值获取 ErrorCode 和 ErrorMessage,目前使用的是最新版0.8.1.0(1.2.5.0),没有返回值,所以用try…catch来接收异常

  6. DBX、DBW和DBD是西门子S7-1500中的数据类型之一。DBX是指位(bit)类型,DBW是指字(word)类型,DBD是指双字(double word)类型。这些数据类型可以用于数据块(data block)中的变量(variable)。

  7. address out of rage---solved 修改后的program要download进sim后才生效。

  8. 单步read:

         bool db1Bool2 = (bool)plc.Read("DB1.DBX0.1");
         Console.WriteLine("DB1.DBX0.1:" + db1Bool2);
         MessageBox.Show("DB1.DBX0.1:" + db1Bool2);
    
    
         int IntVariable = (ushort)plc.Read("DB1.DBW2.0");
         Console.WriteLine("DB1.DBW2.0:" + IntVariable);
         MessageBox.Show("DB1.DBX2.0:" + IntVariable);
    
    
         float RealVariable = ((uint)plc.Read("DB1.DBD4")).ConvertToFloat();
         Console.WriteLine("DB1.DBD4:" + RealVariable);
         MessageBox.Show("DB1.DBD4:" + RealVariable);
    
         var dIntVariable = (uint)plc.Read("DB1.DBD8.0");
         Console.WriteLine("DB1.DBD8.0: " + dIntVariable);
         MessageBox.Show("DB1.DBD8.0: " + dIntVariable);
    
         var dWordVariable = (uint)plc.Read("DB1.DBD12.0");
         Console.WriteLine("DB1.DBD12.0: " + Convert.ToString(dWordVariable, 16));
         MessageBox.Show("DB1.DBD12.0: " + Convert.ToString(dWordVariable, 16));
    
         var wordVariable = (ushort)plc.Read("DB1.DBW16.0");
         Console.WriteLine("DB1.DBW16.0: " + Convert.ToString(wordVariable, 16));
         MessageBox.Show("DB1.DBW16.0: " + Convert.ToString(wordVariable, 16));
    
  9. readByte

  10. 单步write
    从前端读取数据
    bool bool1 = (this.Bool1.IsChecked == true);//bool
    bool bool2 = (this.Bool2.IsChecked == true);//bool
    short Int = Convert.ToInt16(this.Int.Text);//short
    double Real = Convert.ToSingle(this.Real.Text);//float
    var Dint = Convert.ToInt32(this.Dint.Text);//int
    var Dword = Convert.ToUInt32(this.Dword.Text);//uint
    var Word = Convert.ToUInt16(this.Word.Text);//ushort

        plc.Write("DB1.DBX0.0", bool1);
    

注意长度不能超出类型范围

在 C# 中,类型转换有两种形式:

隐式类型转换(默认) - 将较小的类型转换为较大的类型大小,这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。
char -> int -> long -> float -> double
显式类型转换 (强制类型转换)。显式转换需要强制转换运算符,而且强制转换会造成数据丢失。
double -> float -> long -> int -> char

        bool bool1 = (this.Bool1.IsChecked == true);//bool
        bool bool2 = (this.Bool2.IsChecked == true);//bool
        short Int = Convert.ToInt16(this.Int.Text);//short
        double Real = Convert.ToSingle(this.Real.Text);//float
        var Dint = Convert.ToInt32(this.Dint.Text);//int
        var Dword = Convert.ToUInt32(this.Dword.Text);//uint
        var Word = Convert.ToUInt16(this.Word.Text);//ushort

C#数据类型所占字节数:
bool -> System.Boolean (布尔型,其值为 true 或者 false)
byte -> System.Byte (字节型,占 1 字节,表示 8 位正整数,范围 0 ~ 255)
sbyte -> System.SByte (带符号字节型,占 1 字节,表示 8 位整数,范围 -128 ~ 127)
char -> System.Char (字符型,占有两个字节,表示 1 个 Unicode 字符)
short -> System.Int16 (短整型,占 2 字节,表示 16 位整数,范围 -32,768 ~ 32,767)
ushort -> System.UInt16 (无符号短整型,占 2 字节,表示 16 位正整数,范围 0 ~ 65,535)
uint -> System.UInt32 (无符号整型,占 4 字节,表示 32 位正整数,范围 0 ~ 4,294,967,295)
int -> System.Int32 (整型,占 4 字节,表示 32 位整数,范围 -2,147,483,648 到 2,147,483,647)
float -> System.Single (单精度浮点型,占 4 个字节)
ulong -> System.UInt64 (无符号长整型,占 8 字节,表示 64 位正整数,范围 0 ~ 大约 10 的 20 次方)
long -> System.Int64 (长整型,占 8 字节,表示 64 位整数,范围大约 -(10 的 19) 次方 到 10 的 19 次方)
double -> System.Double (双精度浮点型,占8 个字节)

显式转换
Convert.ToString(myInt); // 将 int 转换为字符串
Convert.ToInt16(123);
Convert.ToInt32(myDouble); // 将 double 转换为 int
Convert.ToDouble(myInt); // 将 int 转换为 double
Convert.ToString(myBool); // 将布尔转换为字符串
Convert.ToSingle(11.111);
Convert.ToUInt32(22);
Convert.ToUInt16(33);

Siemens数据类型与C#对应:
Bit => bool
Byte => byte
word => ushort
DWord => uint
Int => short
DInt => int
Real => float
LReal => double
String => string

  1. writeByte

  2. c#快捷键大全CTRL+k,c 注释选中行 CTRL+k,u 取消对选中行的注释 CTRL + SHIFT + B

posted @ 2023-10-19 13:14  Meou~  阅读(49)  评论(0编辑  收藏  举报