chao 10 ماه پیش
والد
کامیت
e7c6985f85
9فایلهای تغییر یافته به همراه232 افزوده شده و 90 حذف شده
  1. 74 23
      blockly/blocks/python/esp32.js
  2. 3 0
      blockly/msg/js/en.js
  3. 3 0
      blockly/msg/js/zh-hans.js
  4. 3 0
      blockly/msg/js/zh-hant.js
  5. 1 0
      msg/en.js
  6. 1 0
      msg/zh-hans.js
  7. 1 0
      msg/zh-hant.js
  8. 44 32
      src/editor.js
  9. 102 35
      src/python/GPT/文生图.xml

+ 74 - 23
blockly/blocks/python/esp32.js

@@ -267,12 +267,12 @@ sys.path.append("/root/")`
     os.system("echo PG6 5 > /sys/kernel/debug/sunxi_pinctrl/function")
     os.system("echo PG7 5 > /sys/kernel/debug/sunxi_pinctrl/function")
 `)
-        Blockly.Python.addVariable(`pinMode${value_name}`,`pinMode("${value_name}","0")`,true)
+        Blockly.Python.addVariable(`pinMode${value_name}`, `pinMode("${value_name}","0")`, true)
         code = `digitalRead("${value_name}")`
     }
-    else if(value_name == 7 || value_name == 8 || value_name == 13) {
+    else if (value_name == 7 || value_name == 8 || value_name == 13) {
         Blockly.Python.definitions_['v831_import_CocoPi_BUTTON'] = `from CocoPi import BUTTON `;
-        Blockly.Python.addFunction("getBUTTONNum",`def getBUTTONNum(data):
+        Blockly.Python.addFunction("getBUTTONNum", `def getBUTTONNum(data):
     if data:
         return 1
     else:
@@ -280,7 +280,7 @@ sys.path.append("/root/")`
 `)
         Blockly.Python.addVariable('_Math_gpio_' + value_name, `_Math_gpio_${value_name} = BUTTON(${value_name})`, true);
         code = `getBUTTONNum(_Math_gpio_${value_name}.is_pressed())`;
-    }else{
+    } else {
         let gpioNum = value_name - 21
         Blockly.Python.definitions_['v831_import_CocoPi_extGpio'] = `from CocoPi import extGpio`;
         Blockly.Python.definitions_['v831_import_CocoPi_extGpio_init'] = `InputGpio = extGpio()`;
@@ -498,8 +498,8 @@ sys.path.append("/root/")`
         Blockly.Python.addVariable('MATHOUT' + value_name, `MATHOUT${value_name} = multiFuncGpio(${value_name - 1},3)`, true);
         code = `MATHOUT${value_name}.digitalWrite(${high_low})
 `
-    } else if (value_name == "PG6" || value_name == "PG7" ||value_name == "PC0" || value_name == "PC1" || value_name == "PC2" || value_name == "PC3") {
-        
+    } else if (value_name == "PG6" || value_name == "PG7" || value_name == "PC0" || value_name == "PC1" || value_name == "PC2" || value_name == "PC3") {
+
         Blockly.Python.addFunction("pinMode", `def pinMode(pin,mode):
     os.system(f"echo {pin} {mode} > /sys/kernel/debug/sunxi_pinctrl/function")
 `)
@@ -528,7 +528,7 @@ sys.path.append("/root/")`
     os.system("echo PG6 5 > /sys/kernel/debug/sunxi_pinctrl/function")
     os.system("echo PG7 5 > /sys/kernel/debug/sunxi_pinctrl/function")
 `)
-        Blockly.Python.addVariable(`pinModeOut${value_name}`,`pinMode("${value_name}","1")`,false)
+        Blockly.Python.addVariable(`pinModeOut${value_name}`, `pinMode("${value_name}","1")`, false)
         code = `digitalWrite("${value_name}","${high_low}")
 `
     } else {
@@ -3138,7 +3138,7 @@ Blockly.Python['esp32_main_controller_wifi_enable_hotspot_mode'] = function (blo
 };
 
 Blockly.Blocks["V831_code_scanning_network"] = {
-    init:function(){
+    init: function () {
         this.appendDummyInput()
             .appendField(Blockly.Msg.V831_code_scanning_network);
         this.setInputsInline(false);
@@ -3149,7 +3149,7 @@ Blockly.Blocks["V831_code_scanning_network"] = {
         this.setHelpUrl("");
     }
 }
-Blockly.Python["V831_code_scanning_network"] = function(block){
+Blockly.Python["V831_code_scanning_network"] = function (block) {
     Blockly.Python.definitions_['v831_import_mjpg'] = `from maix import mjpg`
     Blockly.Python.definitions_['v831_import_utils'] = `from maix import utils`
     Blockly.Python.definitions_['v831_import_base64'] = `import base64`
@@ -3203,11 +3203,11 @@ def wifi_is_content():
 `
     let language = localStorage.getItem('handPyLanguage')
     let str = ""
-    if(language == "zh-hant"){
+    if (language == "zh-hant") {
         str = "請掃描平臺Wi-Fi二維碼聯網"
-    }else if(language =="en"){
+    } else if (language == "en") {
         str = "Please scan the platform Wi-Fi QR code for networking"
-    }else{
+    } else {
         str = "请扫描平台Wi-Fi二维码联网"
     }
     Blockly.Python.definitions_[`v831_display_show_canvas`] = `def v831_display_show_canvas(displayShow,_canvas_x,_canvas_y):
@@ -3232,7 +3232,7 @@ def wifi_is_content():
         display.show(displayShowCanvas)
     
 `
-    Blockly.Python.addFunction("codeScanningNetwork",`def codeScanningNetwork():
+    Blockly.Python.addFunction("codeScanningNetwork", `def codeScanningNetwork():
     if wifi_is_content():
         stateNetwork = 1
     else:
@@ -3263,7 +3263,7 @@ def wifi_is_content():
             elif stateNetwork == 1:
                 break
 `
-)
+    )
     var code = `image.load_freetype("/root/preset/fonts/simhei.ttf")
 codeScanningNetwork()\n`
     return code;
@@ -6143,6 +6143,57 @@ Blockly.Python['esp32_network_http_get'] = function (block) {
     return code;
 };
 
+Blockly.Blocks['cocopi_email_send'] = {
+    init: function () {
+        this.appendDummyInput()
+            .appendField(Blockly.Msg.send_email_title);
+        this.appendValueInput("email")
+            .setCheck(null)
+            .appendField(Blockly.Msg.send_email_to);
+        this.appendValueInput("email_content")
+            .setCheck(null)
+            .appendField(Blockly.Msg.send_email_content);
+        this.setOutput(true);
+        // this.setPreviousStatement(true, null);
+        // this.setNextStatement(true, null);
+        this.setColour(NETWORK_BLOCK_COLOR);
+        this.setTooltip(Blockly.Msg.Esp32_Network_Http_Get_TOOLTIP);
+        this.setHelpUrl("");
+    }
+};
+
+
+Blockly.Python['cocopi_email_send'] = function (block) {
+    var Email = Blockly.Python.valueToCode(block, 'email', Blockly.Python.ORDER_ATOMIC);
+    var EmailContent = Blockly.Python.valueToCode(block, 'email_content', Blockly.Python.ORDER_ATOMIC);
+
+    Blockly.Python.definitions_['v831_import_requests'] = `import requests`
+    Blockly.Python.definitions_['v831_import_json'] = `import json`;
+    // TODO: Assemble Python into code variable.
+    Blockly.Python.addFunction(`send_email`, `def send_email(email,content):
+    params = {
+        "email": email,
+        "content": content,
+        "subject":"训练平台",
+        "content_type":'plain'
+    }
+    emailURL = "https://traininguser-api.cocorobo.cn/sendEmail"
+    try:
+        r = requests.post(emailURL,json=params)
+        print(json.loads(r.text))
+        if json.loads(r.text)["FunctionResponse"] == "发送成功":
+            return True
+        else:
+            return False
+    except Exception as e:
+        print(e)
+        return False
+    `)
+
+    var code = `send_email(${Email},${EmailContent})`;
+    return [code, Blockly.Python.ORDER_NONE];
+};
+
 
 Blockly.Blocks['esp32_network_http_post'] = {
     init: function () {
@@ -7347,7 +7398,7 @@ Blockly.Python['turtle_clear'] = function (block) {
 Blockly.Blocks['v831_room_water_temperature'] = {
     init: function () {
         this.appendDummyInput("")
-            .appendField("IIC"+Blockly.Msg.room_water_temperature_text);
+            .appendField("IIC" + Blockly.Msg.room_water_temperature_text);
 
         // this.setInputsInline(true);
         this.setOutput(true);
@@ -7519,11 +7570,11 @@ Blockly.Python['v831_room_water_temperature'] = function (block) {
 
 ds = Ds18b20("/dev/ttyS1")
 `;
-//     Blockly.Python.addFunction("getRoomWaterTemperature", `def getRoomWaterTemperature():
-//     serial_num = ds.get_single_rom_code()
-//     temperature = ds.get_temperature()
-//     return temperature
-// `, true)
+    //     Blockly.Python.addFunction("getRoomWaterTemperature", `def getRoomWaterTemperature():
+    //     serial_num = ds.get_single_rom_code()
+    //     temperature = ds.get_temperature()
+    //     return temperature
+    // `, true)
     var code = 'ds.get_temperature()';
     return [code, Blockly.Python.ORDER_ATOMIC];
 };
@@ -7532,10 +7583,10 @@ Blockly.Blocks['v831_set_real_time_clock'] = {
     init: function () {
         let nowDate = new Date();
         this.appendDummyInput()
-            .appendField("IIC"+Blockly.Msg.time_set_current_date_title)
+            .appendField("IIC" + Blockly.Msg.time_set_current_date_title)
             .appendField(new Blockly.FieldTextInput(nowDate.getFullYear()), "year")
             .appendField(Blockly.Msg.time_get_current_date_y)
-            .appendField(new Blockly.FieldTextInput(nowDate.getMonth()+1), "month")
+            .appendField(new Blockly.FieldTextInput(nowDate.getMonth() + 1), "month")
             .appendField(Blockly.Msg.time_get_current_date_m)
             .appendField(new Blockly.FieldTextInput(nowDate.getDate()), "day")
             .appendField(Blockly.Msg.time_get_current_date_d)
@@ -7790,7 +7841,7 @@ rtc.setSeconds(${seconds})\n`;
 Blockly.Blocks['v831_real_time_clock'] = {
     init: function () {
         this.appendDummyInput()
-            .appendField("IIC"+Blockly.Msg.RTC_getDateTime)
+            .appendField("IIC" + Blockly.Msg.RTC_getDateTime)
             .appendField(new Blockly.FieldDropdown([
                 [Blockly.Msg.time_get_current_date_y, "getYear"],
                 [Blockly.Msg.time_get_current_date_m, "getMonth"],

+ 3 - 0
blockly/msg/js/en.js

@@ -3864,6 +3864,9 @@ Blockly.Msg.internet_http_get_url = "Set destination URL:";
 Blockly.Msg.internet_http_post_title = "Send HTTP POST Request";
 Blockly.Msg.internet_http_post_url = "Set destination URL:";
 Blockly.Msg.internet_http_post_json = "Submit JSON Data:";
+Blockly.Msg.send_email_title = "Send Email";
+Blockly.Msg.send_email_to = "Send To";
+Blockly.Msg.send_email_content = "Email Content:";
 
 
 Blockly.Msg.internet_http_get_server_data_title = "Get Data Requested from Local HTTP Server";

+ 3 - 0
blockly/msg/js/zh-hans.js

@@ -3855,6 +3855,9 @@ Blockly.Msg.internet_http_get_url = "设置目标网址:";
 Blockly.Msg.internet_http_post_title = "发送 HTTP POST 请求";
 Blockly.Msg.internet_http_post_url = "设置目标网址:";
 Blockly.Msg.internet_http_post_json = "提交数据 (JSON):";
+Blockly.Msg.send_email_title = "发送邮件";
+Blockly.Msg.send_email_to = "发送到";
+Blockly.Msg.send_email_content = "邮件内容:";
 
 Blockly.Msg.internet_http_get_server_data_title = "获取从本地 HTTP 服务器请求得到的数据";
 Blockly.Msg.internet_http_get_server_data_type = "数据类型为:";

+ 3 - 0
blockly/msg/js/zh-hant.js

@@ -4326,6 +4326,9 @@ Blockly.Msg.internet_http_get_url = "設定目標網址:";
 Blockly.Msg.internet_http_post_title = "發送 HTTP POST 請求";
 Blockly.Msg.internet_http_post_url = "設定目標網址:";
 Blockly.Msg.internet_http_post_json = "提交數據 (JSON):";
+Blockly.Msg.send_email_title = "發送郵件";
+Blockly.Msg.send_email_to = "發送到";
+Blockly.Msg.send_email_content = "郵件内容:";
 
 Blockly.Msg.internet_http_get_server_data_title = "獲取從本地 HTTP 伺服器請求得到的數據";
 Blockly.Msg.internet_http_get_server_data_type = "數據類型爲:";

+ 1 - 0
msg/en.js

@@ -324,6 +324,7 @@ Ardublockly.LOCALISED_TEXT = {
     basis_wifi_connect: "WiFi",
     basis_wifi_hotspot: "WiFi Hotspot",
     basis_http: "HTTP Request",
+    send_email_label:"Send Email",
     basis_ws: "WebSocket",
     basis_service_cococloud: "CocoCloud",
     basis_ifttt: "IFTTT",

+ 1 - 0
msg/zh-hans.js

@@ -291,6 +291,7 @@ Ardublockly.LOCALISED_TEXT = {
     basis_wifi_connect: "WiFi",
     basis_wifi_hotspot: "WiFi 热点",
     basis_http: "HTTP请求",
+    send_email_label:"发送邮件",
     basis_ws: "WebSocket",
     basis_service_cococloud: "CocoCloud",
     basis_ifttt: "IFTTT",

+ 1 - 0
msg/zh-hant.js

@@ -292,6 +292,7 @@ Ardublockly.LOCALISED_TEXT = {
     basis_wifi_connect: "WiFi",
     basis_wifi_hotspot: "WiFi 熱點",
     basis_http: "HTTP請求",
+    send_email_label:"發送郵件",
     basis_ws: "WebSocket",
     basis_service_cococloud: "CocoCloud",
     basis_ifttt: "IFTTT",

+ 44 - 32
src/editor.js

@@ -2786,37 +2786,37 @@ BlockPyEditor.CATEGORY_MAP = {
         // '<block type="speech_recognition_phonetic_to_pinyin_setup"></block>' +
         '<block type="speech_recognition_phonetic_to_pinyin_set_param">' +
         '    <mutation items="3"></mutation>' +
-        '    <value name="PINYIN0">'+
-        '    <shadow type="math_number">'+
-        '        <field name="NUM">0</field>'+
-        '    </shadow>'+
-        '    <block type="set_pinyin_dict_create_with_items_insert">'+
-        '        <mutation items="2"></mutation>'+
-        '        <field name="KEY0">ni</field>'+
-        '        <field name="toneADD00">3</field>'+
-        '        <field name="KEY1">hao</field>'+
-        '        <field name="toneADD11">3</field>'+
-        '    </block>'+
-        '    </value>'+
-        '    <value name="PINYIN1">'+
-        '    <block type="set_pinyin_dict_create_with_items_insert">'+
-        '        <mutation items="2"></mutation>'+
-        '        <field name="KEY0">hao</field>'+
-        '        <field name="toneADD00">3</field>'+
-        '        <field name="KEY1">de</field>'+
-        '        <field name="toneADD11">1</field>'+
-        '    </block>'+
-        '    </value>'+
-        '    <value name="PINYIN2">'+
-        '    <block type="set_pinyin_dict_create_with_items_insert">'+
-        '        <mutation items="3"></mutation>'+
-        '        <field name="KEY0">wan</field>'+
-        '        <field name="toneADD00">3</field>'+
-        '        <field name="KEY1">shang</field>'+
-        '        <field name="toneADD11">4</field>'+
-        '        <field name="KEY2">hao</field>'+
-        '        <field name="toneADD22">3</field>'+
-        '    </block>'+
+        '    <value name="PINYIN0">' +
+        '    <shadow type="math_number">' +
+        '        <field name="NUM">0</field>' +
+        '    </shadow>' +
+        '    <block type="set_pinyin_dict_create_with_items_insert">' +
+        '        <mutation items="2"></mutation>' +
+        '        <field name="KEY0">ni</field>' +
+        '        <field name="toneADD00">3</field>' +
+        '        <field name="KEY1">hao</field>' +
+        '        <field name="toneADD11">3</field>' +
+        '    </block>' +
+        '    </value>' +
+        '    <value name="PINYIN1">' +
+        '    <block type="set_pinyin_dict_create_with_items_insert">' +
+        '        <mutation items="2"></mutation>' +
+        '        <field name="KEY0">hao</field>' +
+        '        <field name="toneADD00">3</field>' +
+        '        <field name="KEY1">de</field>' +
+        '        <field name="toneADD11">1</field>' +
+        '    </block>' +
+        '    </value>' +
+        '    <value name="PINYIN2">' +
+        '    <block type="set_pinyin_dict_create_with_items_insert">' +
+        '        <mutation items="3"></mutation>' +
+        '        <field name="KEY0">wan</field>' +
+        '        <field name="toneADD00">3</field>' +
+        '        <field name="KEY1">shang</field>' +
+        '        <field name="toneADD11">4</field>' +
+        '        <field name="KEY2">hao</field>' +
+        '        <field name="toneADD22">3</field>' +
+        '    </block>' +
         '    </value>' +
         '</block>' +
         '<block type="speech_recognition_set_pinyin_tone"></block>' +
@@ -3262,7 +3262,19 @@ BlockPyEditor.CATEGORY_MAP = {
         '</block>' +
         '<block type="CocoRobo_get"></block>' +
         '<block type="esp32_network_http_get_data_from_local_server"></block>' +
-
+        '<label id="send_email_label" text="发送邮件" web-class="myLabelStyle" style="font-size:20px;"></label>' +
+        '<block type="cocopi_email_send">' +
+        '      <value name="email">' +
+        '       <shadow type="text">' +
+        '           <field name="TEXT">jidechao@cocorobo.cc</field>' +
+        '       </shadow>' +
+        '      </value>' +
+        '      <value name="email_content">' +
+        '       <shadow type="text">' +
+        '           <field name="TEXT">content</field>' +
+        '       </shadow>' +
+        '      </value>' +
+        '</block>' +
         '</category>' +
         '<category id="catCloudData" name="云端" colour="#3062c1">' +
         '<label id="basis_service_cococloud" text="Basis service cococloud" web-class="myLabelStyle" style="font-size:20px;"></label>' +

+ 102 - 35
src/python/GPT/文生图.xml

@@ -1,62 +1,129 @@
 <xml xmlns="http://www.w3.org/1999/xhtml" type="IoT">
   <block type="V831_code_scanning_network" id="o|=(8@6y?!9X~yNq,Esi" x="-86" y="71">
     <next>
-      <block type="variables_set" id=";su3LI/ZZns%NLWA*d//">
-        <field name="VAR">img_src</field>
+      <block type="variables_set" id=")iVD]kccK5Rh0e())bb@">
+        <field name="VAR">img_to_text_content</field>
         <value name="VALUE">
-          <shadow type="math_number" id="!^ZX}~l$sF;f-/DQu-5r">
+          <shadow type="math_number" id="@^`9U?/UByIVcA@@tA*r">
             <field name="NUM">0</field>
           </shadow>
-          <block type="cocopi_chatGpt_text_to_img_loading" id="-SOP|T?QX5fug$L(KOfJ">
-            <value name="NAME">
-              <shadow type="text" id="f{_U]T+^Un[KxILYPx:m">
-                <field name="TEXT">生成一张狂风骤雨图片</field>
-              </shadow>
-            </value>
+          <block type="text" id="RNy9zUy[xDu{{J:OHj17">
+            <field name="TEXT">生成一张狂风骤雨图片</field>
           </block>
         </value>
         <next>
-          <block type="controls_repeat_forever" id="%^pGg[gavsJ@[AZTJJvC">
-            <statement name="DO">
-              <block type="ai_lcd_clearcanvas" id="zl$?(cS]-@,Q}3MA0vC)">
-                <next>
-                  <block type="ai_lcd_draw_image_on_canvas" id="2].=jU}J@-1BA2RWg!~J">
-                    <value name="image_path">
-                      <shadow type="text" id="$6Hp`,)B8!|5Jtn(@G61">
-                        <field name="TEXT">/home/res/logo.png</field>
-                      </shadow>
-                      <block type="v831_img_open" id="s0,ln4drdL?dnUPBi9w^">
-                        <value name="save_path">
-                          <shadow type="text" id="#d?ikG[mrx+:`9JRv!)o">
-                            <field name="TEXT">/root/preset/img/cocorobo_logo.jpg</field>
-                          </shadow>
-                          <block type="variables_get" id=".c;Sgm/=uN+3{a~I^/a.">
+          <block type="variables_set" id="V2+_z5Oc#{g^z?)?2rJ)">
+            <field name="VAR">img_src</field>
+            <value name="VALUE">
+              <shadow type="math_number" id=";$j$R{vGDSL{@o!SHtdl">
+                <field name="NUM">0</field>
+              </shadow>
+              <block type="cocopi_chatGpt_text_to_img_loading" id="4De^)!!k+clWiJ3IA(^i">
+                <value name="NAME">
+                  <shadow type="text" id="}N1D1;NPz6=6f#J#@q_)">
+                    <field name="TEXT">生成一张狂风骤雨图片</field>
+                  </shadow>
+                  <block type="variables_get" id="B^9oU%3a@}gmO(l?Z=5l">
+                    <field name="VAR">img_to_text_content</field>
+                  </block>
+                </value>
+              </block>
+            </value>
+            <next>
+              <block type="controls_repeat_forever" id="%^pGg[gavsJ@[AZTJJvC">
+                <statement name="DO">
+                  <block type="controls_if" id="*/}`F-)1joSIx4`;B=#,">
+                    <mutation else="1"></mutation>
+                    <value name="IF0">
+                      <block type="logic_compare" id="]0$i}O6%v`3.ciyVKl?Q">
+                        <field name="OP">NEQ</field>
+                        <value name="A">
+                          <block type="variables_get" id="]2U*.!uh*YICC,m?7ssZ">
                             <field name="VAR">img_src</field>
                           </block>
                         </value>
+                        <value name="B">
+                          <block type="text" id="n/2kkLvkD`MG/|18aDPt">
+                            <field name="TEXT"></field>
+                          </block>
+                        </value>
                       </block>
                     </value>
-                    <value name="scale_y">
-                      <block type="lcd_set_position" id="HJ+e^*cfs;1D*`gY,h-@">
-                        <value name="POSX">
-                          <shadow type="math_number" id="%YKM{K#AyNXOo@Fs+j.w">
-                            <field name="NUM">0</field>
+                    <statement name="DO0">
+                      <block type="ai_lcd_draw_image_on_canvas" id="tTN`NRJ7S`dVddeW.QEk">
+                        <value name="image_path">
+                          <block type="v831_img_text" id="I|@WR_6{6abprrcuOlo=">
+                            <value name="save_path">
+                              <shadow type="text" id="m5.=`q1Ee(W#^Pa=zax)">
+                                <field name="TEXT">/root/preset/img/cocorobo_logo.jpg</field>
+                              </shadow>
+                              <block type="variables_get" id="APR}F_.AWJT%,XE$%R_o">
+                                <field name="VAR">img_src</field>
+                              </block>
+                            </value>
+                          </block>
+                        </value>
+                        <value name="scale_y">
+                          <block type="lcd_set_position" id="p7[#[zo5Ylwz$lT,XYQe">
+                            <value name="POSX">
+                              <shadow type="math_number" id="eKiX5cr3{t;mAjB+Jyn1">
+                                <field name="NUM">0</field>
+                              </shadow>
+                            </value>
+                            <value name="POSY">
+                              <shadow type="math_number" id="KuF-C8(s{h2XoizU5nAQ">
+                                <field name="NUM">0</field>
+                              </shadow>
+                            </value>
+                          </block>
+                        </value>
+                        <value name="alpha">
+                          <shadow type="math_number" id="Acf);`qT!2OYkl#-.|=T">
+                            <field name="NUM">1</field>
+                          </shadow>
+                        </value>
+                      </block>
+                    </statement>
+                    <statement name="ELSE">
+                      <block type="ai_lcd_textcarvas" id="qvV^ckfD{9iud*A?RQM)">
+                        <value name="POSA">
+                          <block type="lcd_set_position" id="97g/+ASRIxev}KDa[ZdX">
+                            <value name="POSX">
+                              <shadow type="math_number" id="Xp~3h-$LM`Tdj0|1ae~[">
+                                <field name="NUM">0</field>
+                              </shadow>
+                            </value>
+                            <value name="POSY">
+                              <shadow type="math_number" id="l7W9FL0G~J^Q[$3D^{Z5">
+                                <field name="NUM">0</field>
+                              </shadow>
+                            </value>
+                          </block>
+                        </value>
+                        <value name="CONTENT">
+                          <shadow type="text" id=":Un:g~!Uj89Y?zWhon%z">
+                            <field name="TEXT">图片生成失败</field>
                           </shadow>
                         </value>
-                        <value name="POSY">
-                          <shadow type="math_number" id="*.132W_kH!x4@$,DFUkp">
-                            <field name="NUM">0</field>
+                        <value name="COLOR">
+                          <block type="lcd_set_color" id="8(EY%*~^VRfSXDN[U]Xx">
+                            <field name="COLOR">#ff0000</field>
+                          </block>
+                        </value>
+                        <value name="Scale">
+                          <shadow type="math_number" id="^ED4NZ|;by8q]C6C$}Ts">
+                            <field name="NUM">1</field>
                           </shadow>
                         </value>
                       </block>
-                    </value>
+                    </statement>
                     <next>
                       <block type="ai_lcd_showcarvas_set_display" id="bEE9sNGO]JzqRK6*-wD_"></block>
                     </next>
                   </block>
-                </next>
+                </statement>
               </block>
-            </statement>
+            </next>
           </block>
         </next>
       </block>